From 5b0430fdf4617b396e462872d438a663b174a3a8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 12 Oct 2012 17:24:44 +0200 Subject: Completion of prepared query support --- odb/database.ixx | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) (limited to 'odb/database.ixx') diff --git a/odb/database.ixx b/odb/database.ixx index aeffdec..5b6f876 100644 --- a/odb/database.ixx +++ b/odb/database.ixx @@ -3,6 +3,9 @@ // license : GNU GPL v2; see accompanying LICENSE file #include // std::strlen() +#include // std::move + +#include namespace odb { @@ -25,6 +28,30 @@ namespace odb } inline void database:: + query_factory (const char* name, query_factory_type f) + { + if (f) +#ifdef ODB_CXX11 + query_factory_map_[name] = std::move (f); +#else + query_factory_map_[name] = f; +#endif + else + query_factory_map_.erase (name); + } + + inline database::query_factory_type database:: + lookup_query_factory (const char* name) const + { + query_factory_map::const_iterator i (query_factory_map_.find (name)); + + if (i == query_factory_map_.end ()) + i = query_factory_map_.find (""); // Wildcard factory. + + return i != query_factory_map_.end () ? i->second : 0; + } + + inline void database:: tracer (tracer_type& t) { tracer_ = &t; @@ -410,6 +437,70 @@ namespace odb return query (odb::query (q), cache); } + template + inline prepared_query database:: + prepare_query (const char* n, const char* q) + { + return prepare_query (n, odb::query (q)); + } + + template + inline prepared_query database:: + prepare_query (const char* n, const std::string& q) + { + return prepare_query (n, odb::query (q)); + } + + template + inline prepared_query database:: + prepare_query (const char* n, const odb::query& q) + { + connection_type& c (transaction::current ().connection ()); + return c.prepare_query (n, q); + } + + template + inline void database:: + cache_query (const prepared_query& pq) + { + connection_type& c (transaction::current ().connection ()); + c.cache_query (pq); + } + + template + inline void database:: + cache_query (const prepared_query& pq, std::auto_ptr

params) + { + connection_type& c (transaction::current ().connection ()); + c.cache_query (pq, params); + } + +#ifdef ODB_CXX11 + template + inline void database:: + cache_query (const prepared_query& pq, std::unique_ptr

params) + { + connection_type& c (transaction::current ().connection ()); + c.cache_query (pq, std::move (params)); + } +#endif + + template + inline prepared_query database:: + lookup_query (const char* name) const + { + connection_type& c (transaction::current ().connection ()); + return c.lookup_query (name); + } + + template + inline prepared_query database:: + lookup_query (const char* name, P*& params) const + { + connection_type& c (transaction::current ().connection ()); + return c.lookup_query (name, params); + } + // Implementations (i.e., the *_() functions). // template -- cgit v1.1