aboutsummaryrefslogtreecommitdiff
path: root/odb/mysql/container-statements.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/mysql/container-statements.hxx')
-rw-r--r--odb/mysql/container-statements.hxx42
1 files changed, 34 insertions, 8 deletions
diff --git a/odb/mysql/container-statements.hxx b/odb/mysql/container-statements.hxx
index a5e93a1..7124be7 100644
--- a/odb/mysql/container-statements.hxx
+++ b/odb/mysql/container-statements.hxx
@@ -25,7 +25,8 @@ namespace odb
{
class connection;
- // Template argument is the generated container traits type.
+ // Template argument is the generated abstract container traits type.
+ // That is, it doesn't need to provide column counts and statements.
//
template <typename T>
class container_statements
@@ -166,7 +167,7 @@ namespace odb
if (insert_one_ == 0)
insert_one_.reset (
new (details::shared) insert_statement_type (
- conn_, traits::insert_one_statement, data_image_binding_));
+ conn_, insert_one_text_, data_image_binding_));
return *insert_one_;
}
@@ -178,7 +179,7 @@ namespace odb
select_all_.reset (
new (details::shared) select_statement_type (
conn_,
- traits::select_all_statement,
+ select_all_text_,
cond_image_binding_,
data_image_binding_));
@@ -191,7 +192,7 @@ namespace odb
if (delete_all_ == 0)
delete_all_.reset (
new (details::shared) delete_statement_type (
- conn_, traits::delete_all_statement, cond_image_binding_));
+ conn_, delete_all_text_, cond_image_binding_));
return *delete_all_;
}
@@ -200,7 +201,7 @@ namespace odb
container_statements (const container_statements&);
container_statements& operator= (const container_statements&);
- private:
+ protected:
connection_type& conn_;
functions_type functions_;
@@ -210,19 +211,44 @@ namespace odb
std::size_t cond_image_version_;
std::size_t cond_id_binding_version_;
binding cond_image_binding_;
- MYSQL_BIND cond_image_bind_[traits::cond_column_count];
+ MYSQL_BIND* cond_image_bind_;
data_image_type data_image_;
std::size_t data_image_version_;
std::size_t data_id_binding_version_;
binding data_image_binding_;
- MYSQL_BIND data_image_bind_[traits::data_column_count];
- my_bool data_image_truncated_[traits::data_column_count];
+ MYSQL_BIND* data_image_bind_;
+ my_bool* data_image_truncated_;
+
+ const char* insert_one_text_;
+ const char* select_all_text_;
+ const char* delete_all_text_;
details::shared_ptr<insert_statement_type> insert_one_;
details::shared_ptr<select_statement_type> select_all_;
details::shared_ptr<delete_statement_type> delete_all_;
};
+
+ // Template argument is the generated concrete container traits type.
+ //
+ template <typename T>
+ class container_statements_impl: public T::statements_type
+ {
+ public:
+ typedef T traits;
+ typedef typename T::statements_type base;
+
+ container_statements_impl (connection&);
+
+ private:
+ container_statements_impl (const container_statements_impl&);
+ container_statements_impl& operator= (const container_statements_impl&);
+
+ private:
+ MYSQL_BIND cond_image_bind_array_[traits::cond_column_count];
+ MYSQL_BIND data_image_bind_array_[traits::data_column_count];
+ my_bool data_image_truncated_array_[traits::data_column_count];
+ };
}
}