summaryrefslogtreecommitdiff
path: root/src/sqlite/SQLiteWrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sqlite/SQLiteWrapper.h')
-rw-r--r--src/sqlite/SQLiteWrapper.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/sqlite/SQLiteWrapper.h b/src/sqlite/SQLiteWrapper.h
new file mode 100644
index 00000000..343baff2
--- /dev/null
+++ b/src/sqlite/SQLiteWrapper.h
@@ -0,0 +1,138 @@
+/*
+ SQLiteWrapper.h
+
+ Copyright (C) 2004 René Nyffenegger
+
+ This source code is provided 'as-is', without any express or implied
+ warranty. In no event will the author be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this source code must not be misrepresented; you must not
+ claim that you wrote the original source code. If you use this source code
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original source code.
+
+ 3. This notice may not be removed or altered from any source distribution.
+
+ René Nyffenegger rene.nyffenegger@adp-gmbh.ch
+*/
+
+#ifndef SQLITE_WRAPPER_H__
+#define SQLITE_WRAPPER_H__
+
+#include <string>
+#include <vector>
+
+#include "sqlite3.h"
+
+class SQLiteStatement {
+ private:
+ // SQLiteStatement's ctor only to be called by SQLiteWrapper
+ friend class SQLiteWrapper;
+ SQLiteStatement(std::string const& statement, sqlite3* db);
+
+ public:
+ SQLiteStatement();
+
+ enum dataType {
+ INT = SQLITE_INTEGER,
+ FLT = SQLITE_FLOAT ,
+ TXT = SQLITE_TEXT ,
+ BLB = SQLITE_BLOB ,
+ NUL = SQLITE_NULL ,
+ };
+
+ dataType DataType(int pos_zero_indexed);
+
+ int ValueInt (int pos_zero_indexed);
+ std::string ValueString(int pos_zero_indexed);
+
+// SQLiteStatement(const SQLiteStatement&);
+ ~SQLiteStatement();
+
+ //SQLiteStatement& operator=(SQLiteStatement const&);
+
+ bool Bind (int pos_zero_indexed, std::string const& value);
+ bool Bind (int pos_zero_indexed, double value);
+ bool Bind (int pos_zero_indexed, int value);
+ bool BindNull(int pos_zero_indexed);
+
+ bool Execute();
+
+ bool NextRow();
+
+ /* Call Reset if not depending on the NextRow cleaning up.
+ For example for select count(*) statements*/
+ bool Reset();
+
+ bool RestartSelect();
+
+ private:
+ //void DecreaseRefCounter();
+
+ //int* ref_counter_; // not yet used...
+ sqlite3_stmt* stmt_;
+};
+
+class SQLiteWrapper {
+ public:
+ SQLiteWrapper();
+
+ bool Open(std::string const& db_file);
+
+ class ResultRecord {
+ public:
+ std::vector<std::string> fields_;
+ };
+
+ class ResultTable {
+ friend class SQLiteWrapper;
+ public:
+ ResultTable() : ptr_cur_record_(0) {}
+
+ std::vector<ResultRecord> records_;
+
+ ResultRecord* next() {
+ if (ptr_cur_record_ < records_.size()) {
+ return &(records_[ptr_cur_record_++]);
+ }
+ return 0;
+ }
+
+ private:
+ void reset() {
+ records_.clear();
+ ptr_cur_record_=0;
+ }
+
+ private:
+ unsigned int ptr_cur_record_;
+ };
+
+ bool SelectStmt (std::string const& stmt, ResultTable& res);
+ bool DirectStatement (std::string const& stmt);
+ SQLiteStatement* Statement(std::string const& stmt);
+
+ std::string LastError();
+
+ // Transaction related
+ bool Begin ();
+ bool Commit ();
+ bool Rollback();
+
+ private:
+
+ static int SelectCallback(void *p_data, int num_fields, char **p_fields, char **p_col_names);
+
+ sqlite3* db_;
+};
+
+#endif
+