30 using namespace HSEPData;
34 namespace HSEPDataSqLite {
45 "# ERR: SQLException in %s (%s) on line %d\n# ERR: %s (SqLite error code: #d, SQLState: #s)\n",
54 pMessageRef = string (vTemp);
70 sqlite3* aConnectionPtr;
72 RAII_mutex(sqlite3* pConnectionPtr) : aConnectionPtr(pConnectionPtr) {
73 sqlite3_mutex_enter(sqlite3_db_mutex(aConnectionPtr));
76 sqlite3_mutex_leave(sqlite3_db_mutex(aConnectionPtr));
86 virtual string toString() = 0;
97 return to_string(aValue);
125 return (aCurrent == 0);
129 return (aCurrent == (count()-1));
133 return (aData.size());
141 return aData.
ptr(aCurrent);
145 pMetadata(aMetadata);
154 if (aPositions.has(pNameRef)) {
155 int vPosition = aPositions.ref(pNameRef);
157 pResult = vRow->
ptr(vPosition)->toString();
164 if (aPositions.size() > pPosition) {
166 pResult = vRow->
ptr(pPosition)->toString();
186 bool vResult =
false;
229 if (pFunction(
this,vResultData->
isFirst(),vResultData->
isLast())) {
243 vResultData->
getString(pNameRef,vResult);
254 vResultData->
getString(pPosition,vResult);
263 aStatement =
nullptr;
268 sqlite3_finalize((sqlite3_stmt*)aStatement);
272 bool SqLiteStatement::createIt(
void* pConnectionPtr,
string& pQueryRef) {
274 bool vResult =
false;
275 int vSize = (int)pQueryRef.size()+1;
279 int vResCode = sqlite3_prepare_v2(
280 (sqlite3*)pConnectionPtr,
283 (sqlite3_stmt**)&aStatement,
286 if (SQLITE_OK != vResCode) {
288 aStatement =
nullptr;
295 catch (exception &vExc) {
298 aStatement =
nullptr;
311 int vColumns = sqlite3_column_count(pStatement);
313 for (
int vIdx=0;vIdx<vColumns;vIdx++) {
316 vMetadataField->
aColumnName = string(sqlite3_column_name(pStatement,vIdx));
317 int vSqliteType = sqlite3_column_type(pStatement,vIdx);
339 const unsigned char* vValueStr;
341 vValueStr = sqlite3_column_text(pStatement,vIdx);
356 pResultData->aData.push(vRow);
366 sqlite3_stmt* vStatement = (sqlite3_stmt*)aStatement;
367 bool vFirstLine =
true;
369 while (sqlite3_step(vStatement) == SQLITE_ROW) {
389 switch (vParameter.first) {
391 sqlite3_bind_text(pStatement,vIndex,vParameter.second.c_str(),(int)vParameter.second.size(),0);
395 vValue = stoi(vParameter.second);
396 sqlite3_bind_int(pStatement,vIndex,vValue);
409 sqlite3_stmt* vStatement = (sqlite3_stmt*)aStatement;
410 bool vFirstLine =
true;
414 while (sqlite3_step(vStatement) == SQLITE_ROW) {
421 sqlite3_reset(vStatement);
431 aConnection =
nullptr;
437 sqlite3_close((sqlite3*)aConnection);
438 }
catch (exception &vExc) {
450 int vFlags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX;
454 sqlite3_close((sqlite3*)aConnection);
457 vSQLResult = sqlite3_open_v2(pConnectionStringRef.c_str(), (sqlite3**)&aConnection,vFlags,
nullptr);
459 if (SQLITE_OK != vSQLResult) {
467 }
catch (exception& vExc) {
487 if (!vResult->createIt(aConnection,pQueryRef)) {
493 }
catch (exception &vExc) {
507 #define SQLITE_HEAP_SIZE 102400
565 pInfo = string(
"SqLite BW driver 1.0");