void run() { /* * Setup a session, would typically be done once at application startup. */ std::unique_ptr<dbo::backend::Sqlite3> sqlite3(new dbo::backend::Sqlite3(":memory:")); sqlite3->setProperty("show-queries", "true"); dbo::Session session; session.setConnection(std::move(sqlite3)); session.mapClass<GeoTag>("geotag"); /* * Try to create the schema (will fail if already exists). */ session.createTables(); { dbo::Transaction transaction(session); std::unique_ptr<GeoTag> tag{new GeoTag()}; tag->position = Coordinate(5091, 315); tag->name = "Oekene"; dbo::ptr<GeoTag> tagPtr = session.add(std::move(tag)); transaction.commit(); std::cerr << tagPtr.id() << std::endl; } }
void run() { /* * Setup a session, would typically be done once at application startup. */ dbo::backend::Sqlite3 sqlite3(":memory:"); sqlite3.setProperty("show-queries", "true"); dbo::Session session; session.setConnection(sqlite3); session.mapClass<User>("user"); session.mapClass<Post>("post"); session.mapClass<Tag>("tag"); /* * Try to create the schema (will fail if already exists). */ session.createTables(); { dbo::Transaction transaction(session); User *user = new User(); user->userId = "007"; user->name = "Joe"; user->password = "******"; user->role = User::Visitor; user->karma = 13; dbo::ptr<User> userPtr = session.add(user); } dbo::ptr<Post> post; { dbo::Transaction transaction(session); dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); post = session.add(new Post()); post.modify()->user = joe; // will print 'Joe has 1 post(s).' std::cerr << "Joe has " << joe->posts.size() << " post(s)." << std::endl; } { dbo::Transaction transaction(session); dbo::ptr<Tag> cooking = session.add(new Tag()); cooking.modify()->name = "Cooking"; post.modify()->tags.insert(cooking); // will print '1 post(s) tagged with Cooking.' std::cerr << cooking->posts.size() << " post(s) tagged with Cooking." << std::endl; } }
void run() { /***** * Dbo tutorial section 3. A first session *****/ /* * Setup a session, would typically be done once at application startup. * * For testing, we'll be using Sqlite3's special :memory: database. You * can replace this with an actual filename for actual persistence. */ dbo::backend::Sqlite3 sqlite3(":memory:"); sqlite3.setProperty("show-queries", "true"); dbo::Session session; session.setConnection(sqlite3); session.mapClass<User>("user"); /* * Try to create the schema (will fail if already exists). */ session.createTables(); { dbo::Transaction transaction(session); User *user = new User(); user->name = "Joe"; user->password = "******"; user->role = User::Visitor; user->karma = 13; dbo::ptr<User> userPtr = session.add(user); } /***** * Dbo tutorial section 4. Querying objects *****/ { dbo::Transaction transaction(session); dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); std::cerr << "Joe has karma: " << joe->karma << std::endl; dbo::ptr<User> joe2 = session.query< dbo::ptr<User> > ("select u from user u").where("name = ?").bind("Joe"); } { dbo::Transaction transaction(session); typedef dbo::collection< dbo::ptr<User> > Users; Users users = session.find<User>(); std::cerr << "We have " << users.size() << " users:" << std::endl; for (Users::const_iterator i = users.begin(); i != users.end(); ++i) std::cerr << " user " << (*i)->name << " with karma of " << (*i)->karma << std::endl; } /***** * Dbo tutorial section 5. Updating objects *****/ { dbo::Transaction transaction(session); dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); joe.modify()->karma++; joe.modify()->password = "******"; } { dbo::Transaction transaction(session); dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe"); if (joe) joe.remove(); } { dbo::Transaction transaction(session); dbo::ptr<User> silly = session.add(new User()); silly.modify()->name = "Silly"; silly.remove(); } }