optimizing single table aggregate queries with no index
[csql.git] / src / sql / Statement.h
blob2c7334417f071b9594ee2a548437897a3820996d
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)=0;
51 virtual DbRetVal resolve()=0;
52 virtual bool isFldNull(int pos)=0;
53 virtual int getFldPos(char *name)=0;
54 virtual DbRetVal setNull(int pos)=0;
55 virtual ~Statement(){}
58 class DmlStatement : public Statement
60 protected:
61 Table *table;
63 void **params;
64 //used to store FieldValue* for insert or ConditionValue* for other stmts
66 char **paramValues;
67 int totalParams;
69 public:
70 int noOfParamFields() { return totalParams; }
71 virtual DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info) =0;
73 virtual DbRetVal execute(int &rowsAffected)=0;
74 virtual DbRetVal setParam(int paramNo, void *value)=0;
76 virtual DbRetVal setShortParam(int paramNo, short value)=0;
77 virtual DbRetVal setIntParam(int paramNo, int value)=0;
78 virtual DbRetVal setLongParam(int paramNo, long value)=0;
79 virtual DbRetVal setLongLongParam(int paramNo, long long value)=0;
80 virtual DbRetVal setByteIntParam(int paramNo, ByteInt value)=0;
81 virtual DbRetVal setFloatParam(int paramNo, float value)=0;
82 virtual DbRetVal setDoubleParam(int paramNo, double value)=0;
83 virtual DbRetVal setStringParam(int paramNo, char *value)=0;
84 virtual DbRetVal setDateParam(int paramNo, Date value)=0;
85 virtual DbRetVal setTimeParam(int paramNo, Time value)=0;
86 virtual DbRetVal setTimeStampParam(int paramNo, TimeStamp value)=0;
87 virtual DbRetVal setBinaryParam(int paramNo, void *value)=0;
88 virtual bool isFldNull(int pos)=0;
89 virtual DbRetVal setNull(int pos)=0;
90 virtual DbRetVal resolve()=0;
91 virtual void* getParamValuePtr( int pos )=0;
92 virtual int getFldPos(char *name)=0;
93 virtual ~DmlStatement(){}
96 class InsStatement : public DmlStatement
98 public:
99 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
101 DbRetVal execute(int &rowsAffected);
102 DbRetVal setParam(int paramNo, void *value);
104 DbRetVal setShortParam(int paramNo, short value);
105 DbRetVal setIntParam(int paramNo, int value);
106 DbRetVal setLongParam(int paramNo, long value);
107 DbRetVal setLongLongParam(int paramNo, long long value);
108 DbRetVal setByteIntParam(int paramNo, ByteInt value);
109 DbRetVal setFloatParam(int paramNo, float value);
110 DbRetVal setDoubleParam(int paramNo, double value);
111 DbRetVal setStringParam(int paramNo, char *value);
112 DbRetVal setDateParam(int paramNo, Date value);
113 DbRetVal setTimeParam(int paramNo, Time value);
114 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
115 DbRetVal setBinaryParam(int paramNo, void *value);
116 bool isFldNull(int pos){return table->isFldNull(pos);}
117 void* getParamValuePtr( int );
118 int getFldPos(char *name);
119 DbRetVal setNull(int pos);
120 DbRetVal resolve();
121 InsStatement();
122 ~InsStatement();
125 class SelStatement : public DmlStatement
127 private:
128 DbRetVal resolveStar();
129 DbRetVal setBindFieldAndValues();
130 DbRetVal resolveForCondition();
132 public:
133 FieldValue **bindFields;
134 char **bindFieldValues;
135 int totalFields;
137 bool isPointReturned;
138 bool handleAggWithTbl;
140 DbRetVal execute(int &rowsAffected);
141 DbRetVal setParam(int paramNo, void *value);
143 DbRetVal setShortParam(int paramNo, short value);
144 DbRetVal setIntParam(int paramNo, int value);
145 DbRetVal setLongParam(int paramNo, long value);
146 DbRetVal setLongLongParam(int paramNo, long long value);
147 DbRetVal setByteIntParam(int paramNo, ByteInt value);
148 DbRetVal setFloatParam(int paramNo, float value);
149 DbRetVal setDoubleParam(int paramNo, double value);
150 DbRetVal setStringParam(int paramNo, char *value);
151 DbRetVal setDateParam(int paramNo, Date value);
152 DbRetVal setTimeParam(int paramNo, Time value);
153 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
154 DbRetVal setBinaryParam(int paramNo, void *value);
156 DbRetVal replaceStarWithFirstFldName(FieldName *name);
157 DbRetVal resolveGroupFld(AggTableImpl *impl);
158 bool isFldNull(int pos){return table->isFldNull(pos);}
159 int getFldPos(char *name);
160 DbRetVal setNull(int pos){}
161 DbRetVal close();
162 DbRetVal freeScan();
163 DbRetVal resolve();
165 void* handleSingleTableAggWithoutGroup();
167 SelStatement();
168 ~SelStatement();
170 DbRetVal openTables();
171 // DbRetVal resolveGroupFld(AggTableImpl *impl);
173 DbRetVal setBindField(int pos, void* value);
175 int noOfProjFields();
176 DbRetVal getProjFldInfo (int projpos, FieldInfo *&fInfo);
177 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
179 void *getParamValuePtr( int );
180 DataType getFieldType( int );
181 int getFieldLength( int );
182 char* getFieldName( int );
184 void *fetch();
185 void *fetch(DbRetVal &rv);
186 void *fetchAndPrint(bool SQL);
187 void *next();
188 void *getFieldValuePtr( int );
191 class UpdStatement : public DmlStatement
193 public:
194 DbRetVal execute(int &rowsAffected);
195 DbRetVal setParam(int paramNo, void *value);
197 DbRetVal setShortParam(int paramNo, short value);
198 DbRetVal setIntParam(int paramNo, int value);
199 DbRetVal setLongParam(int paramNo, long value);
200 DbRetVal setLongLongParam(int paramNo, long long value);
201 DbRetVal setByteIntParam(int paramNo, ByteInt value);
202 DbRetVal setFloatParam(int paramNo, float value);
203 DbRetVal setDoubleParam(int paramNo, double value);
204 DbRetVal setStringParam(int paramNo, char *value);
205 DbRetVal setDateParam(int paramNo, Date value);
206 DbRetVal setTimeParam(int paramNo, Time value);
207 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
208 DbRetVal setBinaryParam(int paramNo, void *value);
209 void* getParamValuePtr(int);
210 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
211 bool isFldNull(int pos){return table->isFldNull(pos);}
212 int getFldPos(char *name);
213 DbRetVal setNull(int pos){}
214 DbRetVal resolve();
215 UpdStatement();
216 ~UpdStatement();
218 int totalAssignParams;
219 DbRetVal resolveForAssignment();
222 class DelStatement : public DmlStatement
224 public:
225 DbRetVal execute(int &rowsAffected);
226 DbRetVal setParam(int paramNo, void *value);
228 DbRetVal setShortParam(int paramNo, short value);
229 DbRetVal setIntParam(int paramNo, int value);
230 DbRetVal setLongParam(int paramNo, long value);
231 DbRetVal setLongLongParam(int paramNo, long long value);
232 DbRetVal setByteIntParam(int paramNo, ByteInt value);
233 DbRetVal setFloatParam(int paramNo, float value);
234 DbRetVal setDoubleParam(int paramNo, double value);
235 DbRetVal setStringParam(int paramNo, char *value);
236 DbRetVal setDateParam(int paramNo, Date value);
237 DbRetVal setTimeParam(int paramNo, Time value);
238 DbRetVal setTimeStampParam(int paramNo, TimeStamp value);
239 DbRetVal setBinaryParam(int paramNo, void *value);
240 bool isFldNull(int pos){return table->isFldNull(pos);}
241 DbRetVal getParamFldInfo(int paramPos, FieldInfo *&info);
242 void* getParamValuePtr(int);
243 DbRetVal setNull(int pos){}
244 DbRetVal resolve();
245 DelStatement();
246 ~DelStatement();
247 int getFldPos(char *name);
248 DbRetVal resolveForCondition(); //TODO::put this is Statement class, duplicated from SelStatement.
252 class DdlStatement : public Statement
254 public:
255 DbRetVal execute(int &rowsAffected)=0;
256 //TODO: i think rowsAffected is not part of ddl - gopal said its design decision
257 DbRetVal resolve()=0;
259 DbRetVal setParam(int paramNo, void *value) { }
260 DbRetVal setShortParam(int paramNo, short value) { }
261 DbRetVal setIntParam(int paramNo, int value) { }
262 DbRetVal setLongParam(int paramNo, long value) { }
263 DbRetVal setLongLongParam(int paramNo, long long value) { }
264 DbRetVal setByteIntParam(int paramNo, ByteInt value) { }
265 DbRetVal setFloatParam(int paramNo, float value) { }
266 DbRetVal setDoubleParam(int paramNo, double value) { }
267 DbRetVal setStringParam(int paramNo, char *value) { }
268 DbRetVal setDateParam(int paramNo, Date value) { }
269 DbRetVal setTimeParam(int paramNo, Time value) { }
270 DbRetVal setTimeStampParam(int paramNo, TimeStamp value) { }
271 DbRetVal setBinaryParam(int paramNo, void *value) { }
272 bool isFldNull(int pos){ }
273 int getFldPos(char *name){}
274 DbRetVal setNull(int pos){}
277 class CreateTblStatement : public DdlStatement
279 public:
280 DbRetVal execute(int &rowsAffected);
281 DbRetVal resolve();
282 DbRetVal checkForDot(char *name);
283 CreateTblStatement();
284 ~CreateTblStatement();
286 private:
287 char tblName[IDENTIFIER_LENGTH];
288 TableDef tblDef;
291 class CreateIdxStatement : public DdlStatement
293 public:
294 DbRetVal execute(int &rowsAffected);
295 DbRetVal resolve(){return OK; }
297 CreateIdxStatement();
298 ~CreateIdxStatement();
302 class DropTblStatement : public DdlStatement
304 public:
305 DbRetVal execute(int &rowsAffected);
306 DbRetVal resolve(){return OK; }
308 DropTblStatement(){}
309 ~DropTblStatement(){}
311 class DropIdxStatement : public DdlStatement
313 public:
314 DbRetVal execute(int &rowsAffected);
315 DbRetVal resolve() {return OK; }
317 DropIdxStatement(){}
318 ~DropIdxStatement(){}
321 class StatementFactory
323 public:
324 static Statement* getStatement(ParsedData *pData );
326 #endif