diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-08-25 11:02:20 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-08-25 11:02:20 +0200 |
commit | 18dc4c5a4cb46f01ebdd49fbb6baa3c48d8f3b3d (patch) | |
tree | 600125a04797d7261e748507c4c3d8eea5eadbf2 | |
parent | ff3950866c0f756a5b6f379b9f95f01fff4a9ec7 (diff) |
Add experimental code (commented out) for DELETE JOIN support
This would be needed to support object relationships in the erase_query()
functionality.
-rw-r--r-- | common/erase-query/driver.cxx | 35 | ||||
-rw-r--r-- | common/erase-query/test.hxx | 19 |
2 files changed, 52 insertions, 2 deletions
diff --git a/common/erase-query/driver.cxx b/common/erase-query/driver.cxx index 67d4e8d..2137377 100644 --- a/common/erase-query/driver.cxx +++ b/common/erase-query/driver.cxx @@ -63,7 +63,8 @@ main (int argc, char* argv[]) { transaction t (db->begin ()); - assert (db->erase_query<object> ("id < 3") == 2); + assert (db->erase_query<object> ( + "common_erase_query_object.id < 3") == 2); db->erase_query<object> (); t.commit (); } @@ -79,6 +80,38 @@ main (int argc, char* argv[]) t.commit (); } + // Test predicates involving object pointers (DELETE JOIN). + // + /* + { + object o11 (1); + object o12 (2); + object o13 (3); + object2 o2; + + o11.o2 = &o2; + o2.num = 123; + + o12.o1 = &o13; + o13.num = 123; + + transaction t (db->begin ()); + db->persist (o2); + db->persist (o13); + db->persist (o12); + db->persist (o11); + t.commit (); + } + + { + transaction t (db->begin ()); + assert (db->erase_query<object> (query::o1::num == 123) == 1); + assert (db->erase_query<object> (query::o2::num == 123) == 1); + db->erase_query<object> (); + t.commit (); + } + */ + // Make sure container data is deleted. // { diff --git a/common/erase-query/test.hxx b/common/erase-query/test.hxx index be5539f..781eedd 100644 --- a/common/erase-query/test.hxx +++ b/common/erase-query/test.hxx @@ -10,15 +10,18 @@ #include <odb/core.hxx> +struct object2; + #pragma db object struct object { object (unsigned long id) - : id_ (id) + : id_ (id), o1 (0), o2 (0) { } object () + : o1 (0), o2 (0) { } @@ -26,6 +29,20 @@ struct object unsigned long id_; std::vector<int> v; + + int num; + + object* o1; + object2* o2; +}; + +#pragma db object +struct object2 +{ + #pragma db id auto + unsigned long id_; + + int num; }; #endif // TEST_HXX |