aboutsummaryrefslogtreecommitdiff
path: root/odb/pragma.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-11-01 12:41:02 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-11-01 14:30:22 +0200
commit7871bd9b681f449cc3938750ce70fa1ed5400dcd (patch)
tree3784716722430f06799016e3b7bdae7231fd9120 /odb/pragma.cxx
parentc11ace0f4a665ac0dfb269860ef04dce284b75f5 (diff)
Implement support for optimistic concurrency
New pragmas: optimistic, version. New test: optimistic. New database function: reload().
Diffstat (limited to 'odb/pragma.cxx')
-rw-r--r--odb/pragma.cxx42
1 files changed, 38 insertions, 4 deletions
diff --git a/odb/pragma.cxx b/odb/pragma.cxx
index eee2677..585da42 100644
--- a/odb/pragma.cxx
+++ b/odb/pragma.cxx
@@ -316,7 +316,8 @@ check_spec_decl_type (tree d,
else if (p == "auto" ||
p == "column" ||
p == "inverse" ||
- p == "transient")
+ p == "transient" ||
+ p == "version")
{
if (tc != FIELD_DECL)
{
@@ -341,7 +342,8 @@ check_spec_decl_type (tree d,
p == "abstract" ||
p == "callback" ||
p == "query" ||
- p == "object")
+ p == "object" ||
+ p == "optimistic")
{
if (tc != RECORD_TYPE)
{
@@ -689,6 +691,18 @@ handle_pragma (cpp_reader* reader,
tt = pragma_lex (&t);
}
+ else if (p == "optimistic")
+ {
+ // optimistic
+ //
+
+ // Make sure we've got the correct declaration type.
+ //
+ if (decl != 0 && !check_spec_decl_type (decl, decl_name, p, loc))
+ return;
+
+ tt = pragma_lex (&t);
+ }
else if (p == "callback")
{
// callback (name)
@@ -1460,7 +1474,7 @@ handle_pragma (cpp_reader* reader,
}
else if (p == "readonly")
{
- // transient
+ // readonly
//
// Make sure we've got the correct declaration type.
@@ -1482,6 +1496,18 @@ handle_pragma (cpp_reader* reader,
tt = pragma_lex (&t);
}
+ else if (p == "version")
+ {
+ // version
+ //
+
+ // Make sure we've got the correct declaration type.
+ //
+ if (decl != 0 && !check_spec_decl_type (decl, decl_name, p, loc))
+ return;
+
+ tt = pragma_lex (&t);
+ }
else
{
error () << "unknown db pragma " << p << endl;
@@ -1629,7 +1655,8 @@ handle_pragma_qualifier (cpp_reader* reader, string const& p)
p == "inverse" ||
p == "unordered" ||
p == "readonly" ||
- p == "transient")
+ p == "transient" ||
+ p == "version")
{
handle_pragma (reader, p, "member", 0, "");
return;
@@ -1853,6 +1880,12 @@ handle_pragma_db_transient (cpp_reader* r)
}
extern "C" void
+handle_pragma_db_version (cpp_reader* r)
+{
+ handle_pragma_qualifier (r, "version");
+}
+
+extern "C" void
handle_pragma_db (cpp_reader* r)
{
tree t;
@@ -1915,5 +1948,6 @@ register_odb_pragmas (void*, void*)
c_register_pragma_with_expansion ("db", "unordered", handle_pragma_db_unordered);
c_register_pragma_with_expansion ("db", "readonly", handle_pragma_db_readonly);
c_register_pragma_with_expansion ("db", "transient", handle_pragma_db_transient);
+ c_register_pragma_with_expansion ("db", "version", handle_pragma_db_version);
*/
}