// 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; r = db->query (q); print (r); t.commit (); } } catch (const odb::exception& e) { cerr << e.what () << endl; return 1; } }