From 18a040773c389de7be48111efc0f3cf7252ffc68 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 20 Sep 2011 11:53:04 +0200 Subject: Change query syntax to use . for composite and -> for object pointer access Also make non-inverse query columns act as both an object pointer and a normal column. The latter allows us to use natural expressions such as query::employer.is_null (). --- common/composite/driver.cxx | 4 ++-- common/erase-query/driver.cxx | 25 +++++++++++++++++++++++++ common/inheritance/driver.cxx | 4 ++-- common/inverse/driver.cxx | 4 ++-- common/relationship-query/driver.cxx | 14 +++++++------- common/relationship/driver.cxx | 2 +- common/view/driver.cxx | 8 +++----- common/view/test.hxx | 4 +++- 8 files changed, 45 insertions(+), 20 deletions(-) diff --git a/common/composite/driver.cxx b/common/composite/driver.cxx index e1dfef8..606f367 100644 --- a/common/composite/driver.cxx +++ b/common/composite/driver.cxx @@ -90,7 +90,7 @@ main (int argc, char* argv[]) { transaction t (db->begin ()); - result r (db->query (query::name::first == "Joe")); + result r (db->query (query::name.first == "Joe")); assert (!r.empty ()); assert (*r.begin () == p); @@ -104,7 +104,7 @@ main (int argc, char* argv[]) { transaction t (db->begin ()); - result r (db->query (query::name::flags::alias)); + result r (db->query (query::name.flags.alias)); assert (!r.empty ()); assert (*r.begin () == p); diff --git a/common/erase-query/driver.cxx b/common/erase-query/driver.cxx index 2137377..5085207 100644 --- a/common/erase-query/driver.cxx +++ b/common/erase-query/driver.cxx @@ -112,6 +112,31 @@ main (int argc, char* argv[]) } */ + // For now we can only do column-based tests, like is_null(). + // + { + object o11 (1); + object o12 (2); + object o13 (3); + object2 o2; + + o12.o2 = &o2; + + 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 (query::o2.is_null ()) == 2); + db->erase_query (); + t.commit (); + } + // Make sure container data is deleted. // { diff --git a/common/inheritance/driver.cxx b/common/inheritance/driver.cxx index ce72863..0106b5b 100644 --- a/common/inheritance/driver.cxx +++ b/common/inheritance/driver.cxx @@ -143,7 +143,7 @@ main (int argc, char* argv[]) transaction t (db->begin ()); - assert (!db->query (b_query::comp::num == 10).empty ()); + assert (!db->query (b_query::comp.num == 10).empty ()); assert (!db->query (o1_query::num1 == 21).empty ()); assert (!db->query (o2_query::num == 2).empty ()); @@ -155,7 +155,7 @@ main (int argc, char* argv[]) // Query condition with referenced composite member in base class. // { - r_result r (db->query (r_query::o1::comp::num == 11)); + r_result r (db->query (r_query::o1->comp.num == 11)); assert (!r.empty ()); delete r.begin ()->o1_; } diff --git a/common/inverse/driver.cxx b/common/inverse/driver.cxx index c07b751..17fc5d6 100644 --- a/common/inverse/driver.cxx +++ b/common/inverse/driver.cxx @@ -172,7 +172,7 @@ main (int argc, char* argv[]) session s; transaction t (db->begin ()); - result r (db->query (query::o1::id == "obj1 1")); + result r (db->query (query::o1->id == "obj1 1")); assert (!r.empty ()); assert (r.begin ()->id == o2->id); assert (r.begin ()->o1->id == o1_1->id); @@ -190,7 +190,7 @@ main (int argc, char* argv[]) session s; transaction t (db->begin ()); - result r (db->query (query::o1::id == "obj1 1")); + result r (db->query (query::o1->id == "obj1 1")); size_t n (0); for (result::iterator i (r.begin ()); i != r.end (); ++i) diff --git a/common/relationship-query/driver.cxx b/common/relationship-query/driver.cxx index 57a6215..2e0068e 100644 --- a/common/relationship-query/driver.cxx +++ b/common/relationship-query/driver.cxx @@ -109,11 +109,11 @@ main (int argc, char* argv[]) transaction t (db->begin ()); p_result pr (db->query ( - p_query::residence::location::code == "ZA")); + p_query::residence.location->code == "ZA")); assert (size (pr) == 1); e_result er (db->query ( - e_query::residence::location::code == "ZA")); + e_query::residence.location->code == "ZA")); assert (size (er) == 1); t.commit (); @@ -125,10 +125,10 @@ main (int argc, char* argv[]) session s; transaction t (db->begin ()); - p_result pr (db->query (p_query::husband::last_name == "Doe")); + p_result pr (db->query (p_query::husband->last_name == "Doe")); assert (size (pr) == 1); - e_result er (db->query (e_query::husband::last_name == "Doe")); + e_result er (db->query (e_query::husband->last_name == "Doe")); assert (size (er) == 1); t.commit (); @@ -142,8 +142,8 @@ main (int argc, char* argv[]) e_result r ( db->query ( - e_query::employed_by::name == "Simple Tech, Inc" && - e_query::nationality::code == "US")); + e_query::employed_by->name == "Simple Tech, Inc" && + e_query::nationality->code == "US")); assert (size (r) == 1); @@ -158,7 +158,7 @@ main (int argc, char* argv[]) p_result r ( db->query ( - p_query::husband::residence::location == "CA")); + p_query::husband->residence.location == "CA")); assert (size (r) == 1); diff --git a/common/relationship/driver.cxx b/common/relationship/driver.cxx index 3ce7e8c..e2ac749 100644 --- a/common/relationship/driver.cxx +++ b/common/relationship/driver.cxx @@ -105,7 +105,7 @@ main (int argc, char* argv[]) { transaction t (db->begin ()); - result r (db->query (query::o1::str == "obj1")); + result r (db->query (query::o1->str == "obj1")); assert (!r.empty ()); assert (r.begin ()->o1->id == a.o1->id); assert (size (r) == 1); diff --git a/common/view/driver.cxx b/common/view/driver.cxx index 8450b34..847d21b 100644 --- a/common/view/driver.cxx +++ b/common/view/driver.cxx @@ -505,8 +505,8 @@ main (int argc, char* argv[]) { result r (db->query ( - query::measures::weight > 60 && - query::measures::hight < 190)); + query::measures.weight > 60 && + query::measures.hight < 190)); result::iterator i (r.begin ()); @@ -535,9 +535,7 @@ main (int argc, char* argv[]) transaction t (db->begin ()); { - result r (db->query ( - query::measures::weight > 60 && - query::measures::hight < 190)); + result r (db->query ()); result::iterator i (r.begin ()); diff --git a/common/view/test.hxx b/common/view/test.hxx index 3ba6745..dc3439c 100644 --- a/common/view/test.hxx +++ b/common/view/test.hxx @@ -382,7 +382,9 @@ struct view10 // // Composite in object. // -#pragma db view object(person) query((?) + "ORDER BY" + person::age) +#pragma db view object(person) \ + query((person::measures.weight > 60 && person::measures.hight < 190) \ + + "ORDER BY" + person::age) struct view11 { std::string last_name; -- cgit v1.1