submitting patch from enterprise version
[csql.git] / include / Statement.h
blobb2f8cbd1f0c697126d831e7917adb81a706c9b11
1 /***************************************************************************
2 * Copyright (C) 2007 by Prabakaran Thirumalai *
3 * praba_tuty@yahoo.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20 #ifndef STATEMENT_H
21 #define STATEMENT_H
22 #include "Parser.h"
24 class Statement
26 protected:
27 ParsedData *parsedData;
28 DatabaseManager *dbMgr;
30 public:
31 void setParsedData(ParsedData *pData) { parsedData = pData; }
32 void setDbMgr(DatabaseManager *dbmgr) { dbMgr = dbmgr; }
35 virtual int noOfParamFields() { return 0; }
36 virtual DbRetVal execute(int &rowsAffected)=0;
37 virtual DbRetVal setParam(int paramNo, void *value)=0;
39 virtual DbRetVal setShortParam(int paramNo, short value)=0;
40 virtual DbRetVal setIntParam(int paramNo, int value)=0;
41 virtual DbRetVal setLongParam(int paramNo, long value)=0;
42 virtual DbRetVal setLongLongParam(int paramNo, long long value)=0;
43 virtual DbRetVal setByteIntParam(int paramNo, ByteInt value)=0;
44 virtual DbRetVal setFloatParam(int paramNo, float value)=0;
45 virtual DbRetVal setDoubleParam(int paramNo, double value)=0;
46 virtual DbRetVal setStringParam(int paramNo, char *value)=0;
47 virtual DbRetVal setDateParam(int paramNo, Date value)=0;
48 virtual DbRetVal setTimeParam(int paramNo, Time value)=0;
49 virtual DbRetVal setTimeStampParam(int paramNo, TimeStamp value)=0;
50 virtual DbRetVal setBinaryParam(int paramNo, void *value, int length)=0;
51 virtual DbRetVal resolve()=0;
52 virtual bool isFldNull(int pos)=0;
53 virtual bool isFldNull(char *name)=0;
54 virtual int getFldPos(char *name)=0;
55 virtual DbRetVal setNull(int pos)=0;
56 virtual ~Statement(){}
59 class DmlStatement : public Statement
61 protected:
62 Table *table;
64 void **params;
65 //used to store FieldValue* for insert or ConditionValue* for other stmts
67 char **paramValues;
68 int totalParams;
70 public:
71 int noOfParamFields() { return totalParams; }
72 virtual DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info) =0;
74 virtual DbRetVal execute(int &rowsAffected)=0;
75 virtual DbRetVal setParam(int paramNo, void *value)=0;
77 virtual DbRetVal setShortParam(int paramNo, short value)=0;
78 virtual DbRetVal setIntParam(int paramNo, int value)=0;
79 virtual DbRetVal setLongParam(int paramNo, long value)=0;
80 virtual DbRetVal setLongLongParam(int paramNo, long long value)=0;
81 virtual DbRetVal setByteIntParam(int paramNo, ByteInt value)=0;
82 virtual DbRetVal setFloatParam(int paramNo, float value)=0;
83 virtual DbRetVal setDoubleParam(int paramNo, double value)=0;
84 virtual DbRetVal setStringParam(int paramNo, char *value)=0;
85 virtual DbRetVal setDateParam(int paramNo, Date value)=0;
86 virtual DbRetVal setTimeParam(int paramNo, Time value)=0;
87 virtual DbRetVal setTimeStampParam(int paramNo, TimeStamp value)=0;
88 virtual DbRetVal setBinaryParam(int paramNo, void *value, int length)=0;
89 virtual bool isFldNull(int pos)=0;
90 virtual bool isFldNull(char *fldName)=0;
91 virtual DbRetVal setNull(int pos)=0;
92 virtual DbRetVal resolve()=0;
93 virtual void* getParamValuePtr( int pos )=0;
94 virtual int getFldPos(char *name)=0;
95 virtual ~DmlStatement(){}
96 void setLoading(bool flag) { table->setLoading(flag); }
99 class InsStatement : public DmlStatement
101 public:
102 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
104 DbRetVal execute(int &rowsAffected);
105 DbRetVal setParam(int paramNo, void *value);
107 DbRetVal setShortParam(int paramNo, short value);
108 DbRetVal setIntParam(int paramNo, int value);
109 DbRetVal setLongParam(int paramNo, long value);
110 DbRetVal setLongLongParam(int paramNo, long long value);
111 DbRetVal setByteIntParam(int paramNo, ByteInt value);
112 DbRetVal setFloatParam(int paramNo, float value);
113 DbRetVal setDoubleParam(int paramNo, double value);
114 DbRetVal setStringParam(int paramNo, char *value);
115 DbRetVal setDateParam(int paramNo, Date value);
116 DbRetVal setTimeParam(int paramNo, Time value);
117 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
118 DbRetVal setBinaryParam(int paramNo, void *value, int length);
119 bool isFldNull(int pos){return table->isFldNull(pos);}
120 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
121 void* getParamValuePtr( int );
122 int getFldPos(char *name);
123 DbRetVal setNull(int pos);
124 DbRetVal resolve();
125 InsStatement();
126 ~InsStatement();
129 class SelStatement : public DmlStatement
131 private:
132 DbRetVal resolveStar();
133 DbRetVal setBindFieldAndValues();
134 DbRetVal resolveForCondition();
136 public:
137 FieldValue **bindFields;
138 char **bindFieldValues;
139 int totalFields;
141 bool isPointReturned;
142 bool handleAggWithTbl;
144 DbRetVal execute(int &rowsAffected);
145 DbRetVal setParam(int paramNo, void *value);
147 DbRetVal setShortParam(int paramNo, short value);
148 DbRetVal setIntParam(int paramNo, int value);
149 DbRetVal setLongParam(int paramNo, long value);
150 DbRetVal setLongLongParam(int paramNo, long long value);
151 DbRetVal setByteIntParam(int paramNo, ByteInt value);
152 DbRetVal setFloatParam(int paramNo, float value);
153 DbRetVal setDoubleParam(int paramNo, double value);
154 DbRetVal setStringParam(int paramNo, char *value);
155 DbRetVal setDateParam(int paramNo, Date value);
156 DbRetVal setTimeParam(int paramNo, Time value);
157 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
158 DbRetVal setBinaryParam(int paramNo, void *value, int length);
160 DbRetVal replaceStarWithFirstFldName(FieldName *name);
161 DbRetVal resolveGroupFld(AggTableImpl *impl);
162 bool isFldNull(int pos){return table->isFldNull(pos);}
163 bool isFldNull(char *fldName) { return table->isFldNull(fldName); }
164 int getFldPos(char *name);
165 DbRetVal setNull(int pos){}
166 DbRetVal close();
167 DbRetVal resolve();
169 void* handleSingleTableAggWithoutGroup();
171 SelStatement();
172 ~SelStatement();
174 DbRetVal openTables();
175 // DbRetVal resolveGroupFld(AggTableImpl *impl);
177 DbRetVal setBindField(int pos, void* value);
179 int noOfProjFields();
180 DbRetVal getProjFldInfo (int projpos, FieldInfo *&fInfo);
181 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
183 void *getParamValuePtr( int );
184 DataType getFieldType( int );
185 int getFieldLength( int );
186 char* getFieldName( int );
188 void *fetch();
189 void *fetch(DbRetVal &rv);
190 void *fetchAndPrint(bool SQL);
191 void *next();
192 void *getFieldValuePtr( int );
195 class UpdStatement : public DmlStatement
197 public:
198 DbRetVal execute(int &rowsAffected);
199 DbRetVal setParam(int paramNo, void *value);
201 DbRetVal setShortParam(int paramNo, short value);
202 DbRetVal setIntParam(int paramNo, int value);
203 DbRetVal setLongParam(int paramNo, long value);
204 DbRetVal setLongLongParam(int paramNo, long long value);
205 DbRetVal setByteIntParam(int paramNo, ByteInt value);
206 DbRetVal setFloatParam(int paramNo, float value);
207 DbRetVal setDoubleParam(int paramNo, double value);
208 DbRetVal setStringParam(int paramNo, char *value);
209 DbRetVal setDateParam(int paramNo, Date value);
210 DbRetVal setTimeParam(int paramNo, Time value);
211 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
212 DbRetVal setBinaryParam(int paramNo, void *value, int length);
213 void* getParamValuePtr(int);
214 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
215 bool isFldNull(int pos){return table->isFldNull(pos);}
216 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
217 int getFldPos(char *name);
218 DbRetVal setNull(int pos);
219 DbRetVal resolve();
220 UpdStatement();
221 ~UpdStatement();
222 int totalAssignParams;
223 DbRetVal resolveForAssignment();
226 class DelStatement : public DmlStatement
228 public:
229 DbRetVal execute(int &rowsAffected);
230 DbRetVal setParam(int paramNo, void *value);
232 DbRetVal setShortParam(int paramNo, short value);
233 DbRetVal setIntParam(int paramNo, int value);
234 DbRetVal setLongParam(int paramNo, long value);
235 DbRetVal setLongLongParam(int paramNo, long long value);
236 DbRetVal setByteIntParam(int paramNo, ByteInt value);
237 DbRetVal setFloatParam(int paramNo, float value);
238 DbRetVal setDoubleParam(int paramNo, double value);
239 DbRetVal setStringParam(int paramNo, char *value);
240 DbRetVal setDateParam(int paramNo, Date value);
241 DbRetVal setTimeParam(int paramNo, Time value);
242 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
243 DbRetVal setBinaryParam(int paramNo, void *value, int length);
244 bool isFldNull(int pos){return table->isFldNull(pos);}
245 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
246 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
247 void* getParamValuePtr(int);
248 DbRetVal setNull(int pos){}
249 DbRetVal resolve();
250 DelStatement();
251 ~DelStatement();
252 int getFldPos(char *name);
253 DbRetVal resolveForCondition(); //TODO::put this is Statement class, duplicated from SelStatement.
256 class DdlStatement : public Statement
258 public:
259 DbRetVal execute(int &rowsAffected)=0;
260 //TODO: i think rowsAffected is not part of ddl - gopal said its design decision
261 DbRetVal resolve()=0;
263 DbRetVal setParam(int paramNo, void *value) { }
264 DbRetVal setShortParam(int paramNo, short value) { }
265 DbRetVal setIntParam(int paramNo, int value) { }
266 DbRetVal setLongParam(int paramNo, long value) { }
267 DbRetVal setLongLongParam(int paramNo, long long value) { }
268 DbRetVal setByteIntParam(int paramNo, ByteInt value) { }
269 DbRetVal setFloatParam(int paramNo, float value) { }
270 DbRetVal setDoubleParam(int paramNo, double value) { }
271 DbRetVal setStringParam(int paramNo, char *value) { }
272 DbRetVal setDateParam(int paramNo, Date value) { }
273 DbRetVal setTimeParam(int paramNo, Time value) { }
274 DbRetVal setTimeStampParam(int paramNo, TimeStamp value) { }
275 DbRetVal setBinaryParam(int paramNo, void *value, int length) { }
276 bool isFldNull(int pos){ }
277 bool isFldNull(char *fldName ){ }
278 int getFldPos(char *name){}
279 DbRetVal setNull(int pos){}
282 class CreateTblStatement : public DdlStatement
284 public:
285 DbRetVal execute(int &rowsAffected);
286 DbRetVal resolve();
287 DbRetVal checkForDot(char *name);
288 CreateTblStatement();
289 ~CreateTblStatement();
291 private:
292 char tblName[IDENTIFIER_LENGTH];
293 TableDef tblDef;
296 class CreateIdxStatement : public DdlStatement
298 public:
299 DbRetVal execute(int &rowsAffected);
300 DbRetVal resolve(){return OK; }
302 CreateIdxStatement();
303 ~CreateIdxStatement();
307 class DropTblStatement : public DdlStatement
309 public:
310 DbRetVal execute(int &rowsAffected);
311 DbRetVal resolve(){return OK; }
313 DropTblStatement(){}
314 ~DropTblStatement(){}
316 class DropIdxStatement : public DdlStatement
318 public:
319 DbRetVal execute(int &rowsAffected);
320 DbRetVal resolve() {return OK; }
322 DropIdxStatement(){}
323 ~DropIdxStatement(){}
326 class StatementFactory
328 public:
329 static Statement* getStatement(ParsedData *pData );
331 #endif