30 #include "Reflector.h"
35 #include "CibernateConnPools.h"
36 #include "DateFormat.h"
37 #include "BinaryData.h"
39 #include "CibernateQuery.h"
40 #include "RegexUtil.h"
42 typedef map<string,Object*> Params;
46 string demangle(
const char *mangled);
54 Params params,params1;
56 bool allocateStmt(
bool);
57 map<string,string> ntmap,ntmap1;
58 void clearMaps(){ntmap.clear();params.clear();ntmap1.clear();params1.clear();}
60 void* getElements(
string clasName);
61 void* getElements(vector<string> cols,
string clasName);
65 bool executeInsert(
CibernateQuery cquery, vector<string> cols,
void* t);
66 bool executeUpdate(
CibernateQuery cquery, vector<string> cols,
void* t);
67 int storeProperty(
ClassInfo clas,
void* t,
int var,
string fieldName);
68 int getProperty(
int dataType,
int columnSize, map<string, void*>& colValMap,
string colName,
int var);
69 void* sqlfuncs(
string type,
string clasName);
77 bool startTransaction();
80 void procedureCall(
string);
81 void addParam(
string name,
string type,
Object &obj){ntmap[name]=type;params[name]=&obj;}
82 void addParam(
string name,
Object &obj){params[name]=&obj;}
83 Object getParam(
string name){
return *params[name];}
84 void addParam1(
string name,
string type,
Object &obj){ntmap1[name]=type;params1[name]=&obj;}
85 void addParam1(
string name,
Object &obj){params1[name]=&obj;}
86 Object getParam1(
string name){
return *params1[name];}
87 vector<map<string,void*> > getARSCW(
string tableName,vector<string> cols,vector<string> coltypes);
88 void truncate(
string clasName);
89 void empty(
string clasName);
96 const char *mangled =
typeid(t).name();
97 string clasName = demangle(mangled);
98 if(clasName!=query.className)
104 void* vect = executeQuery(query);
107 vecT = *(vector<T>*)vect;
115 const char *mangled =
typeid(t).name();
116 string clasName = demangle(mangled);
117 if(clasName!=query.className)
123 void* vect = executeQuery(query);
126 vecT = *(vector<T>*)vect;
139 const char *mangled =
typeid(t).name();
140 string clasName = demangle(mangled);
141 if(clasName!=query.className)
145 void* vect = executeQuery(query);
148 bool* flag = (
bool*)vect;
156 template<
class T> vector<T> getAll()
159 const char *mangled =
typeid(t).name();
160 string clasName = demangle(mangled);
164 void* vect = executeQuery(query, cols);
167 vecT = *(vector<T>*)vect;
173 template<
class T> T
get(
int id)
179 const char *mangled =
typeid(t).name();
180 string clasName = demangle(mangled);
182 query.addColumnBinding(
"id", oid);
184 void* vect = executeQuery(query, cols);
187 vecT = *(vector<T>*)vect;
197 template<
class T,
class R> vector<R> getColumnValues(
string name)
200 cols.push_back(name);
202 const char *mangled =
typeid(t).name();
203 string clasName = demangle(mangled);
206 void* vect = executeQuery(query, cols);
210 vecT = *(vector<T>*)vect;
215 ClassInfo clas = reflector.getClassInfo(clasName);
217 string methname =
"get"+AfcUtil::camelCased(name);
218 Method meth = clas.getMethod(methname,argus);
220 for (
int var = 0; var < (int)vecT.size(); ++var) {
221 void *ns = reflector.invokeMethodGVP(&(vecT.at(var)),meth,valus);
222 vecR.push_back(*(R*)ns);
229 template<
class T,
class R> vector<R> getColumnValues(
string name, PosParameters propPosVaues)
232 cols.push_back(name);
234 const char *mangled =
typeid(t).name();
235 string clasName = demangle(mangled);
237 query.propPosVaues = propPosVaues;
239 void* vect = executeQuery(query, cols);
243 vecT = *(vector<T>*)vect;
248 ClassInfo clas = reflector.getClassInfo(clasName);
250 string methname =
"get"+AfcUtil::camelCased(name);
251 Method meth = clas.getMethod(methname,argus);
253 for (
int var = 0; var < (int)vecT.size(); ++var) {
254 void *ns = reflector.invokeMethodGVP(&(vecT.at(var)),meth,valus);
255 vecR.push_back(*(R*)ns);
262 template<
class T,
class R> vector<R> getColumnValues(
string name, Parameters propNameVaues)
265 cols.push_back(name);
267 const char *mangled =
typeid(t).name();
268 string clasName = demangle(mangled);
270 query.propNameVaues = propNameVaues;
272 void* vect = executeQuery(query, cols);
276 vecT = *(vector<T>*)vect;
281 ClassInfo clas = reflector.getClassInfo(clasName);
283 string methname =
"get"+AfcUtil::camelCased(name);
284 Method meth = clas.getMethod(methname,argus);
286 for (
int var = 0; var < (int)vecT.size(); ++var) {
287 void *ns = reflector.invokeMethodGVP(&(vecT.at(var)),meth,valus);
288 vecR->push_back(*(R*)ns);
297 template<
class T>
void insert(T t)
299 const char *mangled =
typeid(t).name();
300 string clasName = demangle(mangled);
303 executeInsert(cquery, cols, &t);
306 template<
class T>
void bulkInsert(vector<T> vecT)
308 for(
unsigned int k=0;k<vecT.size();k++)
315 template<
class T>
void update(T t)
317 const char *mangled =
typeid(t).name();
318 string clasName = demangle(mangled);
321 executeUpdate(cquery, cols, &t);
324 template<
class T>
void truncate()
327 const char *mangled =
typeid(t).name();
328 string clasName = demangle(mangled);
332 template<
class T>
void empty()
335 const char *mangled =
typeid(t).name();
336 string clasName = demangle(mangled);
340 template<
class T>
long getNumRows()
343 const char *mangled =
typeid(t).name();
344 string clasName = demangle(mangled);
345 long size = *(
long*)sqlfuncs(
"COUNT(*)",clasName);
349 template<
class T>
int getSumValue(
string col)
353 const char *mangled =
typeid(t).name();
354 string clasName = demangle(mangled);
355 int size = *(
int*)sqlfuncs(
"SUM("+col+
")",
"int");
360 template<
class T>
int getAvgValue(
string col)
364 const char *mangled =
typeid(t).name();
365 string clasName = demangle(mangled);
366 int size = *(
int*)sqlfuncs(
"AVG("+col+
")",
"int");
371 template<
class T> T getFirstValue(
string col)
375 const char *mangled =
typeid(t).name();
376 string clasName = demangle(mangled);
377 t = *(T*)sqlfuncs(
"first("+col+
")",clasName);
382 template<
class T> T getLastValue(
string col)
386 const char *mangled =
typeid(t).name();
387 string clasName = demangle(mangled);
388 t = *(T*)sqlfuncs(
"last("+col+
")",clasName);
393 template<
class T> T getMinValue(
string col)
397 const char *mangled =
typeid(t).name();
398 string clasName = demangle(mangled);
399 t = *(T*)sqlfuncs(
"min("+col+
")",clasName);
404 template<
class T> T getMaxValue(
string col)
408 const char *mangled =
typeid(t).name();
409 string clasName = demangle(mangled);
410 t = *(T*)sqlfuncs(
"max("+col+
")",clasName);