changing file creation mode from 777 to 644
[csql.git] / include / Statement.h
blob1fc02240164e6297d9763081d4513c8d259192db
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"
23 #include "CacheTableLoader.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 ResultSetPlan getResultSetPlan()=0;
57 virtual ~Statement(){}
60 class DmlStatement : public Statement
62 protected:
63 Table *table;
65 void **params;
66 //used to store FieldValue* for insert or ConditionValue* for other stmts
68 char **paramValues;
69 int totalParams;
71 public:
72 int noOfParamFields() { return totalParams; }
73 virtual DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info) =0;
75 virtual DbRetVal execute(int &rowsAffected)=0;
76 virtual DbRetVal setParam(int paramNo, void *value)=0;
78 virtual DbRetVal setShortParam(int paramNo, short value)=0;
79 virtual DbRetVal setIntParam(int paramNo, int value)=0;
80 virtual DbRetVal setLongParam(int paramNo, long value)=0;
81 virtual DbRetVal setLongLongParam(int paramNo, long long value)=0;
82 virtual DbRetVal setByteIntParam(int paramNo, ByteInt value)=0;
83 virtual DbRetVal setFloatParam(int paramNo, float value)=0;
84 virtual DbRetVal setDoubleParam(int paramNo, double value)=0;
85 virtual DbRetVal setStringParam(int paramNo, char *value)=0;
86 virtual DbRetVal setDateParam(int paramNo, Date value)=0;
87 virtual DbRetVal setTimeParam(int paramNo, Time value)=0;
88 virtual DbRetVal setTimeStampParam(int paramNo, TimeStamp value)=0;
89 virtual DbRetVal setBinaryParam(int paramNo, void *value, int length)=0;
90 virtual bool isFldNull(int pos)=0;
91 virtual bool isFldNull(char *fldName)=0;
92 virtual DbRetVal setNull(int pos)=0;
93 virtual DbRetVal resolve()=0;
94 virtual void* getParamValuePtr( int pos )=0;
95 virtual int getFldPos(char *name)=0;
96 virtual ~DmlStatement(){}
97 virtual ResultSetPlan getResultSetPlan()=0;
98 void setLoading(bool flag) { table->setLoading(flag); }
101 class InsStatement : public DmlStatement
103 public:
104 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
106 DbRetVal execute(int &rowsAffected);
107 DbRetVal setParam(int paramNo, void *value);
109 DbRetVal setShortParam(int paramNo, short value);
110 DbRetVal setIntParam(int paramNo, int value);
111 DbRetVal setLongParam(int paramNo, long value);
112 DbRetVal setLongLongParam(int paramNo, long long value);
113 DbRetVal setByteIntParam(int paramNo, ByteInt value);
114 DbRetVal setFloatParam(int paramNo, float value);
115 DbRetVal setDoubleParam(int paramNo, double value);
116 DbRetVal setStringParam(int paramNo, char *value);
117 DbRetVal setDateParam(int paramNo, Date value);
118 DbRetVal setTimeParam(int paramNo, Time value);
119 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
120 DbRetVal setBinaryParam(int paramNo, void *value, int length);
121 bool isFldNull(int pos){return table->isFldNull(pos);}
122 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
123 void* getParamValuePtr( int );
124 int getFldPos(char *name);
125 DbRetVal setNull(int pos);
126 DbRetVal resolve();
127 ResultSetPlan getResultSetPlan(){return Normal;}
128 InsStatement();
129 ~InsStatement();
132 class SelStatement : public DmlStatement
134 private:
135 DbRetVal resolveStar();
136 DbRetVal setBindFieldAndValues();
137 DbRetVal resolveForCondition();
138 DbRetVal resolveDistinct();
141 public:
142 FieldValue **bindFields;
143 char **bindFieldValues;
144 int totalFields;
146 bool isPointReturned;
147 bool handleAggWithTbl;
148 bool isRecLimitReached;
149 bool isOffsetReached;
150 int numRecords;
151 bool isExplain;
152 bool isJoin;
154 DbRetVal execute(int &rowsAffected);
155 DbRetVal setParam(int paramNo, void *value);
157 DbRetVal setShortParam(int paramNo, short value);
158 DbRetVal setIntParam(int paramNo, int value);
159 DbRetVal setLongParam(int paramNo, long value);
160 DbRetVal setLongLongParam(int paramNo, long long value);
161 DbRetVal setByteIntParam(int paramNo, ByteInt value);
162 DbRetVal setFloatParam(int paramNo, float value);
163 DbRetVal setDoubleParam(int paramNo, double value);
164 DbRetVal setStringParam(int paramNo, char *value);
165 DbRetVal setDateParam(int paramNo, Date value);
166 DbRetVal setTimeParam(int paramNo, Time value);
167 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
168 DbRetVal setBinaryParam(int paramNo, void *value, int length);
170 DbRetVal replaceStarWithFirstFldName(FieldName *name);
171 DbRetVal resolveGroupFld(AggTableImpl *impl);
172 DbRetVal resolveOrderByFld();
173 bool isInProjectionList(char *name, AggType aType);
174 bool isFldNull(int pos){return table->isFldNull(pos);}
175 bool isFldNull(char *fldName){ return table->isFldNull(fldName); }
176 int getFldPos(char *name);
177 DbRetVal setNull(int pos){ return ErrBadCall;}
178 DbRetVal close();
179 DbRetVal resolve();
181 void* handleSingleTableAggWithoutGroup();
182 bool isGroupFld(char *fName);
183 bool isJoinStmt() { return isJoin; }
185 SelStatement();
186 ~SelStatement();
188 bool isTableAlreadyPresent(char* tblName, char* aliasName);
189 DbRetVal openTables();
190 // DbRetVal resolveGroupFld(AggTableImpl *impl);
192 DbRetVal setBindField(int pos, void* value);
194 int noOfProjFields();
195 DbRetVal getProjFldInfo (int projpos, FieldInfo *&fInfo);
196 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
198 void *getParamValuePtr( int );
199 DataType getFieldType( int );
200 int getFieldLength( int );
201 char* getFieldName( int );
203 void *fetch();
204 void *fetch(DbRetVal &rv);
205 void *fetchAndPrint(bool SQL);
206 void *next();
207 void *getFieldValuePtr( int );
208 void *getFieldValuePtr( char *name );
209 void getProjFieldType(int *data);
210 ResultSetPlan getResultSetPlan(){ return Normal; }
213 class UpdStatement : public DmlStatement
215 public:
216 DbRetVal execute(int &rowsAffected);
217 DbRetVal setParam(int paramNo, void *value);
219 DbRetVal setShortParam(int paramNo, short value);
220 DbRetVal setIntParam(int paramNo, int value);
221 DbRetVal setLongParam(int paramNo, long value);
222 DbRetVal setLongLongParam(int paramNo, long long value);
223 DbRetVal setByteIntParam(int paramNo, ByteInt value);
224 DbRetVal setFloatParam(int paramNo, float value);
225 DbRetVal setDoubleParam(int paramNo, double value);
226 DbRetVal setStringParam(int paramNo, char *value);
227 DbRetVal setDateParam(int paramNo, Date value);
228 DbRetVal setTimeParam(int paramNo, Time value);
229 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
230 DbRetVal setBinaryParam(int paramNo, void *value, int length);
231 void* getParamValuePtr(int);
232 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
233 bool isFldNull(int pos){return table->isFldNull(pos);}
234 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
235 int getFldPos(char *name);
236 DbRetVal setNull(int pos);
237 DbRetVal resolve();
238 UpdStatement();
239 ~UpdStatement();
240 ResultSetPlan getResultSetPlan() {return Normal;}
241 int totalAssignParams;
242 DbRetVal resolveForAssignment();
243 ResultSetPlan plan;
246 class DelStatement : public DmlStatement
248 public:
249 DbRetVal execute(int &rowsAffected);
250 DbRetVal setParam(int paramNo, void *value);
252 DbRetVal setShortParam(int paramNo, short value);
253 DbRetVal setIntParam(int paramNo, int value);
254 DbRetVal setLongParam(int paramNo, long value);
255 DbRetVal setLongLongParam(int paramNo, long long value);
256 DbRetVal setByteIntParam(int paramNo, ByteInt value);
257 DbRetVal setFloatParam(int paramNo, float value);
258 DbRetVal setDoubleParam(int paramNo, double value);
259 DbRetVal setStringParam(int paramNo, char *value);
260 DbRetVal setDateParam(int paramNo, Date value);
261 DbRetVal setTimeParam(int paramNo, Time value);
262 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
263 DbRetVal setBinaryParam(int paramNo, void *value, int length);
264 bool isFldNull(int pos){return table->isFldNull(pos);}
265 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
266 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
267 void* getParamValuePtr(int);
268 DbRetVal setNull(int pos){ return ErrBadCall;}
269 DbRetVal resolve();
270 DelStatement();
271 ~DelStatement();
272 int getFldPos(char *name);
273 DbRetVal resolveForCondition(); //TODO::put this is Statement class, duplicated from SelStatement.
274 ResultSetPlan getResultSetPlan(){return Normal;}
277 class MetadataStatement : public DmlStatement
279 public:
280 FieldValue **bindFields;
281 char **bindFieldValues;
282 int totalFields;
283 ListIterator dataListIter;
285 int numRecords;
286 bool isPlanFreed;
287 bool isSecondFetch;
288 ResultSetPlan plan;
289 DbRetVal execute(int &rowsAffected);
290 DbRetVal setParam(int paramNo, void *value){return OK;};
292 DbRetVal setShortParam(int paramNo, short value){ return OK;};
293 DbRetVal setIntParam(int paramNo, int value){ return OK;};
294 DbRetVal setLongParam(int paramNo, long value){ return OK;};
295 DbRetVal setLongLongParam(int paramNo, long long value){ return OK;};
296 DbRetVal setByteIntParam(int paramNo, ByteInt value){ return OK;};
297 DbRetVal setFloatParam(int paramNo, float value){ return OK;};
298 DbRetVal setDoubleParam(int paramNo, double value){ return OK;};
299 DbRetVal setStringParam(int paramNo, char *value){ return OK;};
300 DbRetVal setDateParam(int paramNo, Date value){ return OK;};
301 DbRetVal setTimeParam(int paramNo, Time value){ return OK;};
302 DbRetVal setTimeStampParam(int paramNo, TimeStamp value){ return OK;};
303 DbRetVal setBinaryParam(int paramNo, void *value, int length){ return OK;};
305 DbRetVal replaceStarWithFirstFldName(FieldName *name){ return OK;};
306 DbRetVal resolveGroupFld(AggTableImpl *impl){ return OK;};
307 DbRetVal resolveOrderByFld(){ return OK;};
308 bool isFldNull(int pos){return table->isFldNull(pos);}
309 bool isFldNull(char *fldName){
310 if(plan != Normal) return false;
311 return table->isFldNull(fldName); }
312 int getFldPos(char *name);
313 DbRetVal setNull(int pos){ return ErrBadCall;}
314 DbRetVal close();
315 DbRetVal resolve();
317 MetadataStatement();
318 ~MetadataStatement();
320 void *getParamValuePtr( int ){ return NULL;}
321 DbRetVal openTables();
322 DbRetVal setBindField(int pos, void* value);
323 int noOfProjFields();
324 DbRetVal getProjFldInfo (int projpos, FieldInfo *&fInfo);
325 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
326 DataType getFieldType( int );
327 int getFieldLength( int );
328 char* getFieldName( int );
330 void *fetch();
331 void *fetch(DbRetVal &rv);
332 void *fetchAndPrint(bool SQL);
333 void *next();
334 void *getFieldValuePtr( int );
335 void *getFieldValuePtr( char *name );
336 void getProjFieldType(int *data);
337 void *fetchMetaData();
338 void freeMetadata();
339 ResultSetPlan getResultSetPlan(){return plan;}
340 ListIterator getExportKeyIterator();
341 ListIterator getImportKeyIterator();
342 ListIterator getDataTypeInfoIterator();
344 class CopyTblStatement : public DmlStatement
346 public:
347 DbRetVal execute(int &rowsAffected);
348 DbRetVal resolve();
349 DbRetVal setParam(int paramNo, void *value);
350 DbRetVal setShortParam(int paramNo, short value);
351 DbRetVal setIntParam(int paramNo, int value);
352 DbRetVal setLongParam(int paramNo, long value);
353 DbRetVal setLongLongParam(int paramNo, long long value);
354 DbRetVal setByteIntParam(int paramNo, ByteInt value);
355 DbRetVal setFloatParam(int paramNo, float value);
356 DbRetVal setDoubleParam(int paramNo, double value);
357 DbRetVal setStringParam(int paramNo, char *value);
358 DbRetVal setDateParam(int paramNo, Date value);
359 DbRetVal setTimeParam(int paramNo, Time value);
360 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
361 DbRetVal setBinaryParam(int paramNo, void *value, int length);
362 bool isFldNull(int pos){return table->isFldNull(pos);}
363 bool isFldNull(char *fldName){return table->isFldNull(fldName);}
364 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
365 void* getParamValuePtr(int);
366 DbRetVal setNull(int pos){ return ErrBadCall;}
367 int getFldPos(char *name);
368 ResultSetPlan getResultSetPlan(){return Normal;}
369 DbRetVal resolveForInsert();
370 DbRetVal resolveForCreate();
371 CopyTblStatement();
372 ~CopyTblStatement();
373 private:
374 void **bindFieldValues;
375 int totalFields;
376 Statement *innerSelStmt;
377 char tblName[IDENTIFIER_LENGTH];
382 class DdlStatement : public Statement
384 public:
385 DbRetVal execute(int &rowsAffected)=0;
386 //TODO: i think rowsAffected is not part of ddl - gopal said its design decision
387 DbRetVal resolve()=0;
389 DbRetVal setParam(int paramNo, void *value) { return ErrBadCall; }
390 DbRetVal setShortParam(int paramNo, short value) { return ErrBadCall; }
391 DbRetVal setIntParam(int paramNo, int value) { return ErrBadCall; }
392 DbRetVal setLongParam(int paramNo, long value) { return ErrBadCall; }
393 DbRetVal setLongLongParam(int paramNo, long long value) { return ErrBadCall; }
394 DbRetVal setByteIntParam(int paramNo, ByteInt value) { return ErrBadCall; }
395 DbRetVal setFloatParam(int paramNo, float value) { return ErrBadCall; }
396 DbRetVal setDoubleParam(int paramNo, double value) { return ErrBadCall; }
397 DbRetVal setStringParam(int paramNo, char *value) { return ErrBadCall; }
398 DbRetVal setDateParam(int paramNo, Date value) { return ErrBadCall; }
399 DbRetVal setTimeParam(int paramNo, Time value) { return ErrBadCall; }
400 DbRetVal setTimeStampParam(int paramNo, TimeStamp value) { return ErrBadCall;}
401 DbRetVal setBinaryParam(int paramNo, void *value, int length) { return ErrBadCall;}
402 bool isFldNull(int pos){ return false;}
403 bool isFldNull(char *fldName ){ return false;}
404 int getFldPos(char *name){ return -1;}
405 DbRetVal setNull(int pos){ return ErrBadCall;}
406 ResultSetPlan getResultSetPlan(){ ResultSetPlan dummy; return dummy;}
409 class CreateTblStatement : public DdlStatement
411 public:
412 DbRetVal execute(int &rowsAffected);
413 DbRetVal resolve();
414 DbRetVal checkForDot(char *name);
415 CreateTblStatement();
416 ~CreateTblStatement();
418 private:
419 char tblName[IDENTIFIER_LENGTH];
420 TableDef tblDef;
423 class CreateIdxStatement : public DdlStatement
425 public:
426 DbRetVal execute(int &rowsAffected);
427 DbRetVal resolve(){return OK; }
429 CreateIdxStatement();
430 ~CreateIdxStatement();
434 class DropTblStatement : public DdlStatement
436 public:
437 DbRetVal execute(int &rowsAffected);
438 DbRetVal resolve(){return OK; }
440 DropTblStatement(){}
441 ~DropTblStatement(){}
443 class CacheTblStatement : public DdlStatement
445 public:
446 DbRetVal execute(int &rowsAffected);
447 DbRetVal resolve();
448 CacheTableLoader cacheLoader;
449 CacheTblStatement(){}
453 class UserTblStatement : public DdlStatement
455 public:
456 char userName[IDENTIFIER_LENGTH];
457 UserManager *usrMgr;
458 UserNodeType uType;
459 DbRetVal execute(int &rowsAffected);
460 DbRetVal resolve();
461 void setUserManager(UserManager *mgr,char *user){ usrMgr = mgr; strcpy(userName,user);}
462 UserTblStatement(){ usrMgr = NULL;}
463 //~UserTblStatement(){ delete usrMgr;}
466 class AlterTblStatement : public DdlStatement
468 public:
469 DbRetVal execute(int &rowsAffected);
470 DbRetVal resolve();
471 DbRetVal resolveForModifyColumn();
472 DbRetVal resolveForAddDropColumn();
473 DbRetVal executeForAddDropColumn(int &rowsAffected);
474 DbRetVal executeForModifyColumn(int &rowsAffected){}
475 DbRetVal createIndex(const char *oldName,const char *newName);
476 AlterTblStatement();
477 ~AlterTblStatement();
478 AlterTableType altType;
479 void **bindFieldValues;
480 int totalFields;
481 int noOfOldTabFld;
482 Table *table;
483 TableDef tblDef;
487 class DropIdxStatement : public DdlStatement
489 public:
490 DbRetVal execute(int &rowsAffected);
491 DbRetVal resolve() {return OK; }
492 DropIdxStatement(){}
493 ~DropIdxStatement(){}
495 class CompactTblStatement : public DdlStatement
497 Table *table;
498 public:
499 DbRetVal execute(int &rowsAffected);
500 DbRetVal resolve();
501 CompactTblStatement(){ table=NULL;}
502 ~CompactTblStatement(){}
505 class StatementFactory
507 public:
508 static Statement* getStatement(ParsedData *pData );
510 #endif