From b9714c9f9a878ab363b85dc4add9eb16fe123d67 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 3 Dec 2012 13:11:42 +0200 Subject: Add support for executing common query using static interface --- odb/mysql/connection.hxx | 6 +++++- odb/mysql/connection.ixx | 11 ++++++++++- odb/mysql/database.hxx | 18 ++++++++++++++--- odb/mysql/database.ixx | 51 ++++++++++++++++++++++++++++++++++++------------ 4 files changed, 69 insertions(+), 17 deletions(-) diff --git a/odb/mysql/connection.hxx b/odb/mysql/connection.hxx index 8316386..3329bb6 100644 --- a/odb/mysql/connection.hxx +++ b/odb/mysql/connection.hxx @@ -74,7 +74,11 @@ namespace odb template prepared_query - prepare_query (const char* name, const query&); + prepare_query (const char* name, const mysql::query_base&); + + template + prepared_query + prepare_query (const char* name, const odb::query_base&); // SQL statement tracing. // diff --git a/odb/mysql/connection.ixx b/odb/mysql/connection.ixx index 3a3c975..5bbb251 100644 --- a/odb/mysql/connection.ixx +++ b/odb/mysql/connection.ixx @@ -22,9 +22,18 @@ namespace odb template inline prepared_query connection:: - prepare_query (const char* n, const query& q) + prepare_query (const char* n, const mysql::query_base& q) { return query_::call (*this, n, q); } + + template + inline prepared_query connection:: + prepare_query (const char* n, const odb::query_base& q) + { + // Translate to native query. + // + return prepare_query (n, mysql::query_base (q)); + } } } diff --git a/odb/mysql/database.hxx b/odb/mysql/database.hxx index cc26a6e..537a0e3 100644 --- a/odb/mysql/database.hxx +++ b/odb/mysql/database.hxx @@ -333,7 +333,11 @@ namespace odb template unsigned long long - erase_query (const mysql::query&); + erase_query (const mysql::query_base&); + + template + unsigned long long + erase_query (const odb::query_base&); // Query API. // @@ -351,7 +355,11 @@ namespace odb template result - query (const mysql::query&, bool cache = true); + query (const mysql::query_base&, bool cache = true); + + template + result + query (const odb::query_base&, bool cache = true); // Query preparation. // @@ -365,7 +373,11 @@ namespace odb template prepared_query - prepare_query (const char* name, const mysql::query&); + prepare_query (const char* name, const mysql::query_base&); + + template + prepared_query + prepare_query (const char* name, const odb::query_base&); // Transactions. // diff --git a/odb/mysql/database.ixx b/odb/mysql/database.ixx index 5f3854a..9d12ddf 100644 --- a/odb/mysql/database.ixx +++ b/odb/mysql/database.ixx @@ -335,7 +335,7 @@ namespace odb { // T is always object_type. // - return erase_query (mysql::query ()); + return erase_query (mysql::query_base ()); } template @@ -344,7 +344,7 @@ namespace odb { // T is always object_type. // - return erase_query (mysql::query (q)); + return erase_query (mysql::query_base (q)); } template @@ -353,12 +353,12 @@ namespace odb { // T is always object_type. // - return erase_query (mysql::query (q)); + return erase_query (mysql::query_base (q)); } template inline unsigned long long database:: - erase_query (const mysql::query& q) + erase_query (const mysql::query_base& q) { // T is always object_type. // @@ -366,29 +366,38 @@ namespace odb } template + inline unsigned long long database:: + erase_query (const odb::query_base& q) + { + // Translate to native query. + // + return erase_query (mysql::query_base (q)); + } + + template inline result database:: query (bool cache) { - return query (mysql::query (), cache); + return query (mysql::query_base (), cache); } template inline result database:: query (const char* q, bool cache) { - return query (mysql::query (q), cache); + return query (mysql::query_base (q), cache); } template inline result database:: query (const std::string& q, bool cache) { - return query (mysql::query (q), cache); + return query (mysql::query_base (q), cache); } template inline result database:: - query (const mysql::query& q, bool cache) + query (const mysql::query_base& q, bool cache) { // T is always object_type. We also don't need to check for transaction // here; object_traits::query () does this. @@ -402,27 +411,45 @@ namespace odb } template + inline result database:: + query (const odb::query_base& q, bool cache) + { + // Translate to native query. + // + return query (mysql::query_base (q), cache); + } + + template inline prepared_query database:: prepare_query (const char* n, const char* q) { - return prepare_query (n, mysql::query (q)); + return prepare_query (n, mysql::query_base (q)); } template inline prepared_query database:: prepare_query (const char* n, const std::string& q) { - return prepare_query (n, mysql::query (q)); + return prepare_query (n, mysql::query_base (q)); } template inline prepared_query database:: - prepare_query (const char* n, const mysql::query& q) + prepare_query (const char* n, const mysql::query_base& q) { // Throws if not in transaction. // mysql::connection& c (transaction::current ().connection ()); - return c.prepare_query (n, q); + return c.prepare_query (n, q); + } + + template + inline prepared_query database:: + prepare_query (const char* n, const odb::query_base& q) + { + // Translate to native query. + // + return prepare_query (n, mysql::query_base (q)); } } } -- cgit v1.1