aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-12-03 13:12:15 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-12-03 13:12:15 +0200
commitde82079ff82a62e69ed3e70122ba9af6ecefcacf (patch)
treedc1ef0d4e2dbd609f53038d3cabcccb732f117ae
parent18add9bb3064d8a994cc1b0c3a50c5df2dff3bf9 (diff)
Add support for executing common query using static interface
-rw-r--r--odb/pgsql/connection.hxx6
-rw-r--r--odb/pgsql/connection.ixx11
-rw-r--r--odb/pgsql/database.hxx18
-rw-r--r--odb/pgsql/database.ixx51
4 files changed, 69 insertions, 17 deletions
diff --git a/odb/pgsql/connection.hxx b/odb/pgsql/connection.hxx
index 472ee63..f43955d 100644
--- a/odb/pgsql/connection.hxx
+++ b/odb/pgsql/connection.hxx
@@ -72,7 +72,11 @@ namespace odb
template <typename T>
prepared_query<T>
- prepare_query (const char* name, const query<T>&);
+ prepare_query (const char* name, const pgsql::query_base&);
+
+ template <typename T>
+ prepared_query<T>
+ prepare_query (const char* name, const odb::query_base&);
// SQL statement tracing.
//
diff --git a/odb/pgsql/connection.ixx b/odb/pgsql/connection.ixx
index 70501e1..f1552bd 100644
--- a/odb/pgsql/connection.ixx
+++ b/odb/pgsql/connection.ixx
@@ -22,9 +22,18 @@ namespace odb
template <typename T>
inline prepared_query<T> connection::
- prepare_query (const char* n, const query<T>& q)
+ prepare_query (const char* n, const pgsql::query_base& q)
{
return query_<T, id_pgsql>::call (*this, n, q);
}
+
+ template <typename T>
+ inline prepared_query<T> connection::
+ prepare_query (const char* n, const odb::query_base& q)
+ {
+ // Translate to native query.
+ //
+ return prepare_query<T> (n, pgsql::query_base (q));
+ }
}
}
diff --git a/odb/pgsql/database.hxx b/odb/pgsql/database.hxx
index 02aa240..714dcfe 100644
--- a/odb/pgsql/database.hxx
+++ b/odb/pgsql/database.hxx
@@ -246,7 +246,11 @@ namespace odb
template <typename T>
unsigned long long
- erase_query (const pgsql::query<T>&);
+ erase_query (const pgsql::query_base&);
+
+ template <typename T>
+ unsigned long long
+ erase_query (const odb::query_base&);
// Query API.
//
@@ -264,7 +268,11 @@ namespace odb
template <typename T>
result<T>
- query (const pgsql::query<T>&);
+ query (const pgsql::query_base&);
+
+ template <typename T>
+ result<T>
+ query (const odb::query_base&);
// Query preparation.
//
@@ -278,7 +286,11 @@ namespace odb
template <typename T>
prepared_query<T>
- prepare_query (const char* name, const pgsql::query<T>&);
+ prepare_query (const char* name, const pgsql::query_base&);
+
+ template <typename T>
+ prepared_query<T>
+ prepare_query (const char* name, const odb::query_base&);
// Transactions.
//
diff --git a/odb/pgsql/database.ixx b/odb/pgsql/database.ixx
index 7ad92be..8124a28 100644
--- a/odb/pgsql/database.ixx
+++ b/odb/pgsql/database.ixx
@@ -335,7 +335,7 @@ namespace odb
{
// T is always object_type.
//
- return erase_query<T> (pgsql::query<T> ());
+ return erase_query<T> (pgsql::query_base ());
}
template <typename T>
@@ -344,7 +344,7 @@ namespace odb
{
// T is always object_type.
//
- return erase_query<T> (pgsql::query<T> (q));
+ return erase_query<T> (pgsql::query_base (q));
}
template <typename T>
@@ -353,12 +353,12 @@ namespace odb
{
// T is always object_type.
//
- return erase_query<T> (pgsql::query<T> (q));
+ return erase_query<T> (pgsql::query_base (q));
}
template <typename T>
inline unsigned long long database::
- erase_query (const pgsql::query<T>& q)
+ erase_query (const pgsql::query_base& q)
{
// T is always object_type.
//
@@ -366,29 +366,38 @@ namespace odb
}
template <typename T>
+ inline unsigned long long database::
+ erase_query (const odb::query_base& q)
+ {
+ // Translate to native query.
+ //
+ return erase_query<T> (pgsql::query_base (q));
+ }
+
+ template <typename T>
inline result<T> database::
query ()
{
- return query<T> (pgsql::query<T> ());
+ return query<T> (pgsql::query_base ());
}
template <typename T>
inline result<T> database::
query (const char* q)
{
- return query<T> (pgsql::query<T> (q));
+ return query<T> (pgsql::query_base (q));
}
template <typename T>
inline result<T> database::
query (const std::string& q)
{
- return query<T> (pgsql::query<T> (q));
+ return query<T> (pgsql::query_base (q));
}
template <typename T>
inline result<T> database::
- query (const pgsql::query<T>& q)
+ query (const pgsql::query_base& q)
{
// T is always object_type. We also don't need to check for transaction
// here; object_traits::query () does this.
@@ -397,27 +406,45 @@ namespace odb
}
template <typename T>
+ inline result<T> database::
+ query (const odb::query_base& q)
+ {
+ // Translate to native query.
+ //
+ return query<T> (pgsql::query_base (q));
+ }
+
+ template <typename T>
inline prepared_query<T> database::
prepare_query (const char* n, const char* q)
{
- return prepare_query<T> (n, pgsql::query<T> (q));
+ return prepare_query<T> (n, pgsql::query_base (q));
}
template <typename T>
inline prepared_query<T> database::
prepare_query (const char* n, const std::string& q)
{
- return prepare_query<T> (n, pgsql::query<T> (q));
+ return prepare_query<T> (n, pgsql::query_base (q));
}
template <typename T>
inline prepared_query<T> database::
- prepare_query (const char* n, const pgsql::query<T>& q)
+ prepare_query (const char* n, const pgsql::query_base& q)
{
// Throws if not in transaction.
//
pgsql::connection& c (transaction::current ().connection ());
- return c.prepare_query (n, q);
+ return c.prepare_query<T> (n, q);
+ }
+
+ template <typename T>
+ inline prepared_query<T> database::
+ prepare_query (const char* n, const odb::query_base& q)
+ {
+ // Translate to native query.
+ //
+ return prepare_query<T> (n, pgsql::query_base (q));
}
}
}