12 #include "KVSQLiteResult.h"
19 using namespace std::chrono_literals;
29 KVSQLiteResult::KVSQLiteResult(
void* result)
31 fResult = (sqlite3_stmt*) result;
44 KVSQLiteResult::~KVSQLiteResult()
57 void KVSQLiteResult::Close(
Option_t*)
62 sqlite3_finalize(fResult);
76 Error(
"IsValid",
"result set closed");
79 if (field < 0 || field >= GetFieldCount()) {
80 Error(
"IsValid",
"field index out of bounds");
93 Int_t KVSQLiteResult::GetFieldCount()
96 Error(
"GetFieldCount",
"result set closed");
99 return sqlite3_column_count(fResult);
109 const char* KVSQLiteResult::GetFieldName(
Int_t field)
112 Error(
"GetFieldName",
"result set closed");
115 return sqlite3_column_name(fResult, field);
126 Int_t KVSQLiteResult::GetRowCount()
const
139 TSQLRow* KVSQLiteResult::Next()
142 Error(
"Next",
"result set closed");
146 int ret = sqlite3_step(fResult);
147 if ((ret != SQLITE_DONE) && (ret != SQLITE_ROW)) {
148 if(ret == SQLITE_BUSY)
155 Info(
"Next",
"DB locked: retry same statement processing in 50ms...(%d)",i);
156 std::this_thread::sleep_for(50ms);
157 ret = sqlite3_step(fResult);
159 while((i<4) && ((ret != SQLITE_DONE) && (ret != SQLITE_ROW)));
160 if ((ret != SQLITE_DONE) && (ret != SQLITE_ROW))
162 Error(
"Next",
"SQL Error: %d %s", ret, sqlite3_errmsg(sqlite3_db_handle(fResult)));
166 Info(
"Next",
"...statement processing successful!");
167 if (ret == SQLITE_DONE) {
173 Error(
"Next",
"SQL Error: %d %s", ret, sqlite3_errmsg(sqlite3_db_handle(fResult)));
176 if (ret == SQLITE_DONE) {