aboutsummaryrefslogtreecommitdiff
path: root/odb/sqlite/statement-cache.txx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/sqlite/statement-cache.txx')
-rw-r--r--odb/sqlite/statement-cache.txx15
1 files changed, 15 insertions, 0 deletions
diff --git a/odb/sqlite/statement-cache.txx b/odb/sqlite/statement-cache.txx
index 4c6e3cd..8d8e358 100644
--- a/odb/sqlite/statement-cache.txx
+++ b/odb/sqlite/statement-cache.txx
@@ -2,6 +2,8 @@
// copyright : Copyright (c) 2005-2013 Code Synthesis Tools CC
// license : GNU GPL v2; see accompanying LICENSE file
+#include <odb/sqlite/database.hxx>
+
namespace odb
{
namespace sqlite
@@ -15,6 +17,16 @@ namespace odb
typename object_traits_impl<T, id_sqlite>::statements_type
statements_type;
+ // Clear the cache if the database version has changed. This
+ // makes sure we don't re-use statements that correspond to
+ // the old schema.
+ //
+ if (version_seq_ != conn_.database ().schema_version_sequence ())
+ {
+ map_.clear ();
+ version_seq_ = conn_.database ().schema_version_sequence ();
+ }
+
map::iterator i (map_.find (&typeid (T)));
if (i != map_.end ())
@@ -31,6 +43,9 @@ namespace odb
view_statements<T>& statement_cache::
find_view ()
{
+ // We don't cache any statements for views so no need to clear
+ // the cache.
+
map::iterator i (map_.find (&typeid (T)));
if (i != map_.end ())