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
#import <GDLAccess/EOExpressionArray.h>
34
#import <GDLAccess/EOJoinTypes.h>
37
@class EOAdaptorChannel;
39
@class EOSQLQualifier;
41
extern NSString *EOBindVariableNameKey;
42
extern NSString *EOBindVariablePlaceHolderKey;
43
extern NSString *EOBindVariableAttributeKey;
44
extern NSString *EOBindVariableValueKey;
46
@interface EOSQLExpression : NSObject <EOExpressionContext>
50
NSMutableDictionary *entitiesAndPropertiesAliases;
51
NSMutableArray *fromListEntities;
52
NSMutableString *content;
55
NSString *whereClauseString;
56
NSMutableString *listString;
57
NSMutableArray *bindings;
60
/* Building SQL expressions */
62
+ (id)deleteExpressionWithQualifier:(EOSQLQualifier *)qualifier
63
channel:(EOAdaptorChannel *)channel;
64
+ (id)insertExpressionForRow:(NSDictionary *)row
65
entity:(EOEntity *)entity
66
channel:(EOAdaptorChannel *)channel;
67
+ (id)selectExpressionForAttributes:(NSArray *)attributes
69
qualifier:(EOSQLQualifier *)qualifier
70
fetchOrder:(NSArray *)fetchOrder
71
channel:(EOAdaptorChannel *)channel;
72
+ (id)updateExpressionForRow:(NSDictionary *)row
73
qualifier:(EOSQLQualifier *)qualifier
74
channel:(EOAdaptorChannel *)channel;
76
- (id)deleteExpressionWithQualifier:(EOSQLQualifier *)qualifier
77
channel:(EOAdaptorChannel *)channel;
78
- (id)insertExpressionForRow:(NSDictionary *)row
79
entity:(EOEntity *)entity
80
channel:(EOAdaptorChannel *)channel;
81
- (id)selectExpressionForAttributes:(NSArray *)attributes
83
qualifier:(EOSQLQualifier *)qualifier
84
fetchOrder:(NSArray *)fetchOrder
85
channel:(EOAdaptorChannel *)channel;
86
- (id)updateExpressionForRow:(NSDictionary *)row
87
qualifier:(EOSQLQualifier *)qualifier
88
channel:(EOAdaptorChannel *)channel;
92
+ (Class)selectExpressionClass;
93
+ (Class)insertExpressionClass;
94
+ (Class)deleteExpressionClass;
95
+ (Class)updateExpressionClass;
97
/* Getting the adaptor */
98
- (EOAdaptor *)adaptor;
102
/* Creating components for the SELECT operation */
103
- (NSString *)selectListWithAttributes:(NSArray *)attributes
104
qualifier:(EOSQLQualifier *)qualifier;
105
- (NSString *)fromClause;
106
- (NSString *)whereClauseForQualifier:(EOSQLQualifier *)qualifier;
107
- (NSString *)joinExpressionForRelationshipPaths:(NSArray *)relationshipPaths;
108
- (NSString *)lockClause;
109
- (NSString *)orderByClauseForFetchOrder:(NSArray *)fetchOrder;
111
/* Creating components for the UPDATE operation */
112
- (id)updateListForRow:(NSDictionary *)row;
114
/* Creating components for the INSERT operation */
115
- (id)columnListForRow:(NSDictionary *)row;
116
- (id)valueListForRow:(NSDictionary *)row;
118
/* Final initialization */
119
- (id)finishBuildingExpression;
121
/* Caching aliases */
122
- (NSArray *)relationshipPathsForAttributes:(NSArray *)attributes
123
qualifier:(EOSQLQualifier *)qualifier
124
fetchOrder:(NSArray *)fetchOrder;
126
/* Getting the entity */
127
- (EOEntity *)entity;
129
/* Getting the expression value of an attribute in a given context. This
130
method is used by the expressionValueForAttribute: method. */
131
- (NSString *)expressionValueForAttribute:(EOAttribute *)attribute
137
@class EOFetchSpecification, EOKeyComparisonQualifier, EOKeyValueQualifier;
140
@interface EOSQLExpression(NewInEOF2)
142
+ (EOSQLExpression *)selectStatementForAttributes:(NSArray *)_attributes
144
fetchSpecification:(EOFetchSpecification *)_fspec
145
entity:(EOEntity *)_entity;
146
+ (EOSQLExpression *)expressionForString:(NSString *)_sql;
150
- (void)setStatement:(NSString *)_stmt;
151
- (NSString *)statement;
152
- (NSString *)whereClauseString;
156
- (NSString *)tableListWithRootEntity:(EOEntity *)_entity;
160
- (NSString *)assembleDeleteStatementWithQualifier:(EOQualifier *)_qualifier
161
tableList:(NSString *)_tableList
162
whereClause:(NSString *)_whereClause;
164
- (NSString *)assembleInsertStatementWithRow:(NSDictionary *)_row
165
tableList:(NSString *)_tables
166
columnList:(NSString *)_columns
167
valueList:(NSString *)_values;
169
- (NSString *)assembleSelectStatementWithAttributes:(NSArray *)_attributes
171
qualifier:(EOQualifier *)_qualifier
172
fetchOrder:(NSArray *)_fetchOrder
173
selectString:(NSString *)_selectString
174
columnList:(NSString *)_columns
175
tableList:(NSString *)_tables
176
whereClause:(NSString *)_whereClause
177
joinClause:(NSString *)_joinClause
178
orderByClause:(NSString *)_orderByClause
179
lockClause:(NSString *)_lockClause;
181
- (NSString *)assembleUpdateStatementWithRow:(NSDictionary *)_row
182
qualifier:(EOQualifier *)_qualifier
183
tableList:(NSString *)_tables
184
updateList:(NSString *)_updates
185
whereClause:(NSString *)_whereClause;
187
- (NSString *)assembleJoinClauseWithLeftName:(NSString *)_leftName
188
rightName:(NSString *)_rightName
189
joinSemantic:(EOJoinSemantic)_semantic;
193
- (BOOL)mustUseBindVariableForAttribute:(EOAttribute *)_attr;
194
- (BOOL)shouldUseBindVariableForAttribute:(EOAttribute *)_attr;
195
+ (BOOL)useBindVariables;
196
- (NSMutableDictionary *)bindVariableDictionaryForAttribute:(EOAttribute *)_attr
198
- (void)addBindVariableDictionary:(NSMutableDictionary *)_dictionary;
199
- (NSArray *)bindVariableDictionaries;
203
+ (NSString *)formatValue:(id)_value forAttribute:(EOAttribute *)_attribute;
204
- (NSString *)sqlStringForValue:(id)_value attributeNamed:(NSString *)_attrName;
205
+ (NSString *)sqlPatternFromShellPattern:(NSString *)_pattern;
209
- (NSString *)sqlStringForAttribute:(EOAttribute *)_attribute;
210
- (NSString *)sqlStringForAttributePath:(NSString *)_attrPath;
211
- (NSString *)sqlStringForAttributeNamed:(NSString *)_attrName;
215
+ (NSString *)formatSQLString:(NSString *)_sqlString format:(NSString *)_fmt;
217
/* qualifier operators */
219
- (NSString *)sqlStringForSelector:(SEL)_selector value:(id)_value;
223
- (NSString *)sqlStringForKeyComparisonQualifier:(EOKeyComparisonQualifier *)_q;
224
- (NSString *)sqlStringForKeyValueQualifier:(EOKeyValueQualifier *)_q;
225
- (NSString *)sqlStringForNegatedQualifier:(EOQualifier *)_q;
226
- (NSString *)sqlStringForConjoinedQualifiers:(NSArray *)_qs;
227
- (NSString *)sqlStringForDisjoinedQualifiers:(NSArray *)_qs;
231
- (NSMutableString *)listString;
232
- (void)appendItem:(NSString *)_itemString toListString:(NSMutableString *)_lstr;
236
- (void)prepareDeleteExpressionForQualifier:(EOQualifier *)_qualifier;
240
- (void)addUpdateListAttribute:(EOAttribute *)_attr value:(NSString *)_value;
242
- (void)prepareUpdateExpressionWithRow:(NSDictionary *)_row
243
qualifier:(EOQualifier *)_qualifier;
247
/* Private subclasses used by EOSQLExpression. */
249
@interface EOSelectSQLExpression : EOSQLExpression
252
@interface EOUpdateSQLExpression : EOSQLExpression
255
@interface EOInsertSQLExpression : EOSQLExpression
258
@interface EODeleteSQLExpression : EOSQLExpression
261
#endif /* __EOSQLExpression_h__ */