adding sqlserver executable
[csql.git] / include / AggTableImpl.h
blob7fb7630e7debcf69e13af95e8b1d7918a4646726
1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.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 ***************************************************************************/
16 #ifndef JOINTABLE_IMPL_H
17 #define JOINTABLE_IMPL_H
18 #include<os.h>
19 #include<DataType.h>
20 #include<Transaction.h>
21 #include<Database.h>
22 #include<Index.h>
23 #include<CatalogTables.h>
24 #include<Info.h>
25 #include<Debug.h>
26 #include<DatabaseManagerImpl.h>
27 #include<Predicate.h>
28 enum AggType
30 AGG_MIN = 1,
31 AGG_MAX,
32 AGG_SUM,
33 AGG_AVG,
34 AGG_COUNT,
35 AGG_UNKNOWN
37 class AggFldDef
39 public:
40 char fldName[IDENTIFIER_LENGTH];
41 DataType type;
42 int length;
43 void *bindBuf;
44 void *appBuf;
45 AggType atype;
46 bool alreadyBinded;
47 AggFldDef()
49 strcpy(fldName, "");
50 type=typeUnknown;
51 length=0;
52 bindBuf=NULL;
53 appBuf=NULL;
54 atype=AGG_UNKNOWN;
55 alreadyBinded=false;
59 class AggTableImpl:public Table
61 private:
62 char tblName_[IDENTIFIER_LENGTH];
63 void *curTuple; //holds the current tuple ptr. moved during fetch() calls
64 List fldList;
65 AggFldDef groupFld;
66 Table *tableHdl;
67 List aggNodes; //change this list to some other data structure
68 ListIterator aggNodeIter;
70 int aggNodeSize;
71 DbRetVal copyValuesToBindBuffer(void *tuple);
72 public:
73 AggTableImpl();
74 virtual ~AggTableImpl();
75 DbRetVal getFieldInfo(const char *fieldName, FieldInfo *&info)
76 { return ErrBadCall; }
77 bool isGroupSet()
79 if (groupFld.type == typeUnknown) return false; else return true;
81 void* insertOrGet();
82 void setTable(Table *impl){ tableHdl = impl;}
83 Table* getTableHdl(){ return tableHdl; }
84 void closeScan();
85 void *getBindFldAddr(const char *name);
86 DbRetVal bindFld(const char *name, void *val);
87 DbRetVal bindFld(const char *name, AggType aggType, void *val);
88 DbRetVal setGroup(const char *name, void *val);
89 void setCondition(Condition *p){}
90 void markFldNull(const char *name){}
91 void markFldNull(int colpos){}
92 bool isFldNull(const char *name){return false;}
93 bool isFldNull(int colpos){return false;}
94 void clearFldNull(const char *name){}
95 void clearFldNull(int colpos){}
96 DbRetVal insertTuple() { return ErrBadCall; }
97 DbRetVal updateTuple() { return ErrBadCall; }
98 DbRetVal deleteTuple() { return ErrBadCall; }
99 int deleteWhere() { return ErrBadCall; }
100 int truncate() { return ErrBadCall; }
101 long spaceUsed() { return 0; }
102 int pagesUsed() { return 0; }
103 DbRetVal lock(bool shared) { return ErrBadCall; }
104 DbRetVal unlock(){ return ErrBadCall; }
105 DbRetVal setUndoLogging(bool flag) { return ErrBadCall; }
106 void printSQLIndexString(){ };
107 char* getName() { return tableHdl->getName(); }
108 List getFieldNameList(){ List list; return list;}
109 DbRetVal execute();
110 void* fetch();
111 void* fetch(DbRetVal &rv);
112 void* fetchNoBind();
113 void* fetchNoBind(DbRetVal &rv);
114 DbRetVal close();
115 long numTuples();
116 void printInfo();
124 enum JoinType
126 INNER_JOIN = 1,
127 RIGHT_JOIN,
128 LEFT_JOIN,
129 FULL_JOIN,
130 UNKNOWN_JOIN
132 class JoinProjFieldInfo
134 public:
135 char tabFieldName[IDENTIFIER_LENGTH*2];
136 char tableName[IDENTIFIER_LENGTH];
137 char fieldName[IDENTIFIER_LENGTH];
138 DataType type;
139 int length;
140 void *appBuf;
141 void *bindBuf;
142 JoinProjFieldInfo()
144 strcpy(tableName,""); strcpy(fieldName, "");
145 type= typeUnknown; length =0; appBuf= NULL; bindBuf=NULL;
148 class JoinCondition
150 public:
151 char tableName1[IDENTIFIER_LENGTH];
152 char tableName2[IDENTIFIER_LENGTH];
153 char fieldName1[IDENTIFIER_LENGTH];
154 char fieldName2[IDENTIFIER_LENGTH];
155 DataType type1;
156 DataType type2;
157 int length1;
158 int length2;
159 void *bindBuf1;
160 void *bindBuf2;
161 bool alreadyBinded1;
162 bool alreadyBinded2;
163 ComparisionOp op;
164 JoinCondition()
166 strcpy(tableName1,""); strcpy(fieldName1, "");
167 strcpy(tableName2,""); strcpy(fieldName2, "");
168 type1= typeUnknown; length1 =0; bindBuf1=NULL;
169 type2= typeUnknown; length2 =0; bindBuf2=NULL;
170 alreadyBinded1=false; alreadyBinded2=false;
174 class JoinTableImpl:public Table
176 private:
177 void *curTuple; //holds the current tuple ptr. moved during fetch() calls
178 List projList;
179 Table *leftTableHdl;
180 Table *rightTableHdl;
181 bool availableLeft;
183 JoinType jType;
184 ListIterator rsIter;
185 bool isNestedLoop;
186 bool rightExhausted;
187 DbRetVal copyValuesToBindBuffer(void *tuple);
188 JoinCondition jCondition;
189 Predicate *pred;
191 public:
192 JoinTableImpl();
193 virtual ~JoinTableImpl();
195 DbRetVal getFieldInfo(const char *fieldName, FieldInfo *&info);
197 void setTable(Table *left, Table *right)
198 { leftTableHdl = left; rightTableHdl = right; }
200 void closeScan();
201 void setJoinType(JoinType type) { jType = type; }
202 //binding
203 DbRetVal bindFld(const char *name, void *val);
204 DbRetVal setJoinCondition(const char *fldname1, ComparisionOp op,
205 const char *fldname2);
207 void setCondition(Condition *p)
208 { if (p) pred = p->getPredicate(); else pred = NULL;}
210 void markFldNull(const char *name){}
211 void markFldNull(int colpos){}
212 bool isFldNull(const char *name){return false;}
213 bool isFldNull(int colpos){return false;}
214 void clearFldNull(const char *name){}
215 void clearFldNull(int colpos){}
216 DbRetVal insertTuple() { return ErrBadCall; }
217 DbRetVal updateTuple() { return ErrBadCall; }
218 DbRetVal deleteTuple() { return ErrBadCall; }
219 int deleteWhere() { return ErrBadCall; }
220 int truncate() { return ErrBadCall; }
221 long spaceUsed() { return 0; }
222 int pagesUsed() { return 0; }
223 DbRetVal lock(bool shared) { return ErrBadCall; }
224 DbRetVal unlock(){ return ErrBadCall; }
225 DbRetVal setUndoLogging(bool flag) { return ErrBadCall; }
226 void printSQLIndexString(){ };
227 List getFieldNameList();
228 char* getName() { return NULL; }
230 bool evaluate();
231 DbRetVal execute();
232 void* fetch();
233 void* fetch(DbRetVal &rv);
234 void* fetchNoBind();
235 void* fetchNoBind(DbRetVal &rv);
236 DbRetVal close();
238 long numTuples();
239 void printInfo();
240 void *getBindFldAddr(const char *name);
245 #endif