diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-03-24 14:02:16 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-03-24 14:02:16 +0200 |
commit | 7939f7972cf22ee9a74518978e4f7d4d77535e09 (patch) | |
tree | b211e2f455ef717482370fc262a63a5f7bfeb77f /odb/sqlite/statement.cxx | |
parent | 01e70d9a1d49bcb126adc45f85168aa7c9cbad19 (diff) |
Add support for clearing connection from active and uncached statements
Diffstat (limited to 'odb/sqlite/statement.cxx')
-rw-r--r-- | odb/sqlite/statement.cxx | 57 |
1 files changed, 22 insertions, 35 deletions
diff --git a/odb/sqlite/statement.cxx b/odb/sqlite/statement.cxx index fc9e780..aa87939 100644 --- a/odb/sqlite/statement.cxx +++ b/odb/sqlite/statement.cxx @@ -24,27 +24,11 @@ namespace odb statement:: ~statement () { - sqlite3_finalize (stmt_); + finilize (); } - statement:: - statement (connection& conn, const string& s) - : conn_ (conn) - { - if (int e = sqlite3_prepare_v2 ( - conn_.handle (), - s.c_str (), - static_cast<int> (s.size () + 1), - &stmt_, - 0)) - { - translate_error (e, conn_); - } - } - - statement:: - statement (connection& conn, const char* s, std::size_t n) - : conn_ (conn) + void statement:: + init (const char* s, std::size_t n) { if (int e = sqlite3_prepare_v2 ( conn_.handle (), @@ -55,6 +39,14 @@ namespace odb { translate_error (e, conn_); } + + active_ = false; + cached_ = false; + + prev_ = 0; + next_ = this; + + list_add (); // Add to the list because we are uncached. } void statement:: @@ -233,14 +225,19 @@ namespace odb void select_statement:: execute () { + if (active ()) + reset (); + done_ = false; bind_param (cond_.bind, cond_.count); + active (true); } void select_statement:: free_result () { - sqlite3_reset (stmt_); + reset (); + done_ = true; } bool select_statement:: @@ -250,23 +247,13 @@ namespace odb { int e (sqlite3_step (stmt_)); - switch (e) + if (e != SQLITE_ROW) { - case SQLITE_DONE: - { - done_ = true; - sqlite3_reset (stmt_); - break; - } - case SQLITE_ROW: - { - break; - } - default: - { - sqlite3_reset (stmt_); + reset (); + done_ = true; + + if (e != SQLITE_DONE) translate_error (e, conn_); - } } } |