aboutsummaryrefslogtreecommitdiff
path: root/odb/database.ixx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/database.ixx')
-rw-r--r--odb/database.ixx91
1 files changed, 91 insertions, 0 deletions
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 <cstring> // std::strlen()
+#include <utility> // std::move
+
+#include <odb/transaction.hxx>
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<T> (odb::query<T> (q), cache);
}
+ template <typename T>
+ inline prepared_query<T> database::
+ prepare_query (const char* n, const char* q)
+ {
+ return prepare_query<T> (n, odb::query<T> (q));
+ }
+
+ template <typename T>
+ inline prepared_query<T> database::
+ prepare_query (const char* n, const std::string& q)
+ {
+ return prepare_query<T> (n, odb::query<T> (q));
+ }
+
+ template <typename T>
+ inline prepared_query<T> database::
+ prepare_query (const char* n, const odb::query<T>& q)
+ {
+ connection_type& c (transaction::current ().connection ());
+ return c.prepare_query (n, q);
+ }
+
+ template <typename T>
+ inline void database::
+ cache_query (const prepared_query<T>& pq)
+ {
+ connection_type& c (transaction::current ().connection ());
+ c.cache_query (pq);
+ }
+
+ template <typename T, typename P>
+ inline void database::
+ cache_query (const prepared_query<T>& pq, std::auto_ptr<P> params)
+ {
+ connection_type& c (transaction::current ().connection ());
+ c.cache_query (pq, params);
+ }
+
+#ifdef ODB_CXX11
+ template <typename T, typename P>
+ inline void database::
+ cache_query (const prepared_query<T>& pq, std::unique_ptr<P> params)
+ {
+ connection_type& c (transaction::current ().connection ());
+ c.cache_query (pq, std::move (params));
+ }
+#endif
+
+ template <typename T>
+ inline prepared_query<T> database::
+ lookup_query (const char* name) const
+ {
+ connection_type& c (transaction::current ().connection ());
+ return c.lookup_query<T> (name);
+ }
+
+ template <typename T, typename P>
+ inline prepared_query<T> database::
+ lookup_query (const char* name, P*& params) const
+ {
+ connection_type& c (transaction::current ().connection ());
+ return c.lookup_query<T, P> (name, params);
+ }
+
// Implementations (i.e., the *_() functions).
//
template <typename T, database_id DB>