diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-04-25 11:29:06 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-04-25 11:29:06 +0200 |
commit | dd4d4ddadaa2aa6a74ca46106d53e55505c68110 (patch) | |
tree | 5eb7cd08aee6281cd14d3ace630e486f48781b97 /odb/mysql/container-statements.hxx | |
parent | 7998e33d631f969052503f18d435f3a52d1a1da4 (diff) |
Reuse container traits from base objects
Diffstat (limited to 'odb/mysql/container-statements.hxx')
-rw-r--r-- | odb/mysql/container-statements.hxx | 42 |
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]; + }; } } |