diff options
author | Constantin Michael <constantin@codesynthesis.com> | 2011-09-16 10:39:36 +0200 |
---|---|---|
committer | Constantin Michael <constantin@codesynthesis.com> | 2011-09-19 10:35:17 +0200 |
commit | 946c283a971f09a4d1f72066d17a684f62f51d88 (patch) | |
tree | e34091b61f757aae17d9066b4e425175c44601f4 /odb/oracle/view-statements.hxx | |
parent | a5510b8f0ef6d5aa7cce21a719de726b669aa394 (diff) |
Add container-statements, object-statments, view-statements and statement cache
Diffstat (limited to 'odb/oracle/view-statements.hxx')
-rw-r--r-- | odb/oracle/view-statements.hxx | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/odb/oracle/view-statements.hxx b/odb/oracle/view-statements.hxx new file mode 100644 index 0000000..4dde079 --- /dev/null +++ b/odb/oracle/view-statements.hxx @@ -0,0 +1,109 @@ +// file : odb/oracle/view-statements.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +#ifndef ODB_ORACLE_VIEW_STATEMENTS_HXX +#define ODB_ORACLE_VIEW_STATEMENTS_HXX + +#include <odb/pre.hxx> + +#include <cstddef> // std::size_t + +#include <odb/forward.hxx> +#include <odb/traits.hxx> + +#include <odb/details/shared-ptr.hxx> + +#include <odb/oracle/oracle-types.hxx> +#include <odb/oracle/version.hxx> +#include <odb/oracle/statement.hxx> +#include <odb/oracle/statements-base.hxx> + +namespace odb +{ + namespace oracle + { + template <typename T> + class view_statements: public statements_base + { + public: + typedef T view_type; + typedef odb::view_traits<view_type> view_traits; + typedef typename view_traits::pointer_type pointer_type; + typedef typename view_traits::image_type image_type; + + typedef oracle::select_statement query_statement_type; + + public: + view_statements (connection_type&); + + virtual + ~view_statements (); + + // View image. + // + image_type& + image () + { + return image_; + } + + std::size_t + image_version () const + { + return image_version_; + } + + void + image_version (std::size_t v) + { + image_version_ = v; + } + + binding& + image_binding () + { + return image_binding_; + } + + sb2* + image_indicator () + { + return image_indicator_; + } + + query_statement_type& + query_statement () + { + if (query_ == 0) + query_.reset ( + new (details::shared) query_statement_type ( + conn_, + view_traits::query_statement, + image_binding_)); + + return *query_; + } + + private: + view_statements (const view_statements&); + view_statements& operator= (const view_statements&); + + private: + image_type image_; + std::size_t image_version_; + binding image_binding_; + bind image_bind_[view_traits::column_count]; + sb2 image_indicator_[view_traits::column_count]; + + details::shared_ptr<query_statement_type> query_; + }; + } +} + +#include <odb/oracle/view-statements.txx> + +#include <odb/post.hxx> + +#endif // ODB_ORACLE_VIEW_STATEMENTS_HXX |