]> err.no Git - sope/blob - sope-gdl1/GDLAccess/EOSQLExpression.h
added missing inline pathes
[sope] / sope-gdl1 / GDLAccess / EOSQLExpression.h
1 /* 
2    EOSQLExpression.h
3
4    Copyright (C) 1996 Free Software Foundation, Inc.
5
6    Author: Ovidiu Predescu <ovidiu@bx.logicnet.ro>
7    Date: September 1996
8
9    This file is part of the GNUstep Database Library.
10
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.
15
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.
20
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.
25 */
26
27 #ifndef __EOSQLExpression_h__
28 #define __EOSQLExpression_h__
29
30 #import <Foundation/NSDictionary.h>
31 #import <Foundation/NSArray.h>
32
33 #include <GDLAccess/EOExpressionArray.h>
34 #include <GDLAccess/EOJoinTypes.h>
35
36 /*
37   EOSQLExpression
38
39   TODO: document
40   
41   Apparently the only object which implements EOExpressionContext?
42 */
43
44 @class EOAdaptor, EOAdaptorChannel, EOEntity, EOSQLQualifier;
45
46 extern NSString *EOBindVariableNameKey;
47 extern NSString *EOBindVariablePlaceHolderKey;
48 extern NSString *EOBindVariableAttributeKey;
49 extern NSString *EOBindVariableValueKey;
50
51 @interface EOSQLExpression : NSObject <EOExpressionContext>
52 {
53     EOEntity            *entity;
54     EOAdaptor           *adaptor;
55     NSMutableDictionary *entitiesAndPropertiesAliases;
56     NSMutableArray      *fromListEntities;
57     NSMutableString     *content;
58
59     /* new in EOF2 */
60     NSString            *whereClauseString;
61     NSMutableString     *listString;
62     NSMutableArray      *bindings;
63 }
64
65 /* Building SQL expressions */
66
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
73   lock:(BOOL)flag
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;
80
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
87   lock:(BOOL)flag
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;
94
95 /* factory classes */
96
97 + (Class)selectExpressionClass;
98 + (Class)insertExpressionClass;
99 + (Class)deleteExpressionClass;
100 + (Class)updateExpressionClass;
101
102 /* Getting the adaptor */
103 - (EOAdaptor *)adaptor;
104
105 // Private methods.
106
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;
115
116 /* Creating components for the UPDATE operation */
117 - (id)updateListForRow:(NSDictionary *)row;
118
119 /* Creating components for the INSERT operation */
120 - (id)columnListForRow:(NSDictionary *)row;
121 - (id)valueListForRow:(NSDictionary *)row;
122
123 /* Final initialization */
124 - (id)finishBuildingExpression;
125
126 /* Caching aliases */
127 - (NSArray *)relationshipPathsForAttributes:(NSArray *)attributes
128   qualifier:(EOSQLQualifier *)qualifier
129   fetchOrder:(NSArray *)fetchOrder;
130
131 /* Getting the entity */
132 - (EOEntity *)entity;
133
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
137   context:context;
138
139 @end
140
141 @class NSArray;
142 @class EOFetchSpecification, EOKeyComparisonQualifier, EOKeyValueQualifier;
143 @class EOQualifier;
144
145 @interface EOSQLExpression(NewInEOF2)
146
147 + (EOSQLExpression *)selectStatementForAttributes:(NSArray *)_attributes
148   lock:(BOOL)_flag
149   fetchSpecification:(EOFetchSpecification *)_fspec
150   entity:(EOEntity *)_entity;
151 + (EOSQLExpression *)expressionForString:(NSString *)_sql;
152
153 /* accessors */
154
155 - (void)setStatement:(NSString *)_stmt;
156 - (NSString *)statement;
157 - (NSString *)whereClauseString;
158
159 /* tables */
160
161 - (NSString *)tableListWithRootEntity:(EOEntity *)_entity;
162
163 /* assembly */
164
165 - (NSString *)assembleDeleteStatementWithQualifier:(EOQualifier *)_qualifier
166   tableList:(NSString *)_tableList
167   whereClause:(NSString *)_whereClause;
168
169 - (NSString *)assembleInsertStatementWithRow:(NSDictionary *)_row
170   tableList:(NSString *)_tables
171   columnList:(NSString *)_columns
172   valueList:(NSString *)_values;
173
174 - (NSString *)assembleSelectStatementWithAttributes:(NSArray *)_attributes
175   lock:(BOOL)_lock
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;
185
186 - (NSString *)assembleUpdateStatementWithRow:(NSDictionary *)_row
187   qualifier:(EOQualifier *)_qualifier
188   tableList:(NSString *)_tables
189   updateList:(NSString *)_updates
190   whereClause:(NSString *)_whereClause;
191
192 - (NSString *)assembleJoinClauseWithLeftName:(NSString *)_leftName
193   rightName:(NSString *)_rightName
194   joinSemantic:(EOJoinSemantic)_semantic;
195
196 /* bind variables */
197
198 - (BOOL)mustUseBindVariableForAttribute:(EOAttribute *)_attr;
199 - (BOOL)shouldUseBindVariableForAttribute:(EOAttribute *)_attr;
200 + (BOOL)useBindVariables;
201 - (NSMutableDictionary *)bindVariableDictionaryForAttribute:(EOAttribute *)_attr
202   value:(id)_value;
203 - (void)addBindVariableDictionary:(NSMutableDictionary *)_dictionary;
204 - (NSArray *)bindVariableDictionaries;
205
206 /* values */
207
208 + (NSString *)formatValue:(id)_value forAttribute:(EOAttribute *)_attribute;
209 - (NSString *)sqlStringForValue:(id)_value attributeNamed:(NSString *)_attrName;
210 + (NSString *)sqlPatternFromShellPattern:(NSString *)_pattern;
211
212 /* attributes */
213
214 - (NSString *)sqlStringForAttribute:(EOAttribute *)_attribute;
215 - (NSString *)sqlStringForAttributePath:(NSString *)_attrPath;
216 - (NSString *)sqlStringForAttributeNamed:(NSString *)_attrName;
217
218 /* SQL formats */
219
220 + (NSString *)formatSQLString:(NSString *)_sqlString format:(NSString *)_fmt;
221
222 /* qualifier operators */
223
224 - (NSString *)sqlStringForSelector:(SEL)_selector value:(id)_value;
225
226 /* qualifiers */
227
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;
233
234 /* list strings */
235
236 - (NSMutableString *)listString;
237 - (void)appendItem:(NSString *)_itemString toListString:(NSMutableString *)_lstr;
238
239 /* deletes */
240
241 - (void)prepareDeleteExpressionForQualifier:(EOQualifier *)_qualifier;
242
243 /* updates */
244
245 - (void)addUpdateListAttribute:(EOAttribute *)_attr value:(NSString *)_value;
246
247 - (void)prepareUpdateExpressionWithRow:(NSDictionary *)_row
248   qualifier:(EOQualifier *)_qualifier;
249
250 @end
251
252 /* Private subclasses used by EOSQLExpression. */
253
254 @interface EOSelectSQLExpression : EOSQLExpression
255 @end
256
257 @interface EOUpdateSQLExpression : EOSQLExpression
258 @end
259
260 @interface EOInsertSQLExpression : EOSQLExpression
261 @end
262
263 @interface EODeleteSQLExpression : EOSQLExpression
264 @end
265
266 #endif /* __EOSQLExpression_h__ */
267
268 /*
269   Local Variables:
270   c-basic-offset: 4
271   tab-width: 8
272   End:
273 */