1 #include "../../include/db/sqlite3db/sqlite3statement.h"
\r
10 std::map<sqlite3_stmt *, long> Statement::m_statementcount;
\r
12 Statement::Statement()
\r
16 m_resultcolumncount=0;
\r
17 m_rowreturned=false;
\r
20 Statement::Statement(sqlite3_stmt *statement)
\r
22 m_statement=statement;
\r
23 m_parametercount=sqlite3_bind_parameter_count(m_statement);
\r
24 m_resultcolumncount=sqlite3_column_count(m_statement);
\r
25 m_rowreturned=false;
\r
29 m_statementcount[m_statement]++;
\r
33 Statement::Statement(const Statement &rhs)
\r
37 m_resultcolumncount=0;
\r
38 m_rowreturned=false;
\r
42 Statement::~Statement()
\r
48 std::vector<char *>::iterator i;
\r
49 for(i=textptrs.begin(); i!=textptrs.end(); i++)
\r
60 const bool Statement::Bind(const int column)
\r
62 if(Valid() && column>=0 && column<m_parametercount)
\r
64 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
65 PThread::Guard g(DB::Instance()->m_mutex);
\r
66 if(sqlite3_bind_null(m_statement,column+1)==SQLITE_OK)
\r
81 const bool Statement::Bind(const int column, const int value)
\r
83 if(Valid() && column>=0 && column<m_parametercount)
\r
85 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
86 PThread::Guard g(DB::Instance()->m_mutex);
\r
87 if(sqlite3_bind_int(m_statement,column+1,value)==SQLITE_OK)
\r
102 const bool Statement::Bind(const int column, const double value)
\r
104 if(Valid() && column>=0 && column<m_parametercount)
\r
106 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
107 PThread::Guard g(DB::Instance()->m_mutex);
\r
108 if(sqlite3_bind_double(m_statement,column+1,value)==SQLITE_OK)
\r
123 const bool Statement::Bind(const int column, const std::string &value)
\r
125 if(Valid() && column>=0 && column<m_parametercount)
\r
127 //char *text=new char[value.size()+1];
\r
128 //strncpy(text,value.c_str(),value.size());
\r
129 //text[value.size()]=NULL;
\r
130 //textptrs.push_back(text);
\r
132 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
133 PThread::Guard g(DB::Instance()->m_mutex);
\r
134 //m_boundtext.push_back(std::vector<char>(value.begin(),value.end()));
\r
135 //if(sqlite3_bind_text(m_statement,column+1,text,value.size(),NULL)==SQLITE_OK)
\r
136 //if(sqlite3_bind_text(m_statement,column+1,&(m_boundtext[m_boundtext.size()-1][0]),(m_boundtext[m_boundtext.size()-1]).size(),NULL)==SQLITE_OK)
\r
137 if(sqlite3_bind_text(m_statement,column+1,value.c_str(),value.size(),SQLITE_TRANSIENT)==SQLITE_OK)
\r
152 const bool Statement::Bind(const int column, const void *data, const int length)
\r
154 if(Valid() && column>=0 && column<m_parametercount)
\r
156 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
157 PThread::Guard g(DB::Instance()->m_mutex);
\r
158 if(sqlite3_bind_blob(m_statement,column+1,data,length,SQLITE_TRANSIENT)==SQLITE_OK)
\r
173 void Statement::Finalize()
\r
177 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
178 PThread::Guard g(DB::Instance()->m_mutex);
\r
179 m_statementcount[m_statement]--;
\r
180 if(m_statementcount[m_statement]<=0)
\r
182 m_statementcount.erase(m_statement);
\r
183 sqlite3_finalize(m_statement);
\r
189 Statement &Statement::operator=(const Statement &rhs)
\r
195 m_statement=rhs.m_statement;
\r
196 m_parametercount=rhs.m_parametercount;
\r
197 m_resultcolumncount=rhs.m_resultcolumncount;
\r
198 m_rowreturned=rhs.m_rowreturned;
\r
202 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
203 PThread::Guard g(DB::Instance()->m_mutex);
\r
204 m_statementcount[m_statement]++;
\r
210 const bool Statement::Reset()
\r
214 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
215 PThread::Guard g(DB::Instance()->m_mutex);
\r
216 if(sqlite3_reset(m_statement)==SQLITE_OK)
\r
231 const bool Statement::ResultBlob(const int column, void *data, int &length)
\r
233 if(Valid() && column>=0 && column<m_resultcolumncount)
\r
235 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
236 PThread::Guard g(DB::Instance()->m_mutex);
\r
237 data=(void *)sqlite3_column_blob(m_statement,column);
\r
238 length=sqlite3_column_bytes(m_statement,column);
\r
247 const bool Statement::ResultDouble(const int column, double &result)
\r
249 if(Valid() && column>=0 && column<m_resultcolumncount)
\r
251 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
252 PThread::Guard g(DB::Instance()->m_mutex);
\r
253 result=sqlite3_column_double(m_statement,column);
\r
262 const bool Statement::ResultInt(const int column, int &result)
\r
264 if(Valid() && column>=0 && column<m_resultcolumncount)
\r
266 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
267 PThread::Guard g(DB::Instance()->m_mutex);
\r
268 result=sqlite3_column_int(m_statement,column);
\r
277 const bool Statement::ResultNull(const int column)
\r
279 if(Valid() && column>=0 && column<m_resultcolumncount)
\r
281 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
282 PThread::Guard g(DB::Instance()->m_mutex);
\r
283 if(sqlite3_column_type(m_statement,column)==SQLITE_NULL)
\r
298 const bool Statement::ResultText(const int column, std::string &result)
\r
300 if(Valid() && column>=0 && column<m_resultcolumncount)
\r
302 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
303 PThread::Guard g(DB::Instance()->m_mutex);
\r
304 const unsigned char *cresult=sqlite3_column_text(m_statement,column);
\r
307 result=(char *)cresult;
\r
321 const bool Statement::Step(const bool saveinsertrowid)
\r
323 m_rowreturned=false;
\r
326 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
327 PThread::Guard g(DB::Instance()->m_mutex);
\r
328 int result=sqlite3_step(m_statement);
\r
329 if(result==SQLITE_OK || result==SQLITE_ROW || result==SQLITE_DONE)
\r
331 if(result==SQLITE_ROW)
\r
333 m_rowreturned=true;
\r
335 if(saveinsertrowid)
\r
337 m_lastinsertrowid=sqlite3_last_insert_rowid(DB::Instance()->GetDB());
\r
352 const bool Statement::Valid()
\r
354 //ZThread::Guard<ZThread::Mutex> g(DB::instance()->m_mutex);
\r
355 PThread::Guard g(DB::Instance()->m_mutex);
\r
356 return m_statement ? true : false ;
\r