aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/oracle
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-08-14 09:37:06 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-11-25 06:47:21 +0200
commit55b36b8297ef9aac9e4ccc7b98f8649534ee0ac1 (patch)
treee9f0d22285d7fc9ad814b75eac9d587c6d630995 /odb/relational/oracle
parent19ba3497c0788f02fc417f441d87c96ce23f9446 (diff)
Implement bulk database operation support for Oracle and SQL Server
Diffstat (limited to 'odb/relational/oracle')
-rw-r--r--odb/relational/oracle/context.cxx1
-rw-r--r--odb/relational/oracle/header.cxx30
2 files changed, 31 insertions, 0 deletions
diff --git a/odb/relational/oracle/context.cxx b/odb/relational/oracle/context.cxx
index 98cda52..be97796 100644
--- a/odb/relational/oracle/context.cxx
+++ b/odb/relational/oracle/context.cxx
@@ -85,6 +85,7 @@ namespace relational
insert_send_auto_id = false;
delay_freeing_statement_result = false;
need_image_clone = true;
+ generate_bulk = true;
global_index = true;
global_fkey = true;
data_->bind_vector_ = "oracle::bind*";
diff --git a/odb/relational/oracle/header.cxx b/odb/relational/oracle/header.cxx
index f87e8de..055ef7b 100644
--- a/odb/relational/oracle/header.cxx
+++ b/odb/relational/oracle/header.cxx
@@ -226,6 +226,36 @@ namespace relational
member_image_type member_image_type_;
};
entry<image_member> image_member_;
+
+ struct class1: relational::class1
+ {
+ class1 (base const& x): base (x) {}
+
+ virtual void
+ object_public_extra_pre (type& c)
+ {
+ bool abst (abstract (c));
+
+ type* poly_root (polymorphic (c));
+ bool poly (poly_root != 0);
+ bool poly_derived (poly && poly_root != &c);
+
+ if (poly_derived || (abst && !poly))
+ return;
+
+ // Bulk operations batch size.
+ //
+ {
+ unsigned long long b (c.count ("bulk")
+ ? c.get<unsigned long long> ("bulk")
+ : 1);
+
+ os << "static const std::size_t batch = " << b << "UL;"
+ << endl;
+ }
+ }
+ };
+ entry<class1> class1_entry_;
}
}
}