5 #ifndef ODB_ORACLE_POLYMORPHIC_OBJECT_STATEMENTS_HXX
6 #define ODB_ORACLE_POLYMORPHIC_OBJECT_STATEMENTS_HXX
15 #include <odb/details/shared-ptr.hxx>
34 class polymorphic_root_object_statements:
public object_statements<T>
42 typename object_traits::discriminator_image_type
68 {
return discriminator_image_version_;}
72 {discriminator_image_version_ = v;}
84 {
return discriminator_id_image_version_;}
88 {discriminator_id_image_version_ = v;}
92 {
return discriminator_id_image_binding_;}
99 if (find_discriminator_ == 0)
100 find_discriminator_.reset (
103 object_traits::find_discriminator_statement,
106 discriminator_id_image_binding_,
107 discriminator_image_binding_,
110 return *find_discriminator_;
127 this->
template load_delayed_<polymorphic_root_object_statements> (
136 object_traits::discriminator_column_count;
139 object_traits::managed_optimistic_column_count;
145 std::size_t discriminator_image_version_;
146 binding discriminator_image_binding_;
153 std::size_t discriminator_id_image_version_;
154 binding discriminator_id_image_binding_;
157 details::shared_ptr<select_statement_type> find_discriminator_;
160 template <
typename T>
166 typedef typename object_traits::id_type
id_type;
178 typename object_traits::base_traits::statements_type
182 typename object_traits::extra_statement_cache_type
213 return root_statements_;
219 return base_statements_;
276 return select_image_bindings_[object_traits::depth - d];
306 object_traits::persist_statement,
307 object_traits::versioned,
308 insert_image_binding_,
317 std::size_t i (object_traits::depth - d);
318 details::shared_ptr<select_statement_type>& p (find_[i]);
324 object_traits::find_statements[i],
325 object_traits::versioned,
328 select_image_bindings_[i],
341 object_traits::update_statement,
342 object_traits::versioned,
343 update_image_binding_));
355 object_traits::erase_statement,
366 return extra_statement_cache_.
get (
379 object_traits::id_column_count;
382 object_traits::column_count -
384 object_traits::separate_load_column_count +
385 base_statements_type::select_column_count;
388 object_traits::column_count -
389 object_traits::inverse_column_count;
392 object_traits::id_column_count -
393 object_traits::readonly_column_count -
394 object_traits::separate_update_column_count;
408 extra_statement_cache_;
428 std::size_t select_image_versions_[object_traits::depth];
429 binding select_image_bindings_[
430 object_traits::abstract ? 1 : object_traits::depth];
435 std::size_t insert_image_version_;
436 std::size_t insert_id_binding_version_;
443 std::size_t update_image_version_;
444 std::size_t update_id_binding_version_;
448 details::shared_ptr<insert_statement_type> persist_;
449 details::shared_ptr<select_statement_type> find_[
450 object_traits::abstract ? 1 : object_traits::depth];
451 details::shared_ptr<update_statement_type> update_;
452 details::shared_ptr<delete_statement_type> erase_;
457 #include <odb/oracle/polymorphic-object-statements.txx>
461 #endif // ODB_ORACLE_POLYMORPHIC_OBJECT_STATEMENTS_HXX
oracle::insert_statement insert_statement_type
Definition: polymorphic-object-statements.hxx:185
static void delayed_loader(odb::database &, const id_type &, root_type &, const schema_version_migration *)
Definition: connection.hxx:35
virtual ~polymorphic_root_object_statements()
object_traits::base_traits::statements_type base_statements_type
Definition: polymorphic-object-statements.hxx:179
void id_image_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:288
void insert_image_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:237
select_statement_type & find_statement(std::size_t d)
Definition: polymorphic-object-statements.hxx:315
polymorphic_root_object_statements(connection_type &)
static const std::size_t managed_optimistic_column_count
Definition: polymorphic-object-statements.hxx:138
object_statements< T >::connection_type connection_type
Definition: polymorphic-object-statements.hxx:37
object_statements< T >::object_traits object_traits
Definition: polymorphic-object-statements.hxx:38
binding * select_image_bindings()
Definition: polymorphic-object-statements.hxx:271
std::size_t discriminator_image_version() const
Definition: polymorphic-object-statements.hxx:67
T object_type
Definition: polymorphic-object-statements.hxx:164
std::size_t update_image_version() const
Definition: polymorphic-object-statements.hxx:251
std::size_t insert_image_version() const
Definition: polymorphic-object-statements.hxx:234
root_statements_type & root_statements()
Definition: polymorphic-object-statements.hxx:211
Definition: forward.hxx:58
Definition: forward.hxx:61
object_traits::discriminator_image_type discriminator_image_type
Definition: polymorphic-object-statements.hxx:43
Definition: statement.hxx:340
std::size_t discriminator_id_image_version() const
Definition: polymorphic-object-statements.hxx:83
discriminator_image_type & discriminator_image()
Definition: polymorphic-object-statements.hxx:64
polymorphic_derived_object_statements(connection_type &)
extra_statement_cache_type & extra_statement_cache()
Definition: polymorphic-object-statements.hxx:364
id_image_type & id_image()
Definition: polymorphic-object-statements.hxx:282
bool locked() const
Definition: simple-object-statements.hxx:114
object_traits::base_type base_type
Definition: polymorphic-object-statements.hxx:176
object_traits::id_type id_type
Definition: polymorphic-object-statements.hxx:166
polymorphic_root_object_statements root_statements_type
Definition: polymorphic-object-statements.hxx:52
void discriminator_id_image_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:87
select_statement_type & find_discriminator_statement()
Definition: polymorphic-object-statements.hxx:97
object_traits::pointer_type pointer_type
Definition: polymorphic-object-statements.hxx:167
oracle::select_statement select_statement_type
Definition: polymorphic-object-statements.hxx:186
access::object_traits< T >::pointer_type pointer_type
binding & select_image_binding(std::size_t d)
Definition: polymorphic-object-statements.hxx:274
static const std::size_t id_column_count
Definition: polymorphic-object-statements.hxx:378
image_type & image()
Definition: polymorphic-object-statements.hxx:226
binding & id_image_binding()
Definition: polymorphic-object-statements.hxx:291
base_statements_type & base_statements()
Definition: polymorphic-object-statements.hxx:217
object_traits::extra_statement_cache_type extra_statement_cache_type
Definition: polymorphic-object-statements.hxx:183
insert_statement_type & persist_statement()
Definition: polymorphic-object-statements.hxx:300
delete_statement_type & erase_statement()
Definition: polymorphic-object-statements.hxx:349
Definition: statement.hxx:316
object_traits::id_image_type id_image_type
Definition: polymorphic-object-statements.hxx:168
std::size_t update_id_binding_version() const
Definition: polymorphic-object-statements.hxx:257
id_image_type & discriminator_id_image()
Definition: polymorphic-object-statements.hxx:80
void update_id_binding_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:260
virtual ~polymorphic_derived_object_statements()
Definition: statement.hxx:169
oracle::delete_statement delete_statement_type
Definition: polymorphic-object-statements.hxx:188
static const std::size_t insert_column_count
Definition: polymorphic-object-statements.hxx:387
connection_type & conn_
Definition: statements-base.hxx:56
Definition: binding.hxx:21
root_statements_type & root_statements()
Definition: polymorphic-object-statements.hxx:55
binding & id_image_binding()
Definition: simple-object-statements.hxx:335
polymorphic_root_object_statements< root_type > root_statements_type
Definition: polymorphic-object-statements.hxx:174
std::size_t insert_id_binding_version() const
Definition: polymorphic-object-statements.hxx:240
Definition: oracle-types.hxx:78
void load_delayed(const schema_version_migration *svm)
Definition: polymorphic-object-statements.hxx:122
binding & update_image_binding()
Definition: polymorphic-object-statements.hxx:263
std::size_t * select_image_versions()
Definition: polymorphic-object-statements.hxx:268
binding & discriminator_image_binding()
Definition: polymorphic-object-statements.hxx:75
static const std::size_t select_column_count
Definition: polymorphic-object-statements.hxx:381
object_statements< T >::select_statement_type select_statement_type
Definition: polymorphic-object-statements.hxx:47
std::size_t id_image_version() const
Definition: polymorphic-object-statements.hxx:285
object_statements< T >::id_image_type id_image_type
Definition: polymorphic-object-statements.hxx:39
update_statement_type & update_statement()
Definition: polymorphic-object-statements.hxx:335
static const std::size_t discriminator_column_count
Definition: polymorphic-object-statements.hxx:135
oracle::update_statement update_statement_type
Definition: polymorphic-object-statements.hxx:187
delayed_loads delayed_
Definition: simple-object-statements.hxx:543
binding & discriminator_id_image_binding()
Definition: polymorphic-object-statements.hxx:91
static const std::size_t id_column_count
Definition: polymorphic-object-statements.hxx:132
binding & insert_image_binding()
Definition: polymorphic-object-statements.hxx:246
Definition: statement.hxx:254
void discriminator_image_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:71
std::size_t id_image_version() const
Definition: simple-object-statements.hxx:329
id_image_type & id_image()
Definition: simple-object-statements.hxx:326
Definition: simple-object-statements.hxx:205
object_traits_impl< object_type, id_oracle > object_traits
Definition: polymorphic-object-statements.hxx:165
static const std::size_t update_column_count
Definition: polymorphic-object-statements.hxx:391
object_traits::root_type root_type
Definition: polymorphic-object-statements.hxx:171
object_traits::image_type image_type
Definition: polymorphic-object-statements.hxx:169
root_statements_type::auto_lock auto_lock
Definition: polymorphic-object-statements.hxx:190
object_traits::id_image_type id_image_type
Definition: simple-object-statements.hxx:188
binding & optimistic_id_image_binding()
Definition: polymorphic-object-statements.hxx:294
Definition: statements-base.hxx:23
binding & optimistic_id_image_binding()
Definition: simple-object-statements.hxx:342
Definition: forward.hxx:55
void insert_id_binding_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:243
void update_image_version(std::size_t v)
Definition: polymorphic-object-statements.hxx:254