From 3076df2628f514b50065912a72269f2dc717e164 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 10 Aug 2010 11:19:14 +0200 Subject: Query test --- common/query/driver.cxx | 162 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 common/query/driver.cxx (limited to 'common/query/driver.cxx') diff --git a/common/query/driver.cxx b/common/query/driver.cxx new file mode 100644 index 0000000..214dd7b --- /dev/null +++ b/common/query/driver.cxx @@ -0,0 +1,162 @@ +// file : common/query/driver.cxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +// Test query support. +// + +#include // std::auto_ptr +#include +#include + +#include +#include + +#include + +#include "test.hxx" +#include "test-odb.hxx" + +using namespace std; +using namespace odb; + +using odb::shared_ptr; + +void +print (result& r) +{ + for (result::iterator i (r.begin ()); i != r.end (); ++i) + { + auto_ptr o (*i); + cout << *o << endl; + } +} + +int +main (int argc, char* argv[]) +{ + try + { + auto_ptr db (create_database (argc, argv)); + + // + // + { + person p1 (1, "John", "Doe", 30); + person p2 (2, "Jane", "Doe", 29); + person p3 (3, "Joe", "Dirt", 31); + + transaction t (db->begin_transaction ()); + db->persist (p1); + db->persist (p2); + db->persist (p3); + t.commit (); + } + + // Compilation tests. + // + if (false) + { + typedef odb::query query; + + string name; + unsigned short age; + + db->query ("age = " + query::_ref (age)); + db->query ("age = " + query::_val (age)); + + query age_q (query::_ref (age) + " = age"); + query name_q ("first_name = " + query::_val (name)); + query q (age_q + "AND" + name_q); + + db->query (q); + db->query (age_q + "OR" + + name_q + "OR" + + "age < " + query::_ref (age)); + } + + // Select-all query. + // + cout << "test 001" << endl; + { + transaction t (db->begin_transaction ()); + result r (db->query ()); + print (r); + t.commit (); + } + + // Select-all query with order by. + // + cout << "test 002" << endl; + { + transaction t (db->begin_transaction ()); + result r (db->query ("ORDER BY age")); + print (r); + t.commit (); + } + + // String query. + // + cout << "test 003" << endl; + { + transaction t (db->begin_transaction ()); + result r (db->query ("age >= 30 AND last_name = 'Doe'")); + print (r); + t.commit (); + } + + typedef odb::query query; + + // Value binding. + // + cout << "test 004" << endl; + { + transaction t (db->begin_transaction ()); + + const char* name = "Doe"; + + result r ( + db->query ( + "age >= " + query::_ref (30) + "AND" + + "last_name = " + query::_val (name))); + + print (r); + t.commit (); + } + + // Reference binding. + // + cout << "test 005" << endl; + { + transaction t (db->begin_transaction ()); + + string name; + unsigned short age; + + query q ("age >= " + query::_ref (age) + "AND" + + "last_name = " + query::_ref (name)); + + { + name = "Doe"; + age = 30; + result r (db->query (q)); + print (r); + } + + { + name = "Dirt"; + age = 31; + result r (db->query (q)); + print (r); + } + + t.commit (); + } + } + catch (const odb::exception& e) + { + cerr << e.what () << endl; + return 1; + } +} -- cgit v1.1