Program Listing for File dbState.cpp
↰ Return to documentation for file (include/db/dbState.cpp
)
#include "dbState.hpp"
#include <cstring>
stmt::stmt()
{
}
stmt::~stmt()
{
if(S != nullptr){
sqlite3_finalize(S);
}
}
int
stmt::bind_null(int idx)
{
return sqlite3_bind_null(S, idx);
}
int
stmt::bind_text(int idx, std::string& str)
{
return sqlite3_bind_text(S, idx, str.c_str(), str.size(), SQLITE_STATIC);
}
int
stmt::bind_blob(int idx, BIN& bin)
{
return sqlite3_bind_blob(S, idx, bin.data(), bin.size(), SQLITE_STATIC);
}
int
stmt::bind_double(int idx, double num)
{
return sqlite3_bind_double(S, idx, num);
}
int
stmt::bind_int(int idx, double num)
{
return sqlite3_bind_int(S, idx, num);
}
bool
stmt::activate(sqlite3* db)
{
return (sqlite3_prepare_v2(db, placeHold.c_str(), -1, &S, nullptr) == SQLITE_OK);
}
template<>
int
stmt::colGet<COL_TYPE::INT>(int idx)
{
return sqlite3_column_int(S, idx);
}
template<>
double
stmt::colGet<COL_TYPE::DOUBLE>(int idx)
{
return sqlite3_column_double(S, idx);
}
template<>
std::string
stmt::colGet<COL_TYPE::TEXT>(int idx)
{
auto ptr = sqlite3_column_text(S, idx);
auto sz = sqlite3_column_bytes(S, idx);
std::string tempstr;
if(sz != 0){
tempstr.resize(sz);
memcpy(tempstr.data(), ptr, sz);
}
return tempstr;
}
template<>
BIN
stmt::colGet<COL_TYPE::BLOB>(int idx)
{
auto ptr = sqlite3_column_blob(S, idx);
auto sz = sqlite3_column_bytes(S, idx);
if(sz != 0){
return BIN(static_cast<const u_int8_t*>(ptr), static_cast<const u_int8_t*>(ptr) + sz);
}
return BIN();
}