// file : odb/sqlite/statement-cache.hxx // author : Boris Kolpackov // copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #ifndef ODB_SQLITE_STATEMENT_CACHE_HXX #define ODB_SQLITE_STATEMENT_CACHE_HXX #include #include #include #include #include #include #include #include #include #include #include #include namespace odb { namespace sqlite { class connection; class LIBODB_SQLITE_EXPORT statement_cache { public: statement_cache (connection&); simple_statement& begin_statement () const { return *begin_; } simple_statement& begin_immediate_statement () const { if (!begin_immediate_) begin_immediate_statement_ (); return *begin_immediate_; } simple_statement& begin_exclusive_statement () const { if (!begin_exclusive_) begin_exclusive_statement_ (); return *begin_exclusive_; } simple_statement& commit_statement () const { return *commit_; } simple_statement& rollback_statement () const { return *rollback_; } template typename object_statements_selector::type& find_object () { typedef typename object_statements_selector::type object_statements; map::iterator i (map_.find (&typeid (T))); if (i != map_.end ()) return static_cast (*i->second); details::shared_ptr p ( new (details::shared) object_statements (conn_)); map_.insert (map::value_type (&typeid (T), p)); return *p; } template view_statements& find_view () { map::iterator i (map_.find (&typeid (T))); if (i != map_.end ()) return static_cast&> (*i->second); details::shared_ptr > p ( new (details::shared) view_statements (conn_)); map_.insert (map::value_type (&typeid (T), p)); return *p; } private: void begin_immediate_statement_ () const; void begin_exclusive_statement_ () const; private: typedef std::map, details::type_info_comparator> map; connection& conn_; details::shared_ptr begin_; mutable details::shared_ptr begin_immediate_; mutable details::shared_ptr begin_exclusive_; details::shared_ptr commit_; details::shared_ptr rollback_; map map_; }; } } #include #endif // ODB_SQLITE_STATEMENT_CACHE_HXX