aboutsummaryrefslogtreecommitdiff
path: root/common/prepared/driver.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-10-04 11:33:50 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-10-19 11:41:11 +0200
commit3fd1098c70a36cdffa256b6d9fd721cf95c6f482 (patch)
tree0001b0c1d5c5dd73800439f2739e752294cff7b3 /common/prepared/driver.cxx
parent3d1969a43fce72dd50044c5eada38557f3f200bd (diff)
Initial support for prepared queries
Diffstat (limited to 'common/prepared/driver.cxx')
-rw-r--r--common/prepared/driver.cxx75
1 files changed, 75 insertions, 0 deletions
diff --git a/common/prepared/driver.cxx b/common/prepared/driver.cxx
new file mode 100644
index 0000000..24a3788
--- /dev/null
+++ b/common/prepared/driver.cxx
@@ -0,0 +1,75 @@
+// file : common/prepared/driver.cxx
+// copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+// Test prepared query functionality.
+//
+
+#include <memory> // std::auto_ptr
+#include <cassert>
+#include <iostream>
+
+#include <odb/database.hxx>
+#include <odb/transaction.hxx>
+
+#include <common/common.hxx>
+
+#include "test.hxx"
+#include "test-odb.hxx"
+
+using namespace std;
+using namespace odb::core;
+
+int
+main (int argc, char* argv[])
+{
+ try
+ {
+ auto_ptr<database> db (create_database (argc, argv));
+
+ {
+ person p1 ("John First", 91);
+ person p2 ("John Second", 81);
+ person p3 ("John Third", 71);
+ person p4 ("John Fourth", 61);
+ person p5 ("John Fifth", 51);
+
+ transaction t (db->begin ());
+ db->persist (p1);
+ db->persist (p2);
+ db->persist (p3);
+ db->persist (p4);
+ db->persist (p5);
+ t.commit ();
+ }
+
+ typedef odb::query<person> query;
+ typedef odb::prepared_query<person> prep_query;
+ typedef odb::result<person> result;
+
+ // Simple case: uncached query.
+ //
+ {
+ transaction t (db->begin ());
+
+ unsigned short age (90);
+ prep_query pq (
+ t.connection ().prepare_query<person> (
+ "person-age-query",
+ query::age > query::_ref (age)));
+
+ for (unsigned short i (1); i < 6; ++i, age -= 10)
+ {
+ result r (pq.execute ());
+ assert (size (r) == i);
+ }
+
+ t.commit ();
+ }
+ }
+ catch (const odb::exception& e)
+ {
+ cerr << e.what () << endl;
+ return 1;
+ }
+}