#include "dba/dba.h"
#include <iostream>
class Foo : public dba::Storeable {
DECLARE_STORE_TABLE();
public:
int mIntVal;
};
BEGIN_STORE_TABLE(Foo, dba::Storeable, "foo_table")
BIND_INT(Foo::mIntVal,dba::Int,"intval")
END_STORE_TABLE()
const char* counter_create =
"CREATE TABLE debea_object_count ("
" id INT"
")";
const char* counter_init =
"INSERT INTO debea_object_count VALUES (1)";
const char* foo_create =
"CREATE TABLE foo_table ("
" id INT PRIMARY KEY,"
" intval INT"
")";
void
storeFoo(dba::SharedSQLArchive& pAr) {
{
dba::Transaction t(pAr.createTransaction());
dba::SQLOStream ostream = t.getOStream();
ostream.open();
Foo b;
b.mIntVal = 7;
ostream.put(&b);
std::cout << "Foo was stored with id = "
<< b.getId() << std::endl;
Foo loaded;
dba::SQLIStream istream = t.getIStream();
if (!istream.get(&loaded)) {
std::cerr << "Fatal error loading just stored object"
<< std::endl;
return;
};
std::cout << "loaded Foo id=" << loaded.getId() <<
",intval: " << loaded.mIntVal << std::endl;
t.rollback();
};
std::auto_ptr<dba::DbResult> res(pAr.getIStream().sendQuery(
"SELECT id, intval FROM foo_table"
));
if (res->fetchRow()) {
std::cerr << "Fatal error: there should be no objects "
"after transaction is rolled back" << std::endl;
} else {
std::cout << "No objects in database, "
"transaction was rolled back" << std::endl;
};
};
int
main (int argc, char** argv) {
try {
dba::SharedSQLArchive ar;
ar.setIdFetcher(new dba::GenericFetcher());
unlink("foobasefile.sqt3");
ar.open("dbasqlite3-static", "dbname=foobasefile.sqt3");
ar.getOStream().sendUpdate(counter_create);
ar.getOStream().sendUpdate(counter_init);
ar.getOStream().sendUpdate(foo_create);
storeFoo(ar);
return 0;
} catch (const dba::SQLException& pEx) {
std::cout << "SQL Error: " << pEx.what() << std::endl;
std::cout << "While executing: " << std::endl
<< pEx.getQuery() << std::endl;
} catch (const dba::Exception& pEx) {
std::cout << "Error: " << pEx.what() << std::endl;
return -1;
};
};