aboutsummaryrefslogtreecommitdiff
path: root/qt/common/containers/driver.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-02-05 15:50:08 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-02-05 15:50:08 +0200
commit43fa55c1b8e389838c83be933bb30a2caaf7468d (patch)
tree310bc0ecc43ea38276a7e8ff2a541f2cba395333 /qt/common/containers/driver.cxx
parent3eee63801cbe833f6557d6f85c5778b6209140be (diff)
Add support for change-tracking containers
ODB now supports "smart" ordered containers. Such containers get extra functions for updating and deleting individual elements. Based on this functionality implement two change-tracking containers: odb::vector (equivalent to std::vector) and QOdbList (equivalent to QList). New tests: common/container/change-tracking and qt/common/container/change- tracking.
Diffstat (limited to 'qt/common/containers/driver.cxx')
-rw-r--r--qt/common/containers/driver.cxx570
1 files changed, 0 insertions, 570 deletions
diff --git a/qt/common/containers/driver.cxx b/qt/common/containers/driver.cxx
deleted file mode 100644
index 5de758c..0000000
--- a/qt/common/containers/driver.cxx
+++ /dev/null
@@ -1,570 +0,0 @@
-// file : qt/common/containers/driver.cxx
-// copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC
-// license : GNU GPL v2; see accompanying LICENSE file
-
-// Test Qt containers persistence.
-//
-
-#include <memory> // std::auto_ptr
-#include <cassert>
-#include <iostream>
-
-#include <QtCore/QCoreApplication>
-
-#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[])
-{
- QCoreApplication app (argc, argv);
-
- try
- {
- auto_ptr<database> db (create_database (argc, argv));
-
- for (unsigned short i (0); i < 2; ++i)
- {
- object empty ("empty"), med ("medium"), full ("full");
-
- //
- // empty
- //
-
- empty.num = 0;
- empty.str = "";
-
- //
- // med
- //
-
- med.num = 999;
- med.str = "xxx";
-
- // vector
- //
- med.nv.push_back (123);
- med.nv.push_back (234);
-
- med.sv.push_back ("aaa");
- med.sv.push_back ("bbbb");
-
- med.cv.push_back (comp (123, "aaa"));
- med.cv.push_back (comp (234, "bbbb"));
-
- med.uv.push_back (123);
- med.uv.push_back (234);
-
- // list
- //
- med.sl.push_back ("aaa");
- med.sl.push_back ("bbbb");
-
- med.nl.push_back (123);
- med.nl.push_back (234);
-
- med.cl.push_back (comp (123, "aaa"));
- med.cl.push_back (comp (234, "bbbb"));
-
- // linked list
- //
- med.sll.push_back ("aaa");
- med.sll.push_back ("bbbb");
-
- med.nll.push_back (123);
- med.nll.push_back (234);
-
- med.cll.push_back (comp (123, "aaa"));
- med.cll.push_back (comp (234, "bbbb"));
-
- // set
- //
- med.ns.insert (123);
- med.ns.insert (234);
-
- med.ss.insert ("aaa");
- med.ss.insert ("bbbb");
-
- // map
- //
- med.nsm[123] = "aaa";
- med.nsm[234] = "bbbb";
-
- med.snm["aaa"] = 123;
- med.snm["bbbb"] = 234;
-
- med.ncm[123] = comp (123, "aaa");
- med.ncm[234] = comp (234, "bbbb");
-
- med.csm[comp (123, "aaa")] = "aaa";
- med.csm[comp (234, "bbbb")] = "bbbb";
-
- // multimap
- //
- med.nsmm.insert (123, "aaa");
- med.nsmm.insert (123, "bbbb");
- med.nsmm.insert (234, "ccccc");
-
- med.snmm.insert ("aaa", 123);
- med.snmm.insert ("aaa", 234);
- med.snmm.insert ("bbb", 345);
-
- med.ncmm.insert (123, comp (123, "aaa"));
- med.ncmm.insert (123, comp (234, "bbbb"));
- med.ncmm.insert (234, comp (345, "ccccc"));
-
- // hash
- //
- med.nsh[123] = "aaa";
- med.nsh[234] = "bbbb";
-
- med.snh["aaa"] = 123;
- med.snh["bbb"] = 234;
-
- med.sch["iii"] = comp (123, "aaa");
- med.sch["jjj"] = comp (234, "bbbb");
-
- // multihash
- //
- med.nsmh.insert (123, "aaa");
- med.nsmh.insert (123, "bbbb");
- med.nsmh.insert (234, "ccccc");
-
- med.snmh.insert ("aaa", 123);
- med.snmh.insert ("aaa", 234);
- med.snmh.insert ("bbb", 345);
-
- med.ncmh.insert (123, comp (123, "aaa"));
- med.ncmh.insert (123, comp (234, "bbbb"));
- med.ncmh.insert (234, comp (345, "ccccc"));
-
- //
- // full
- //
-
- full.num = 9999;
- full.str = "xxxx";
-
- // vector
- //
- full.nv.push_back (1234);
- full.nv.push_back (2345);
- full.nv.push_back (3456);
-
- full.sv.push_back ("aaaa");
- full.sv.push_back ("bbbbb");
- full.sv.push_back ("cccccc");
-
- full.cv.push_back (comp (1234, "aaaa"));
- full.cv.push_back (comp (2345, "bbbbb"));
- full.cv.push_back (comp (3456, "cccccc"));
-
- full.uv.push_back (1234);
- full.uv.push_back (2345);
- full.uv.push_back (3456);
-
- // list
- //
- full.sl.push_back ("aaaa");
- full.sl.push_back ("bbbbb");
- full.sl.push_back ("cccccc");
-
- full.nl.push_back (1234);
- full.nl.push_back (2345);
- full.nl.push_back (3456);
-
- full.cl.push_back (comp (1234, "aaaa"));
- full.cl.push_back (comp (2345, "bbbbb"));
- full.cl.push_back (comp (3456, "cccccc"));
-
- // linked list
- //
- full.sll.push_back ("aaaa");
- full.sll.push_back ("bbbbb");
- full.sll.push_back ("cccccc");
-
- full.nll.push_back (1234);
- full.nll.push_back (2345);
- full.nll.push_back (3456);
-
- full.cll.push_back (comp (1234, "aaaa"));
- full.cll.push_back (comp (2345, "bbbbb"));
- full.cll.push_back (comp (3456, "cccccc"));
-
- // set
- //
- full.ns.insert (1234);
- full.ns.insert (2345);
- full.ns.insert (3456);
-
- full.ss.insert ("aaaa");
- full.ss.insert ("bbbbb");
- full.ss.insert ("cccccc");
-
- // map
- //
- full.nsm[1234] = "aaaa";
- full.nsm[2345] = "bbbbb";
- full.nsm[3456] = "cccccc";
-
- full.snm["aaaa"] = 1234;
- full.snm["bbbb"] = 2345;
- full.snm["cccc"] = 3456;
-
- full.ncm[1234] = comp (1234, "aaaa");
- full.ncm[2345] = comp (2345, "bbbbb");
- full.ncm[3456] = comp (3456, "cccccc");
-
- full.csm[comp (1234, "aaaa")] = "aaaa";
- full.csm[comp (2345, "bbbb")] = "bbbbb";
- full.csm[comp (3456, "cccc")] = "cccccc";
-
- // multimap
- //
- full.nsmm.insert (1234, "aaaa");
- full.nsmm.insert (1234, "bbbbb");
- full.nsmm.insert (2345, "cccccc");
- full.nsmm.insert (2345, "ddddddd");
-
- full.snmm.insert ("aaaa", 1234);
- full.snmm.insert ("aaaa", 2345);
- full.snmm.insert ("bbbb", 3456);
- full.snmm.insert ("bbbb", 4567);
-
- full.ncmm.insert (1234, comp (1234, "aaaa"));
- full.ncmm.insert (1234, comp (2345, "bbbbb"));
- full.ncmm.insert (2345, comp (3456, "cccccc"));
- full.ncmm.insert (2345, comp (4567, "ddddddd"));
-
- // hash
- //
- full.nsh[1234] = "aaaa";
- full.nsh[2345] = "bbbbb";
- full.nsh[3456] = "cccccc";
-
- full.snh["aaaa"] = 1234;
- full.snh["bbbb"] = 2345;
- full.snh["cccc"] = 3456;
-
- full.sch["iiii"] = comp (1234, "aaaa");
- full.sch["jjjj"] = comp (2345, "bbbbb");
- full.sch["kkkk"] = comp (3456, "cccccc");
-
- // multihash
- //
- full.nsmh.insert (1234, "aaaa");
- full.nsmh.insert (1234, "bbbbb");
- full.nsmh.insert (2345, "cccccc");
- full.nsmh.insert (2345, "ddddddd");
-
- full.snmh.insert ("aaaa", 1234);
- full.snmh.insert ("aaaa", 2345);
- full.snmh.insert ("bbbb", 3456);
- full.snmh.insert ("bbbb", 4567);
-
- full.ncmh.insert (1234, comp (1234, "aaaa"));
- full.ncmh.insert (1234, comp (2345, "bbbbb"));
- full.ncmh.insert (2345, comp (3456, "cccccc"));
- full.ncmh.insert (2345, comp (4567, "ddddddd"));
-
- // persist
- //
- {
- transaction t (db->begin ());
- db->persist (empty);
- db->persist (med);
- db->persist (full);
- t.commit ();
- }
-
- // load & check
- //
- {
- transaction t (db->begin ());
- auto_ptr<object> e (db->load<object> ("empty"));
- auto_ptr<object> m (db->load<object> ("medium"));
- auto_ptr<object> f (db->load<object> ("full"));
- t.commit ();
-
- assert (empty == *e);
- assert (med == *m);
- assert (full == *f);
- }
-
- //
- // empty
- //
-
- empty.num = 99;
- empty.str = "xx";
-
- // vector
- //
- empty.nv.push_back (12);
- empty.sv.push_back ("aa");
- empty.cv.push_back (comp (12, "aa"));
- empty.uv.push_back (12);
-
- // list
- //
- empty.sl.push_back ("aa");
- empty.nl.push_back (12);
- empty.cl.push_back (comp (12, "aa"));
-
- // linked list
- //
- empty.nll.push_back (12);
- empty.sll.push_back ("aa");
- empty.cll.push_back (comp (12, "aa"));
-
- // set
- //
- empty.ns.insert (12);
- empty.ss.insert ("aa");
-
- // map
- //
- empty.nsm[12] = "aa";
- empty.snm["aa"] = 12;
- empty.ncm[12] = comp (12, "aa");
- empty.csm[comp (12, "aa")] = "aa";
-
- // multimap
- //
- empty.nsmm.insert (12, "aa");
- empty.nsmm.insert (12, "bbb");
- empty.nsmm.insert (23, "cccc");
- empty.snmm.insert ("aa", 12);
- empty.snmm.insert ("aa", 23);
- empty.snmm.insert ("bb", 34);
- empty.ncmm.insert (12, comp (12, "aa"));
- empty.ncmm.insert (12, comp (23, "bb"));
- empty.ncmm.insert (23, comp (34, "cc"));
-
- // hash
- //
- empty.nsh[12] = "aa";
- empty.snh["aa"] = 12;
- empty.sch["ii"] = comp (12, "aa");
-
- // multihash
- //
- empty.nsmh.insert (12, "aa");
- empty.nsmh.insert (12, "bbb");
- empty.nsmh.insert (23, "cccc");
- empty.snmh.insert ("aa", 12);
- empty.snmh.insert ("aa", 23);
- empty.snmh.insert ("bb", 34);
- empty.ncmh.insert (12, comp (12, "aa"));
- empty.ncmh.insert (12, comp (23, "bb"));
- empty.ncmh.insert (23, comp (34, "cc"));
-
- //
- // med
- //
-
- med.num = 0;
- med.str = "";
-
- // vector
- //
- med.nv.clear ();
- med.sv.clear ();
- med.cv.clear ();
- med.uv.clear ();
-
- // list
- //
- med.sl.clear ();
- med.nl.clear ();
- med.cl.clear ();
-
- // linked list
- //
- med.nll.clear ();
- med.sll.clear ();
- med.cll.clear ();
-
- // set
- //
- med.ns.clear ();
- med.ss.clear ();
-
- // map
- //
- med.nsm.clear ();
- med.snm.clear ();
- med.ncm.clear ();
- med.csm.clear ();
-
- // multimap
- //
- med.nsmm.clear ();
- med.snmm.clear ();
- med.ncmm.clear ();
-
- // hash
- //
- med.nsh.clear ();
- med.snh.clear ();
- med.sch.clear ();
-
- // multihash
- //
- med.nsmh.clear ();
- med.snmh.clear ();
- med.ncmh.clear ();
-
-
- //
- // full
- //
-
- full.num++;
- full.str += "x";
-
- // vector
- //
- full.nv.back ()++;
- full.nv.push_back (4567);
-
- full.sv.back () += "c";
- full.sv.push_back ("ddddddd");
-
- full.cv.back ().num++;
- full.cv.back ().str += "c";
- full.cv.push_back (comp (4567, "ddddddd"));
-
- full.uv.back ()++;
- full.uv.push_back (4567);
-
- // list
- //
- full.sl.back () += "c";
- full.sl.push_back ("ddddddd");
-
- full.nl.back ()++;
- full.nl.push_back (4567);
-
- full.cl.back ().num++;
- full.cl.back ().str += "c";
- full.cl.push_back (comp (4567, "ddddddd"));
-
- // linked list
- //
- full.sll.back () += "c";
- full.sll.push_back ("ddddddd");
-
- full.nll.back ()++;
- full.nll.push_back (4567);
-
- full.cll.back ().num++;
- full.cll.back ().str += "c";
- full.cll.push_back (comp (4567, "ddddddd"));
-
- // set
- //
- full.ns.insert (4567);
- full.ss.insert ("ddddddd");
-
- // map
- //
- full.nsm[3456] += "c";
- full.nsm[4567] = "ddddddd";
-
- full.snm["cccc"]++;
- full.snm["dddd"] = 4567;
-
- full.ncm[3456].num++;
- full.ncm[3456].str += "c";
- full.ncm[4567] = comp (4567, "ddddddd");
-
- full.csm[comp (3456, "cccc")] += "c";
- full.csm[comp (4567, "dddd")] = "ddddddd";
-
- // multimap
- //
- full.nsmm.find (2345).value () += "d";
- full.nsmm.insert (3456, "eeeeeeee");
-
- full.snmm.find ("bbbb").value ()++;
- full.snmm.insert ("cccc", 5678);
-
- full.ncmm.find (1234).value ().num++;
- full.ncmm.find (2345).value ().str += "d";
- full.ncmm.insert (3456, comp (5678, "eeeeeeee"));
-
- // hash
- //
- full.nsh[3456] += "c";
- full.nsh[4567] = "ddddddd";
-
- full.snh["cccc"]++;
- full.snh["dddd"] = 4567;
-
- full.sch["iiii"].num++;
- full.sch["jjjj"].str += "b";
- full.sch["kkkk"] = comp (4567, "dddddddd");
-
- // multihash
- //
- full.nsmh.find (2345).value () += "d";
- full.nsmh.insert (3456, "eeeeeeee");
-
- full.snmh.find ("bbbb").value ()++;
- full.snmh.insert ("cccc", 5678);
-
- full.ncmh.find (1234).value ().num++;
- full.ncmh.find (2345).value ().str += "d";
- full.ncmh.insert (3456, comp (5678, "eeeeeeee"));
-
- // update
- //
- {
- transaction t (db->begin ());
- db->update (empty);
- db->update (med);
- db->update (full);
- t.commit ();
- }
-
- // load & check
- //
- {
- transaction t (db->begin ());
- auto_ptr<object> e (db->load<object> ("empty"));
- auto_ptr<object> m (db->load<object> ("medium"));
- auto_ptr<object> f (db->load<object> ("full"));
- t.commit ();
-
- assert (empty == *e);
- assert (med == *m);
- assert (full == *f);
- }
-
- // erase
- //
- if (i == 0)
- {
- transaction t (db->begin ());
- db->erase<object> ("empty");
- db->erase<object> ("medium");
- db->erase<object> ("full");
- t.commit ();
- }
- }
- }
- catch (const odb::exception& e)
- {
- cerr << e.what () << endl;
- return 1;
- }
-}