23 #include "Cibernate.h"
25 Cibernate::~Cibernate() {
27 logger <<
"\nDestructed Cibernate" << flush;
29 Cibernate::Cibernate(
string appName) {
30 logger = Logger::getLogger(
"Cibernate");
32 this->appName = appName;
33 if (this->appName !=
"" && CibernateConnPools::isInitialized()
34 && CibernateConnPools::getPool(this->appName) != NULL) {
37 this->pool = CibernateConnPools::getPool(this->appName);
38 this->mapping = CibernateConnPools::getMapping(this->appName);
39 if(this->mapping==NULL)
40 throw (
"No mapping found for appname " + appName);
41 if(this->pool!=NULL && this->mapping!=NULL)
43 logger << (
"Got pool for application " + appName) << endl;
47 throw "Error connecting to Database server";
50 Cibernate::Cibernate() {
52 this->appName =
"default";
53 if (this->appName !=
"" && CibernateConnPools::isInitialized()
54 && CibernateConnPools::getPool(this->appName) != NULL) {
57 this->pool = CibernateConnPools::getPool(this->appName);
58 this->mapping = CibernateConnPools::getMapping(this->appName);
59 if(this->mapping==NULL)
60 throw (
"No mapping found for appname " + appName);
61 if(this->pool!=NULL && this->mapping!=NULL)
63 logger << (
"Got pool for application " + appName) << endl;
67 throw "Error connecting to Database server";
70 string Cibernate::demangle(
const char *mangled)
72 int status;
char *demangled;
74 demangled = __cxa_demangle(mangled, NULL, 0, &status);
80 Cibernate::Cibernate(
string dbName,
string uname,
string pass,
int psize) {
81 CibernateConnPools::addPool(psize,uname,pass,dbName,
"default");
82 if(!CibernateConnPools::isInitialized())
83 throw "Error connecting to Database server";
84 this->pool = CibernateConnPools::getPool(
"default");
85 this->mapping = CibernateConnPools::getMapping(
"default");
86 if(this->mapping==NULL)
87 throw (
"No mapping found for appname " + appName);
90 if(this->pool!=NULL && this->mapping!=NULL)
92 logger << (
"Got pool for application default") << endl;
97 bool Cibernate::allocateStmt(
bool read) {
102 if (this->pool != NULL && this->conn != NULL && this->conn->type == read
103 && V_OD_hstmt != NULL) {
104 SQLCloseCursor(V_OD_hstmt);
109 if (this->pool != NULL)
110 conn = this->pool->getReadConnection();
111 V_OD_hdbc = conn->conn;
113 if (this->pool != NULL)
114 conn = this->pool->getWriteConnection();
115 V_OD_hdbc = conn->conn;
117 V_OD_erg = SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);
118 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) {
125 void Cibernate::procedureCall(
string procName) {
126 bool flagc = allocateStmt(
true);
127 if(!flagc)
throw "Error getting Database connection";
130 SQLSMALLINT V_OD_mlen;
132 SQLCHAR V_OD_msg[200], *query;
133 string quer =
"{call " + procName +
"(";
134 map<string, string>::iterator it;
135 map<string, string> revType;
136 bool outq =
false, inoutq =
false;
137 vector<string> outargs, inoutargs;
138 string outQuery =
"select ", inoutQuery;
140 int size = ntmap.size();
141 for (it = ntmap.begin(); it != ntmap.end(); ++it) {
142 if (it->second ==
"IN" || it->second ==
"in") {
144 }
else if (it->second ==
"OUT" || it->second ==
"out" || it->second
145 ==
"INOUT" || it->second ==
"inout") {
146 quer += (
"@" + it->first);
149 outargs.push_back(
"@" + it->first);
150 if (it->second ==
"INOUT" || it->second ==
"inout") {
152 inoutargs.push_back(
"@" + it->first);
155 if (outC++ != size) {
161 for (
unsigned int var = 0; var < outargs.size(); ++var) {
162 outQuery += (outargs.at(var));
163 if (var != outargs.size() - 1)
168 string temp =
"select ";
169 for (
unsigned int var = 0; var < inoutargs.size(); ++var) {
170 inoutQuery += (inoutargs.at(var));
172 if (var != inoutargs.size() - 1) {
177 inoutQuery = (temp +
" into " + inoutQuery);
181 for (it = ntmap.begin(); it != ntmap.end(); ++it) {
182 if (it->second ==
"INOUT" || it->second ==
"inout") {
183 if (params[it->first]->getTypeName() ==
"int") {
184 V_OD_erg = SQLBindParameter(V_OD_hstmt, par++,
185 SQL_PARAM_INPUT_OUTPUT, SQL_C_LONG, SQL_INTEGER, 0, 0,
186 params[it->first]->getVoidPointer(), 20, NULL);
187 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg
188 != SQL_SUCCESS_WITH_INFO)) {
189 logger <<
"Error in binding parameter " << V_OD_erg << endl;
190 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc, 1,
191 (SQLCHAR*) V_OD_stat, &V_OD_err, V_OD_msg, 100,
193 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
195 throw "Error in call to stored procedure";
202 logger << inoutQuery << flush;
204 = SQLExecDirect(V_OD_hstmt, (SQLCHAR*) inoutQuery.c_str(), SQL_NTS);
205 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) {
206 logger <<
"Error in call to stored procedure " << V_OD_erg << endl;
207 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc, 1, (SQLCHAR*) V_OD_stat,
208 &V_OD_err, V_OD_msg, 100, &V_OD_mlen);
209 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
211 throw "Error in call to stored procedure";
213 SQLCloseCursor(V_OD_hstmt);
216 logger << quer << flush;
217 query = (SQLCHAR*) quer.c_str();
227 for (it = ntmap.begin(); it != ntmap.end(); ++it) {
228 SQLLEN hotelInd;hotelInd = SQL_NTS;
229 if (it->second ==
"OUT" || it->second ==
"out" || it->second ==
"INOUT"
230 || it->second ==
"inout")
232 revType[
"@" + it->first] = params[it->first]->getTypeName();
234 if (it->second ==
"IN" || it->second ==
"in") {
235 logger <<
"binding in parameter " << params[it->first]->getVoidPointer() << endl;
236 if (params[it->first]->getTypeName() ==
"int") {
237 V_OD_erg = SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT,
238 SQL_C_LONG, SQL_INTEGER, 0, 0,
239 params[it->first]->getVoidPointer(), 20, NULL);
240 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg
241 != SQL_SUCCESS_WITH_INFO)) {
242 logger <<
"Error in binding parameter " << V_OD_erg << endl;
243 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc, 1,
244 (SQLCHAR*) V_OD_stat, &V_OD_err, V_OD_msg, 100,
246 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
248 throw "Error Binding parameter";
251 else if (params[it->first]->getTypeName() ==
"short") {
252 short* parmv = (
short*)params[it->first]->getVoidPointer();
253 V_OD_erg = SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT,
254 SQL_C_SHORT, SQL_SMALLINT, 0, 0,
256 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg
257 != SQL_SUCCESS_WITH_INFO)) {
258 logger <<
"Error in binding parameter " << V_OD_erg << endl;
259 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc, 1,
260 (SQLCHAR*) V_OD_stat, &V_OD_err, V_OD_msg, 100,
262 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
264 throw "Error Binding parameter";
267 else if (params[it->first]->getTypeName() ==
"std::string") {
268 string *parm = (
string*)params[it->first]->getVoidPointer();
270 V_OD_erg= SQLBindParameter(V_OD_hstmt, par , SQL_PARAM_INPUT,
271 SQL_C_CHAR,SQL_VARCHAR, 0, 0, (SQLPOINTER)parm->c_str() ,parm->length(), &hotelInd);
272 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg
273 != SQL_SUCCESS_WITH_INFO)) {
274 logger <<
"Error in binding parameter " << V_OD_erg << endl;
275 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc, 1,
276 (SQLCHAR*) V_OD_stat, &V_OD_err, V_OD_msg, 100,
278 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
280 throw "Error Binding parameter";
286 V_OD_erg = SQLExecDirect(V_OD_hstmt, query, SQL_NTS);
287 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) {
288 logger <<
"Error in call to stored procedure " << V_OD_erg << endl;
289 SQLGetDiagRec(SQL_HANDLE_STMT, V_OD_hdbc, 1, (SQLCHAR*) V_OD_stat,
290 &V_OD_err, V_OD_msg, 100, &V_OD_mlen);
291 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
293 throw "Error in call to stored procedure";
309 logger << outQuery << flush;
311 V_OD_erg = SQLExecDirect(V_OD_hstmt, (SQLCHAR*) outQuery.c_str(), SQL_NTS);
312 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) {
313 logger <<
"Error in Select " << V_OD_erg << endl;
314 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc, 1, (SQLCHAR*) V_OD_stat,
315 &V_OD_err, V_OD_msg, 100, &V_OD_mlen);
316 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
318 throw "Error in call to stored procedure";
331 V_OD_erg = SQLFetch(V_OD_hstmt);
332 while (V_OD_erg != SQL_NO_DATA) {
333 for (
unsigned int var = 0; var < outargs.size(); ++var) {
334 if (revType[outargs.at(var)] ==
"int") {
336 StringUtil::replaceFirst(outargs.at(var),
"@",
"");
337 SQLGetData(V_OD_hstmt, var + 1, SQL_C_LONG, params[outargs.at(
338 var)]->getVoidPointer(),
339 sizeof(params[outargs.at(var)]->getVoidPointer()), &siz);
340 logger << *(
int*) params[outargs.at(var)]->getVoidPointer() << endl;
342 else if (revType[outargs.at(var)] ==
"short") {
343 StringUtil::replaceFirst(outargs.at(var),
"@",
"");
344 SQLGetData(V_OD_hstmt, var + 1, SQL_C_SHORT, params[outargs.at(
345 var)]->getVoidPointer(),
346 sizeof(params[outargs.at(var)]->getVoidPointer()), &siz);
347 logger << *(
short*) params[outargs.at(var)]->getVoidPointer() << endl;
350 V_OD_erg = SQLFetch(V_OD_hstmt);
352 SQLCloseCursor(V_OD_hstmt);
358 void Cibernate::close() {
359 this->pool->closeConnection(conn);
361 this->mapping = NULL;
363 SQLFreeHandle(SQL_HANDLE_STMT, V_OD_hstmt);
368 void Cibernate::empty(
string clasName) {
369 bool flagc = allocateStmt(
true);
374 string tableName = this->mapping->getAppTableClassMapping(clasName);
375 SQLSMALLINT V_OD_mlen;
377 SQLCHAR V_OD_msg[200];
378 string query =
"tuncate table "+tableName;
379 logger << query << flush;
380 V_OD_erg = SQLExecDirect(V_OD_hstmt, (SQLCHAR*) query.c_str(), SQL_NTS);
381 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
383 logger <<
"Error in Truncate " << V_OD_erg << endl;
384 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
385 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
388 SQLCloseCursor(V_OD_hstmt);
394 void* Cibernate::getElements(
string clasName)
397 return getElements(cols,clasName);
400 void* Cibernate::getElements(vector<string> cols,
string clasName)
404 ClassInfo clas = reflector.getClassInfo(clasName);
405 string tableName = this->mapping->getAppTableClassMapping(clasName);
406 vector<DBRel> relv = this->mapping->getAppTablerelMapping(clasName);
407 fldMap fields = clas.getFields();
409 void *vecT = reflector.getNewVector(clasName);
410 SQLCHAR colName[256];
411 SQLSMALLINT V_OD_colanz, colNameLen, dataType, numDecimalDigits, allowsNullValues;
412 SQLUINTEGER columnSize;
415 V_OD_erg=SQLFetch(V_OD_hstmt);
416 while(V_OD_erg != SQL_NO_DATA)
418 unsigned int var = 0;
420 map<string, void*> instances;
422 void *t = reflector.newInstanceGVP(ctor);
425 V_OD_erg = SQLNumResultCols(V_OD_hstmt,&V_OD_colanz);
426 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
431 for(
int i=1;i<=V_OD_colanz;i++)
433 V_OD_erg = SQLDescribeCol(V_OD_hstmt, i, colName, 255, &colNameLen, &dataType, &columnSize, &numDecimalDigits, &allowsNullValues);
434 string columnName((
char*)colName);
436 string thisTableName = tableName;
438 if(columnName.find(
".")!=string::npos)
440 thisTableName = columnName.substr(0, columnName.find(
"."));
441 columnName = columnName.substr(columnName.find(
".")+1);
444 StringUtil::toLower(columnName);
446 void* instance = NULL;
448 DBRel instanceRelation;
450 string fieldName = this->mapping->getTableAppColMapping(thisTableName, columnName);
452 if(thisTableName==tableName && fieldName!=
"")
459 for (
int var1 = 0; var1 < (int)relv.size(); ++var1)
461 DBRel relation = relv.at(var1);
464 string tableName1 = this->mapping->getAppTableClassMapping(relation.clsName);
465 fieldName = this->mapping->getTableAppColMapping(tableName1, columnName);
466 if(fieldName!=
"" || tableName1==thisTableName)
468 thisTableName = tableName1;
470 ClassInfo clas1 = reflector.getClassInfo(relation.clsName);
471 if(instances.find(thisTableName)==instances.end())
474 void *tt = reflector.newInstanceGVP(ctor);
475 instances[tableName1] = tt;
477 instanceClas = clas1;
478 instance = instances[thisTableName];
479 instanceRelation = relation;
486 var = storeProperty(instanceClas, instance, var, fieldName);
487 if(thisTableName!=tableName)
491 valus.push_back(instance);
492 argus.push_back(instanceRelation.clsName);
493 string methname =
"set"+AfcUtil::camelCased(instanceRelation.field);
494 Method meth = clas.getMethod(methname,argus);
495 reflector.invokeMethodGVP(t,meth,valus);
498 reflector.vectorPushBack(vecT,t,clasName);
500 V_OD_erg=SQLFetch(V_OD_hstmt);
502 SQLCloseCursor(V_OD_hstmt);
503 int vecsiz = reflector.getVectorSize(vecT,clasName);
504 for (
int var = 0; var < vecsiz; ++var)
506 for (
int var1 = 0; var1 < (int)relv.size(); ++var1)
508 DBRel relation = relv.at(var1);
513 string methname =
"get"+AfcUtil::camelCased(relation.pk);
514 Method meth = clas.getMethod(methname,argus);
516 void *tt = reflector.getVectorElement(vecT,var,clasName);
517 void *ns = reflector.invokeMethodGVP(tt,meth,valus);
520 on.setTypeName(meth.getReturnType());
521 addParam(relation.fk,on);
524 valus.push_back(col);
525 argus.push_back(
"vector<"+relation.clsName+
">");
526 methname =
"set"+AfcUtil::camelCased(relation.field);
527 meth = clas.getMethod(methname,argus);
528 reflector.invokeMethodGVP(tt,meth,valus);
537 void* Cibernate::getElements()
540 SQLCHAR colName[256];
541 SQLSMALLINT V_OD_colanz, colNameLen, dataType, numDecimalDigits, allowsNullValues;
542 SQLUINTEGER columnSize;
544 vector<map<string, void*> >* vecT =
new vector<map<string, void*> >;
546 V_OD_erg=SQLFetch(V_OD_hstmt);
547 while(V_OD_erg != SQL_NO_DATA)
549 unsigned int var = 0;
551 V_OD_erg = SQLNumResultCols(V_OD_hstmt,&V_OD_colanz);
552 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
559 map<string, void*> colValMap;
561 for(
int i=1;i<=V_OD_colanz;i++)
563 V_OD_erg = SQLDescribeCol(V_OD_hstmt, i, colName, 255, &colNameLen, &dataType, &columnSize, &numDecimalDigits, &allowsNullValues);
564 string columnName((
char*)colName, colNameLen);
574 StringUtil::toLower(columnName);
576 var = getProperty(dataType, columnSize, colValMap, columnName, var);
578 V_OD_erg=SQLFetch(V_OD_hstmt);
579 vecT->push_back(colValMap);
581 SQLCloseCursor(V_OD_hstmt);
586 int Cibernate::storeProperty(
ClassInfo clas,
void* t,
int var,
string fieldName)
591 Field fe = clas.getField(fieldName);
592 string te = fe.getType();
596 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_LONG, col,
sizeof(col), &indicator);
598 else if(te==
"unsigned int")
600 col =
new unsigned int;
601 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_ULONG,col,
sizeof(col), &indicator);
606 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_LONG,col,
sizeof(col), &indicator);
608 else if(te==
"unsigned long")
610 col =
new unsigned long;
611 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_ULONG,col,
sizeof(col), &indicator);
613 else if(te==
"long long")
616 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_SBIGINT, col,
sizeof(col), &indicator);
618 else if(te==
"unsigned long long")
620 col =
new unsigned long long;
621 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_UBIGINT, col,
sizeof(col), &indicator);
626 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_SHORT,col,
sizeof(col), &indicator);
628 else if(te==
"unsigned short")
630 col =
new unsigned short;
631 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_USHORT,col,
sizeof(col), &indicator);
633 else if(te==
"double")
636 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_DOUBLE, col,
sizeof(col), &indicator);
641 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_FLOAT, col,
sizeof(col), &indicator);
646 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_BIT, col,
sizeof(col), &indicator);
648 else if(te==
"string")
653 string *temp =
new string;
654 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf,
sizeof(buf), &indicator);
657 if(indicator > (
long)24)
659 int len = indicator-24;
661 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf1,
sizeof(buf1), &indicator);
677 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf,
sizeof(buf), &indicator);
680 if(indicator > (
long)24)
682 int len = indicator-24;
684 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf1,
sizeof(buf1), &indicator);
690 datf.setFormatspec(
"yyyy-mm-dd hh:mi:ss");
691 Date *date = datf.parse(temp);
695 else if(te==
"BinaryData")
699 unsigned char buf[24];
701 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_BINARY, buf,
sizeof(buf), &indicator);
705 if(indicator > (
long)24)
707 int len = indicator-24;
708 unsigned char buf1[len];
709 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_BINARY, buf1,
sizeof(buf1), &indicator);
710 temp->append(buf,24);
711 temp->append(buf1,len);
714 temp->append(buf,indicator);
729 valus.push_back(col);
730 string methname =
"set"+AfcUtil::camelCased(fe.getFieldName());
731 Method meth = clas.getMethod(methname,argus);
732 reflector.invokeMethod<
void*>(t,meth,valus);
739 int Cibernate::getProperty(
int dataType,
int columnSize, map<string, void*>& colValMap,
string colName,
int var)
748 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_BIT, col,
sizeof(col), &indicator);
749 colValMap[colName] = col;
754 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_FLOAT, col,
sizeof(col), &indicator);
755 colValMap[colName] = col;
761 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_DOUBLE, col,
sizeof(col), &indicator);
762 colValMap[colName] = col;
769 string *temp =
new string;
770 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf,
sizeof(buf), &indicator);
772 if(indicator > (
long)24)
774 int len = indicator-24;
776 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf1,
sizeof(buf1), &indicator);
780 colValMap[colName] = col;
785 unsigned char buf[24];
787 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_BINARY, buf,
sizeof(buf), &indicator);
788 if(indicator > (
long)24)
790 int len = indicator-24;
791 unsigned char buf1[len];
792 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_BINARY, buf1,
sizeof(buf1), &indicator);
793 temp->append(buf,24);
794 temp->append(buf1,len);
797 temp->append(buf,indicator);
799 colValMap[colName] = col;
807 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_LONG, col,
sizeof(col), &indicator);
808 colValMap[colName] = col;
813 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_LONG, col,
sizeof(col), &indicator);
814 colValMap[colName] = col;
822 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf,
sizeof(buf), &indicator);
824 if(indicator > (
long)24)
826 int len = indicator-24;
828 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf1,
sizeof(buf1), &indicator);
831 long long *number =
new long long(CastUtil::lexical_cast<long long>(temp));
832 colValMap[colName] = number;
841 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf,
sizeof(buf), &indicator);
843 if(indicator > (
long)24)
845 int len = indicator-24;
847 ret = SQLGetData(V_OD_hstmt, var+1, SQL_C_CHAR, buf1,
sizeof(buf1), &indicator);
851 if(dataType==SQL_DATE)
852 fmstr =
"yyyy-mm-dd";
853 else if(dataType==SQL_TIME)
854 fmstr =
"hh:mm:ss.nnnnnn";
855 else if(dataType==SQL_TIMESTAMP)
856 fmstr =
"yyyy-mm-dd hh:mm:ss.nnnnnn";
858 Date *date = datf.parse(temp);
860 colValMap[colName] = col;
868 void* Cibernate::sqlfuncs(
string type,
string clasName)
870 string tableName = this->mapping->getAppTableClassMapping(clasName);
871 string query =
"select "+type+
" from "+tableName;
873 vector<map<string, void*> > vec = execute(cquery);
874 if(vec.size()>0 && vec.at(0).size()>0)
876 return vec.at(0).begin()->second;
881 bool Cibernate::startTransaction()
883 bool flagc = allocateStmt(
true);
884 if(!flagc)
return false;
888 SQLSMALLINT V_OD_mlen;
890 SQLCHAR V_OD_msg[200];
892 string query =
"start transaction";
893 logger << query << flush;
894 V_OD_erg = SQLExecDirect(V_OD_hstmt, (SQLCHAR*) query.c_str(), SQL_NTS);
895 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
897 logger <<
"Error in Start transaction " << V_OD_erg << endl;
898 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
899 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
901 SQLCloseCursor(V_OD_hstmt);
904 SQLCloseCursor(V_OD_hstmt);
909 bool Cibernate::commit()
911 bool flagc = allocateStmt(
true);
912 if(!flagc)
return false;
916 SQLSMALLINT V_OD_mlen;
918 SQLCHAR V_OD_msg[200];
920 string query =
"commit";
921 logger << query << flush;
922 V_OD_erg = SQLExecDirect(V_OD_hstmt, (SQLCHAR*) query.c_str(), SQL_NTS);
923 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
925 logger <<
"Error in commit " << V_OD_erg << endl;
926 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
927 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
929 SQLCloseCursor(V_OD_hstmt);
932 SQLCloseCursor(V_OD_hstmt);
937 bool Cibernate::rollback()
939 bool flagc = allocateStmt(
true);
940 if(!flagc)
return false;
944 SQLSMALLINT V_OD_mlen;
946 SQLCHAR V_OD_msg[200];
948 string query =
"rollback";
949 logger << query << flush;
950 V_OD_erg = SQLExecDirect(V_OD_hstmt, (SQLCHAR*) query.c_str(), SQL_NTS);
951 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
953 logger <<
"Error in rollback " << V_OD_erg << endl;
954 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
955 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
957 SQLCloseCursor(V_OD_hstmt);
960 SQLCloseCursor(V_OD_hstmt);
966 void* Cibernate::executeQuery(
CibernateQuery cquery, vector<string> cols)
969 string clasName = cquery.className;
970 string tableName = this->mapping->getAppTableClassMapping(clasName);
971 ClassInfo clas = reflector.getClassInfo(clasName);
972 vector<DBRel> relv = this->mapping->getAppTablerelMapping(clasName);
973 string query =
"select ";
976 for (
unsigned int var = 0; var < cols.size(); var++)
978 string propertyName = cols.at(var);
979 string columnName = propertyName;
980 if(this->mapping->getAppTableColMapping(clasName,propertyName)!=
"")
981 columnName = this->mapping->getAppTableColMapping(clasName,propertyName);
982 query += (clasName +
"_Alias." + columnName);
983 if(var!=cols.size()-1)
989 strMap tabcolmap = this->mapping->getAppTableColMapping(clasName);
991 int fldsiz = (int)tabcolmap.size();
993 for(it=tabcolmap.begin();it!=tabcolmap.end();it++)
995 string columnName = it->first;
996 query += (clasName +
"_Alias." + columnName);
1001 string reltabs =
" from ";
1002 for (
int var1 = 0; var1 < (int)relv.size(); var1++)
1004 DBRel relation = relv.at(var1);
1005 if(relation.type==1)
1007 string tableName1 = this->mapping->getAppTableClassMapping(relation.clsName);
1011 strMap tabcolmap = this->mapping->getAppTableColMapping(relation.clsName);
1012 strMap::iterator it;
1013 int fldsiz = (int)tabcolmap.size();
1015 for(it=tabcolmap.begin();it!=tabcolmap.end();it++)
1017 string columnName = it->first;
1018 query += (relation.clsName +
"_Alias." + columnName);
1022 reltabs += tableName1 +
" " + relation.clsName +
"_Alias,";
1026 query += (reltabs + tableName +
" " + clasName +
"_Alias");
1028 cquery.query = query;
1029 return executeQuery(cquery);
1033 bool Cibernate::executeInsert(
CibernateQuery cquery, vector<string> cols,
void* t)
1035 string clasName = cquery.className;
1036 string tableName = this->mapping->getAppTableClassMapping(clasName);
1037 vector<DBRel> relv = this->mapping->getAppTablerelMapping(clasName);
1038 string query =
"insert into "+tableName+
"(";
1042 ClassInfo clas = reflector.getClassInfo(clasName);
1043 fldMap fields = clas.getFields();
1047 for (
unsigned int var = 0; var < cols.size(); var++)
1049 string propertyName = cols.at(var);
1050 string columnName = propertyName;
1051 if(this->mapping->getAppTableColMapping(clasName,propertyName)!=
"")
1052 columnName = this->mapping->getAppTableColMapping(clasName,propertyName);
1054 vector<void *> valus;
1055 Field fld = fields[cols.at(var)];
1056 string methname =
"get"+AfcUtil::camelCased(cols.at(var));
1057 Method meth = clas.getMethod(methname,argus);
1058 if(fld.getType()==
"short")
1060 short temp = reflector.invokeMethod<
short>(t,meth,valus);
1063 cquery.propPosVaues[var+1] = o;
1065 else if(fld.getType()==
"unsigned short")
1067 unsigned short temp = reflector.invokeMethod<
unsigned short>(t,meth,valus);
1070 cquery.propPosVaues[var+1] = o;
1072 else if(fld.getType()==
"int")
1074 int temp = reflector.invokeMethod<
int>(t,meth,valus);
1077 cquery.propPosVaues[var+1] = o;
1079 else if(fld.getType()==
"unsigned int")
1081 unsigned int temp = reflector.invokeMethod<
unsigned int>(t,meth,valus);
1084 cquery.propPosVaues[var+1] = o;
1086 else if(fld.getType()==
"long")
1088 long temp = reflector.invokeMethod<
long>(t,meth,valus);
1091 cquery.propPosVaues[var+1] = o;
1093 else if(fld.getType()==
"unsigned long")
1095 unsigned long temp = reflector.invokeMethod<
unsigned long>(t,meth,valus);
1098 cquery.propPosVaues[var+1] = o;
1100 else if(fld.getType()==
"double")
1102 double temp = reflector.invokeMethod<
double>(t,meth,valus);
1105 cquery.propPosVaues[var+1] = o;
1107 else if(fld.getType()==
"float")
1109 float temp = reflector.invokeMethod<
float>(t,meth,valus);
1112 cquery.propPosVaues[var+1] = o;
1114 else if(fld.getType()==
"string")
1116 string temp = reflector.invokeMethod<
string>(t,meth,valus);
1119 cquery.propPosVaues[var+1] = o;
1122 query += (columnName);
1124 if(var!=cols.size()-1)
1133 fldMap::iterator it;
1134 for(it=fields.begin();it!=fields.end();++it)
1137 vector<void *> valus;
1138 Field fld = it->second;
1139 string methname =
"get"+AfcUtil::camelCased(it->first);
1140 Method meth = clas.getMethod(methname,argus);
1141 if(fld.getType()==
"short")
1143 short temp = reflector.invokeMethod<
short>(t,meth,valus);
1146 cquery.propPosVaues[var+1] = o;
1148 else if(fld.getType()==
"unsigned short")
1150 unsigned short temp = reflector.invokeMethod<
unsigned short>(t,meth,valus);
1153 cquery.propPosVaues[var+1] = o;
1155 else if(fld.getType()==
"int")
1157 int temp = reflector.invokeMethod<
int>(t,meth,valus);
1160 cquery.propPosVaues[var+1] = o;
1162 else if(fld.getType()==
"unsigned int")
1164 unsigned int temp = reflector.invokeMethod<
unsigned int>(t,meth,valus);
1167 cquery.propPosVaues[var+1] = o;
1169 else if(fld.getType()==
"long")
1171 long temp = reflector.invokeMethod<
long>(t,meth,valus);
1174 cquery.propPosVaues[var+1] = o;
1176 else if(fld.getType()==
"unsigned long")
1178 unsigned long temp = reflector.invokeMethod<
unsigned long>(t,meth,valus);
1181 cquery.propPosVaues[var+1] = o;
1183 else if(fld.getType()==
"double")
1185 double temp = reflector.invokeMethod<
double>(t,meth,valus);
1188 cquery.propPosVaues[var+1] = o;
1190 else if(fld.getType()==
"float")
1192 float temp = reflector.invokeMethod<
float>(t,meth,valus);
1195 cquery.propPosVaues[var+1] = o;
1197 else if(fld.getType()==
"string")
1199 string temp = reflector.invokeMethod<
string>(t,meth,valus);
1202 cquery.propPosVaues[var+1] = o;
1204 query += (it->first);
1206 if(var++!=fields.size()-1)
1213 query += (
") values("+vals+
")");
1214 cquery.query = query;
1217 bool* flag = (
bool*)executeQuery(cquery);
1224 bool Cibernate::executeUpdate(
CibernateQuery cquery, vector<string> cols,
void* t)
1226 string clasName = cquery.className;
1227 string tableName = this->mapping->getAppTableClassMapping(clasName);
1228 vector<DBRel> relv = this->mapping->getAppTablerelMapping(clasName);
1229 string query =
"update "+tableName+
" set ";
1232 ClassInfo clas = reflector.getClassInfo(clasName);
1233 fldMap fields = clas.getFields();
1234 unsigned par = 1,var=0;
1237 for (
unsigned int var = 0; var < cols.size(); var++)
1239 string propertyName = cols.at(var);
1240 string columnName = propertyName;
1241 if(this->mapping->getAppTableColMapping(clasName,propertyName)!=
"")
1242 columnName = this->mapping->getAppTableColMapping(clasName,propertyName);
1244 vector<void *> valus;
1245 Field fld = fields[cols.at(var)];
1246 string methname =
"get"+AfcUtil::camelCased(cols.at(var));
1247 Method meth = clas.getMethod(methname,argus);
1248 if(fld.getType()==
"short")
1250 short temp = reflector.invokeMethod<
short>(t,meth,valus);
1253 cquery.propPosVaues[var+1] = o;
1255 else if(fld.getType()==
"unsigned short")
1257 unsigned short temp = reflector.invokeMethod<
unsigned short>(t,meth,valus);
1260 cquery.propPosVaues[var+1] = o;
1262 else if(fld.getType()==
"int")
1264 int temp = reflector.invokeMethod<
int>(t,meth,valus);
1267 cquery.propPosVaues[var+1] = o;
1269 else if(fld.getType()==
"unsigned int")
1271 unsigned int temp = reflector.invokeMethod<
unsigned int>(t,meth,valus);
1274 cquery.propPosVaues[var+1] = o;
1276 else if(fld.getType()==
"long")
1278 long temp = reflector.invokeMethod<
long>(t,meth,valus);
1281 cquery.propPosVaues[var+1] = o;
1283 else if(fld.getType()==
"unsigned long")
1285 unsigned long temp = reflector.invokeMethod<
unsigned long>(t,meth,valus);
1288 cquery.propPosVaues[var+1] = o;
1290 else if(fld.getType()==
"double")
1292 double temp = reflector.invokeMethod<
double>(t,meth,valus);
1295 cquery.propPosVaues[var+1] = o;
1297 else if(fld.getType()==
"float")
1299 float temp = reflector.invokeMethod<
float>(t,meth,valus);
1302 cquery.propPosVaues[var+1] = o;
1304 else if(fld.getType()==
"string")
1306 string temp = reflector.invokeMethod<
string>(t,meth,valus);
1309 cquery.propPosVaues[var+1] = o;
1312 query += (columnName+
" = ?");
1313 if(var!=cols.size()-1)
1321 fldMap::iterator it;
1322 for(it=fields.begin();it!=fields.end();++it)
1325 vector<void *> valus;
1326 Field fld = it->second;
1327 string methname =
"get"+AfcUtil::camelCased(it->first);
1328 Method meth = clas.getMethod(methname,argus);
1329 if(fld.getType()==
"short")
1331 short temp = reflector.invokeMethod<
short>(t,meth,valus);
1334 cquery.propPosVaues[var+1] = o;
1336 else if(fld.getType()==
"unsigned short")
1338 unsigned short temp = reflector.invokeMethod<
unsigned short>(t,meth,valus);
1341 cquery.propPosVaues[var+1] = o;
1343 else if(fld.getType()==
"int")
1345 int temp = reflector.invokeMethod<
int>(t,meth,valus);
1348 cquery.propPosVaues[var+1] = o;
1350 else if(fld.getType()==
"unsigned int")
1352 unsigned int temp = reflector.invokeMethod<
unsigned int>(t,meth,valus);
1355 cquery.propPosVaues[var+1] = o;
1357 else if(fld.getType()==
"long")
1359 long temp = reflector.invokeMethod<
long>(t,meth,valus);
1362 cquery.propPosVaues[var+1] = o;
1364 else if(fld.getType()==
"unsigned long")
1366 unsigned long temp = reflector.invokeMethod<
unsigned long>(t,meth,valus);
1369 cquery.propPosVaues[var+1] = o;
1371 else if(fld.getType()==
"double")
1373 double temp = reflector.invokeMethod<
double>(t,meth,valus);
1376 cquery.propPosVaues[var+1] = o;
1378 else if(fld.getType()==
"float")
1380 float temp = reflector.invokeMethod<
float>(t,meth,valus);
1383 cquery.propPosVaues[var+1] = o;
1385 else if(fld.getType()==
"string")
1387 string temp = reflector.invokeMethod<
string>(t,meth,valus);
1390 cquery.propPosVaues[var+1] = o;
1393 query += (it->first+
" = ?");
1394 if(var++!=fields.size()-1)
1400 cquery.query = query;
1403 bool* flag = (
bool*)executeQuery(cquery);
1412 bool flagc = allocateStmt(
true);
1415 if(query.isUpdate())
1417 bool* flag =
new bool(
false);
1426 SQLSMALLINT V_OD_mlen,V_OD_colanz;
1427 SQLINTEGER V_OD_err;
1429 SQLCHAR V_OD_msg[200];
1431 if(query.propPosVaues.size()>0 && query.propNameVaues.size()>0)
1433 throw "Cannot mix positional and named parameters";
1436 SQLFreeStmt(V_OD_hstmt, SQL_RESET_PARAMS);
1437 bindQueryParams(query);
1438 if(query.isUpdate())
1440 bool* flag =
new bool(
true);
1441 V_OD_erg = SQLPrepare(V_OD_hstmt,(SQLCHAR*)query.query.c_str(),SQL_NTS);
1442 if((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1445 logger <<
"Error in prepare statement " << V_OD_erg << endl;
1446 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1447 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1451 V_OD_erg=SQLExecute(V_OD_hstmt);
1452 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1455 logger <<
"Error in Insert " << V_OD_erg << endl;
1456 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1457 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1460 SQLCloseCursor(V_OD_hstmt);
1465 V_OD_erg = SQLPrepare(V_OD_hstmt,(SQLCHAR*)query.query.c_str(),SQL_NTS);
1466 if((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1468 logger <<
"Error in prepare statement " << V_OD_erg << endl;
1469 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1470 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1474 V_OD_erg=SQLExecute(V_OD_hstmt);
1475 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1477 logger <<
"Error in Select " << V_OD_erg << endl;
1478 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1479 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1483 V_OD_erg=SQLRowCount(V_OD_hstmt,&V_OD_rowanz);
1484 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1486 logger <<
"Number of RowCount " << V_OD_erg << endl;
1490 logger <<
"Number of Rows " << (int)V_OD_rowanz << endl;
1491 if(query.className!=
"")
1492 return getElements(query.className);
1494 return getElements();
1502 SQLSMALLINT V_OD_mlen;
1503 SQLINTEGER V_OD_err;
1504 SQLCHAR V_OD_msg[200];
1507 Parameters qparams = query.propNameVaues;
1508 Parameters columnBindings = query.columnBindings;
1509 PosParameters propPosVaues;
1510 Parameters::iterator ite;
1511 string queryString = query.query;
1513 if(qparams.size()>0)
1515 PosParameters propPosVaues;
1516 vector<string> tst = RegexUtil::search(queryString,
":");
1517 int counter = tst.size();
1518 while(counter-->0 && queryString.find(
":")!=string::npos)
1520 for(ite=qparams.begin();ite!=qparams.end();++ite)
1522 if(queryString.find(
":")!=string::npos && queryString.find(
":"+ite->first)!=queryString.find(
":"))
1524 propPosVaues[posst++] = ite->second;
1525 queryString = queryString.substr(0, queryString.find(
":")) +
"?" +
1526 queryString.substr(queryString.find(
":"+ite->first)+ite->first.length()+1);
1530 query.query = queryString;
1534 propPosVaues = query.propPosVaues;
1537 if(StringUtil::toLowerCopy(query.query).find(
" where ")==string::npos && columnBindings.size()>0)
1539 query.query +=
" where ";
1541 for(ite=columnBindings.begin();ite!=columnBindings.end();++ite)
1543 propPosVaues[position] = ite->second;
1544 query.query += (ite->first +
" = ? ");
1545 if(position++!=columnBindings.size())
1547 query.query +=
" AND ";
1552 if(query.orderByDescCols.size()>0 || query.orderByAscCols.size()>0)
1554 map<string, bool>::iterator iter;
1556 for(iter=query.orderByDescCols.begin();iter!=query.orderByDescCols.end();++iter)
1558 query.query += (iter->first +
" DESC ");
1559 if(position++!=query.orderByDescCols.size())
1564 if(query.orderByDescCols.size()>0 && query.orderByAscCols.size()>0)
1568 for(iter=query.orderByAscCols.begin();iter!=query.orderByAscCols.end();++iter)
1570 query.query += (iter->first +
" ASC ");
1571 if(position++!=query.orderByAscCols.size())
1578 logger << query.query << endl;
1580 int totalParams = propPosVaues.size();
1581 while(totalParams-->0)
1583 if(propPosVaues.find(par)==propPosVaues.end())
1584 throw (
"No parameter value found for position " + CastUtil::lexical_cast<string>(par));
1585 Object paramValue = propPosVaues[par];
1586 if(paramValue.getTypeName()==
"short")
1588 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, paramValue.getVoidPointer() , 20, NULL);
1589 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1591 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1592 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1593 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1597 else if(paramValue.getTypeName()==
"unsigned short")
1599 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_USHORT, SQL_SMALLINT, 0, 0, paramValue.getVoidPointer() , 20, NULL);
1600 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1602 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1603 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1604 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1608 else if(paramValue.getTypeName()==
"int" || paramValue.getTypeName()==
"long")
1610 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, paramValue.getVoidPointer() , 20, NULL);
1611 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1613 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1614 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1615 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1619 else if(paramValue.getTypeName()==
"unsigned int" || paramValue.getTypeName()==
"unsigned long")
1621 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, paramValue.getVoidPointer() , 20, NULL);
1622 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1624 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1625 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1626 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1630 else if(paramValue.getTypeName()==
"double")
1632 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, paramValue.getVoidPointer() , 20, NULL);
1633 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1635 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1636 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1637 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1641 else if(paramValue.getTypeName()==
"float")
1643 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 0, 0, paramValue.getVoidPointer() , 20, NULL);
1644 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1646 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1647 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1648 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1652 else if(paramValue.getTypeName()==
"std::string")
1654 string parm = *(
string*)(paramValue.getVoidPointer());
1655 V_OD_erg= SQLBindParameter(V_OD_hstmt, par, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 0, 0, &parm[0] ,parm.length(), NULL);
1656 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
1658 logger <<
"Error in binding parameter " << V_OD_erg << endl;
1659 SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
1660 logger << V_OD_msg <<
" (" << (int) V_OD_err <<
")" << endl;
1665 throw "Cannot bind value";
1670 vector<map<string, void*> > Cibernate::execute(
CibernateQuery query)
1672 vector<map<string, void*> > tv;
1673 void* temp = executeQuery(query);
1676 tv = *(vector<map<string, void*> >*)temp;