aboutsummaryrefslogtreecommitdiff
path: root/odb/connection.ixx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-10-12 17:24:44 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-10-19 11:38:24 +0200
commit5b0430fdf4617b396e462872d438a663b174a3a8 (patch)
treee89e0cc5b1fdff4e3f49c9c7b7607d2b90108c31 /odb/connection.ixx
parent5c705a90d348a2a9428d5121a24eb47d0d73eb39 (diff)
Completion of prepared query support
Diffstat (limited to 'odb/connection.ixx')
-rw-r--r--odb/connection.ixx58
1 files changed, 58 insertions, 0 deletions
diff --git a/odb/connection.ixx b/odb/connection.ixx
index fd1a624..8842d8e 100644
--- a/odb/connection.ixx
+++ b/odb/connection.ixx
@@ -3,6 +3,7 @@
// license : GNU GPL v2; see accompanying LICENSE file
#include <cstring> // std::string
+#include <cassert>
namespace odb
{
@@ -44,6 +45,63 @@ namespace odb
return prepare_query<T> (n, query<T> (q));
}
+ template <typename T>
+ inline prepared_query<T> connection::
+ prepare_query (const char* n, const query<T>& q)
+ {
+ return query_<T, id_default>::call (*this, n, q);
+ }
+
+ template <typename T>
+ inline void connection::
+ cache_query (const prepared_query<T>& pq)
+ {
+ assert (pq);
+ cache_query_ (pq.impl_, typeid (T), 0, 0, 0);
+ }
+
+ template <typename T, typename P>
+ inline void connection::
+ cache_query (const prepared_query<T>& pq, std::auto_ptr<P> params)
+ {
+ assert (pq);
+ assert (params.get () != 0);
+ cache_query_ (
+ pq.impl_, typeid (T), params.get (), &typeid (P), &params_deleter<P>);
+ params.release ();
+ }
+
+#ifdef ODB_CXX11
+ template <typename T, typename P>
+ inline void connection::
+ cache_query (const prepared_query<T>& pq, std::unique_ptr<P> params)
+ {
+ assert (pq);
+ assert (params);
+ cache_query_ (
+ pq.impl_, typeid (T), params.get (), &typeid (P), &params_deleter<P>);
+ params.release ();
+ }
+#endif
+
+ template <typename T>
+ inline prepared_query<T> connection::
+ lookup_query (const char* name) const
+ {
+ return prepared_query<T> (lookup_query_ (name, typeid (T), 0, 0));
+ }
+
+ template <typename T, typename P>
+ inline prepared_query<T> connection::
+ lookup_query (const char* name, P*& params) const
+ {
+ return prepared_query<T> (
+ lookup_query_ (name,
+ typeid (T),
+ reinterpret_cast<void**> (&params),
+ &typeid (P)));
+ }
+
inline void connection::
tracer (tracer_type& t)
{