diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-11-06 18:00:43 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-11-06 18:00:43 +0200 |
commit | 5daaa1a6d9c8f5d3a4ad3d7009df564bc6506424 (patch) | |
tree | b96d205208587208a4e443be192fe264d2f53d57 /odb/mysql/container-statements.hxx | |
parent | 6fd2fb44263eb6704905cddcc607462c21c5e687 (diff) |
Add support for container persistence
Generalize statements that were used for persisting objects to work for
both objects and containers. Implement a cache for container statements.
Diffstat (limited to 'odb/mysql/container-statements.hxx')
-rw-r--r-- | odb/mysql/container-statements.hxx | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/odb/mysql/container-statements.hxx b/odb/mysql/container-statements.hxx new file mode 100644 index 0000000..322129f --- /dev/null +++ b/odb/mysql/container-statements.hxx @@ -0,0 +1,155 @@ +// file : odb/mysql/container-statements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +#ifndef ODB_MYSQL_CONTAINER_STATEMENTS_HXX +#define ODB_MYSQL_CONTAINER_STATEMENTS_HXX + +#include <odb/pre.hxx> + +#include <odb/forward.hxx> +#include <odb/traits.hxx> + +#include <odb/mysql/mysql.hxx> +#include <odb/mysql/version.hxx> +#include <odb/mysql/statement.hxx> + +#include <odb/mysql/details/export.hxx> + +namespace odb +{ + namespace mysql + { + class connection; + + // Template argument is the generated container traits type. + // + template <typename T> + class container_statements + { + public: + typedef T traits; + + typedef typename traits::data_image_type data_image_type; + typedef typename traits::cond_image_type cond_image_type; + + typedef typename traits::functions_type functions_type; + + typedef mysql::insert_statement insert_statement_type; + typedef mysql::select_statement select_statement_type; + typedef mysql::delete_statement delete_statement_type; + + container_statements (connection&); + + // Functions. + // + const functions_type& + functions () const + { + return functions_; + } + + // Condition image. + // + cond_image_type& + cond_image () + { + return cond_image_; + } + + binding& + cond_image_binding () + { + return cond_image_binding_; + } + + // Data image. + // + data_image_type& + data_image () + { + return data_image_; + } + + binding& + data_image_binding () + { + return data_image_binding_; + } + + my_bool* + data_image_error () + { + return data_image_error_; + } + + // + // Statements. + // + + insert_statement_type& + insert_one_statement () + { + if (insert_one_ == 0) + insert_one_.reset ( + new (details::shared) insert_statement_type ( + conn_, traits::insert_one_statement, data_image_binding_)); + + return *insert_one_; + } + + select_statement_type& + select_all_statement () + { + if (select_all_ == 0) + select_all_.reset ( + new (details::shared) select_statement_type ( + conn_, + traits::select_all_statement, + cond_image_binding_, + data_image_binding_)); + + return *select_all_; + } + + delete_statement_type& + delete_all_statement () + { + if (delete_all_ == 0) + delete_all_.reset ( + new (details::shared) delete_statement_type ( + conn_, traits::delete_all_statement, cond_image_binding_)); + + return *delete_all_; + } + + private: + container_statements (const container_statements&); + container_statements& operator= (const container_statements&); + + private: + connection& conn_; + functions_type functions_; + + cond_image_type cond_image_; + binding cond_image_binding_; + MYSQL_BIND cond_image_bind_[traits::cond_column_count]; + + data_image_type data_image_; + binding data_image_binding_; + MYSQL_BIND data_image_bind_[traits::data_column_count]; + my_bool data_image_error_[traits::data_column_count]; + + details::shared_ptr<insert_statement_type> insert_one_; + details::shared_ptr<select_statement_type> select_all_; + details::shared_ptr<delete_statement_type> delete_all_; + }; + } +} + +#include <odb/mysql/container-statements.txx> + +#include <odb/post.hxx> + +#endif // ODB_MYSQL_CONTAINER_STATEMENTS_HXX |