4 Copyright (C) 1996 Free Software Foundation, Inc.
6 Author: Ovidiu Predescu <ovidiu@bx.logicnet.ro>
9 This file is part of the GNUstep Database Library.
11 This library is free software; you can redistribute it and/or
12 modify it under the terms of the GNU Library General Public
13 License as published by the Free Software Foundation; either
14 version 2 of the License, or (at your option) any later version.
16 This library is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Library General Public License for more details.
21 You should have received a copy of the GNU Library General Public
22 License along with this library; see the file COPYING.LIB.
23 If not, write to the Free Software Foundation,
24 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 #ifndef __EOSQLExpression_h__
28 #define __EOSQLExpression_h__
30 #import <Foundation/NSDictionary.h>
31 #import <Foundation/NSArray.h>
33 #include <GDLAccess/EOExpressionArray.h>
34 #include <GDLAccess/EOJoinTypes.h>
41 Apparently the only object which implements EOExpressionContext?
44 @class EOAdaptor, EOAdaptorChannel, EOEntity, EOSQLQualifier;
46 extern NSString *EOBindVariableNameKey;
47 extern NSString *EOBindVariablePlaceHolderKey;
48 extern NSString *EOBindVariableAttributeKey;
49 extern NSString *EOBindVariableValueKey;
51 @interface EOSQLExpression : NSObject <EOExpressionContext>
55 NSMutableDictionary *entitiesAndPropertiesAliases;
56 NSMutableArray *fromListEntities;
57 NSMutableString *content;
60 NSString *whereClauseString;
61 NSMutableString *listString;
62 NSMutableArray *bindings;
65 /* Building SQL expressions */
67 + (id)deleteExpressionWithQualifier:(EOSQLQualifier *)qualifier
68 channel:(EOAdaptorChannel *)channel;
69 + (id)insertExpressionForRow:(NSDictionary *)row
70 entity:(EOEntity *)entity
71 channel:(EOAdaptorChannel *)channel;
72 + (id)selectExpressionForAttributes:(NSArray *)attributes
74 qualifier:(EOSQLQualifier *)qualifier
75 fetchOrder:(NSArray *)fetchOrder
76 channel:(EOAdaptorChannel *)channel;
77 + (id)updateExpressionForRow:(NSDictionary *)row
78 qualifier:(EOSQLQualifier *)qualifier
79 channel:(EOAdaptorChannel *)channel;
81 - (id)deleteExpressionWithQualifier:(EOSQLQualifier *)qualifier
82 channel:(EOAdaptorChannel *)channel;
83 - (id)insertExpressionForRow:(NSDictionary *)row
84 entity:(EOEntity *)entity
85 channel:(EOAdaptorChannel *)channel;
86 - (id)selectExpressionForAttributes:(NSArray *)attributes
88 qualifier:(EOSQLQualifier *)qualifier
89 fetchOrder:(NSArray *)fetchOrder
90 channel:(EOAdaptorChannel *)channel;
91 - (id)updateExpressionForRow:(NSDictionary *)row
92 qualifier:(EOSQLQualifier *)qualifier
93 channel:(EOAdaptorChannel *)channel;
97 + (Class)selectExpressionClass;
98 + (Class)insertExpressionClass;
99 + (Class)deleteExpressionClass;
100 + (Class)updateExpressionClass;
102 /* Getting the adaptor */
103 - (EOAdaptor *)adaptor;
107 /* Creating components for the SELECT operation */
108 - (NSString *)selectListWithAttributes:(NSArray *)attributes
109 qualifier:(EOSQLQualifier *)qualifier;
110 - (NSString *)fromClause;
111 - (NSString *)whereClauseForQualifier:(EOSQLQualifier *)qualifier;
112 - (NSString *)joinExpressionForRelationshipPaths:(NSArray *)relationshipPaths;
113 - (NSString *)lockClause;
114 - (NSString *)orderByClauseForFetchOrder:(NSArray *)fetchOrder;
116 /* Creating components for the UPDATE operation */
117 - (id)updateListForRow:(NSDictionary *)row;
119 /* Creating components for the INSERT operation */
120 - (id)columnListForRow:(NSDictionary *)row;
121 - (id)valueListForRow:(NSDictionary *)row;
123 /* Final initialization */
124 - (id)finishBuildingExpression;
126 /* Caching aliases */
127 - (NSArray *)relationshipPathsForAttributes:(NSArray *)attributes
128 qualifier:(EOSQLQualifier *)qualifier
129 fetchOrder:(NSArray *)fetchOrder;
131 /* Getting the entity */
132 - (EOEntity *)entity;
134 /* Getting the expression value of an attribute in a given context. This
135 method is used by the expressionValueForAttribute: method. */
136 - (NSString *)expressionValueForAttribute:(EOAttribute *)attribute
142 @class EOFetchSpecification, EOKeyComparisonQualifier, EOKeyValueQualifier;
145 @interface EOSQLExpression(NewInEOF2)
147 + (EOSQLExpression *)selectStatementForAttributes:(NSArray *)_attributes
149 fetchSpecification:(EOFetchSpecification *)_fspec
150 entity:(EOEntity *)_entity;
151 + (EOSQLExpression *)expressionForString:(NSString *)_sql;
155 - (void)setStatement:(NSString *)_stmt;
156 - (NSString *)statement;
157 - (NSString *)whereClauseString;
161 - (NSString *)tableListWithRootEntity:(EOEntity *)_entity;
165 - (NSString *)assembleDeleteStatementWithQualifier:(EOQualifier *)_qualifier
166 tableList:(NSString *)_tableList
167 whereClause:(NSString *)_whereClause;
169 - (NSString *)assembleInsertStatementWithRow:(NSDictionary *)_row
170 tableList:(NSString *)_tables
171 columnList:(NSString *)_columns
172 valueList:(NSString *)_values;
174 - (NSString *)assembleSelectStatementWithAttributes:(NSArray *)_attributes
176 qualifier:(EOQualifier *)_qualifier
177 fetchOrder:(NSArray *)_fetchOrder
178 selectString:(NSString *)_selectString
179 columnList:(NSString *)_columns
180 tableList:(NSString *)_tables
181 whereClause:(NSString *)_whereClause
182 joinClause:(NSString *)_joinClause
183 orderByClause:(NSString *)_orderByClause
184 lockClause:(NSString *)_lockClause;
186 - (NSString *)assembleUpdateStatementWithRow:(NSDictionary *)_row
187 qualifier:(EOQualifier *)_qualifier
188 tableList:(NSString *)_tables
189 updateList:(NSString *)_updates
190 whereClause:(NSString *)_whereClause;
192 - (NSString *)assembleJoinClauseWithLeftName:(NSString *)_leftName
193 rightName:(NSString *)_rightName
194 joinSemantic:(EOJoinSemantic)_semantic;
198 - (BOOL)mustUseBindVariableForAttribute:(EOAttribute *)_attr;
199 - (BOOL)shouldUseBindVariableForAttribute:(EOAttribute *)_attr;
200 + (BOOL)useBindVariables;
201 - (NSMutableDictionary *)bindVariableDictionaryForAttribute:(EOAttribute *)_attr
203 - (void)addBindVariableDictionary:(NSMutableDictionary *)_dictionary;
204 - (NSArray *)bindVariableDictionaries;
208 + (NSString *)formatValue:(id)_value forAttribute:(EOAttribute *)_attribute;
209 - (NSString *)sqlStringForValue:(id)_value attributeNamed:(NSString *)_attrName;
210 + (NSString *)sqlPatternFromShellPattern:(NSString *)_pattern;
214 - (NSString *)sqlStringForAttribute:(EOAttribute *)_attribute;
215 - (NSString *)sqlStringForAttributePath:(NSString *)_attrPath;
216 - (NSString *)sqlStringForAttributeNamed:(NSString *)_attrName;
220 + (NSString *)formatSQLString:(NSString *)_sqlString format:(NSString *)_fmt;
222 /* qualifier operators */
224 - (NSString *)sqlStringForSelector:(SEL)_selector value:(id)_value;
228 - (NSString *)sqlStringForKeyComparisonQualifier:(EOKeyComparisonQualifier *)_q;
229 - (NSString *)sqlStringForKeyValueQualifier:(EOKeyValueQualifier *)_q;
230 - (NSString *)sqlStringForNegatedQualifier:(EOQualifier *)_q;
231 - (NSString *)sqlStringForConjoinedQualifiers:(NSArray *)_qs;
232 - (NSString *)sqlStringForDisjoinedQualifiers:(NSArray *)_qs;
236 - (NSMutableString *)listString;
237 - (void)appendItem:(NSString *)_itemString toListString:(NSMutableString *)_lstr;
241 - (void)prepareDeleteExpressionForQualifier:(EOQualifier *)_qualifier;
245 - (void)addUpdateListAttribute:(EOAttribute *)_attr value:(NSString *)_value;
247 - (void)prepareUpdateExpressionWithRow:(NSDictionary *)_row
248 qualifier:(EOQualifier *)_qualifier;
252 /* Private subclasses used by EOSQLExpression. */
254 @interface EOSelectSQLExpression : EOSQLExpression
257 @interface EOUpdateSQLExpression : EOSQLExpression
260 @interface EOInsertSQLExpression : EOSQLExpression
263 @interface EODeleteSQLExpression : EOSQLExpression
266 #endif /* __EOSQLExpression_h__ */