version 0.3.29
[fms.git] / include / db / sqlite3db / sqlite3statement.h
1 #ifndef _sqlite3dbstatement_\r
2 #define _sqlite3dbstatement_\r
3 \r
4 #include "sqlite3db.h"\r
5 \r
6 #include <Poco/Mutex.h>\r
7 \r
8 #include <vector>\r
9 #include <map>\r
10 \r
11 namespace SQLite3DB\r
12 {\r
13 \r
14 class Statement\r
15 {\r
16 public:\r
17         Statement();\r
18         Statement(sqlite3_stmt *statement);\r
19         Statement(const Statement &rhs);\r
20         virtual ~Statement();\r
21 \r
22         virtual const int ParameterCount() { return m_parametercount; }\r
23         virtual const int ResultColumnCount() { return m_resultcolumncount; }\r
24 \r
25         virtual const bool Valid();\r
26 \r
27         virtual void Finalize();\r
28 \r
29         virtual const bool Reset();\r
30         virtual const bool Step(const bool saveinsertrowid=false);\r
31 \r
32         virtual const bool RowReturned() { return m_rowreturned; }\r
33 \r
34         virtual const long GetLastInsertRowID() { return m_lastinsertrowid; }\r
35 \r
36         // both Bind and Result have column index starting at 0\r
37         // Blob results are not copied, user must make a copy in memory if it needs to be used in the future\r
38 \r
39         virtual const bool Bind(const int column);\r
40         virtual const bool Bind(const int column, const int value);\r
41         virtual const bool Bind(const int column, const long value)                     { return Bind(column,static_cast<int>(value)); }\r
42         virtual const bool Bind(const int column, const double value);\r
43         virtual const bool Bind(const int column, const std::string &value);\r
44         virtual const bool Bind(const int column, const void *data, const int length);\r
45 \r
46         virtual const bool ResultNull(const int column);\r
47         virtual const bool ResultInt(const int column, int &result);\r
48         virtual const bool ResultDouble(const int column, double &result);\r
49         virtual const bool ResultText(const int column, std::string &result);\r
50         virtual const bool ResultBlob(const int column, void *data, int &length);\r
51         \r
52         Statement &operator=(const Statement &rhs);\r
53 \r
54 private:\r
55         sqlite3_stmt *m_statement;\r
56         int m_parametercount;\r
57         int m_resultcolumncount;\r
58         bool m_rowreturned;\r
59         long m_lastinsertrowid;\r
60 \r
61         static std::map<sqlite3_stmt *, long> m_statementcount;\r
62         static Poco::FastMutex m_mutex;                 // protect all access to m_statementcount\r
63 \r
64 };      //class\r
65 \r
66 }       // namespace\r
67 \r
68 #endif  // _sqlite3dbstatement_\r