#undef NDEBUG #include"Sqlite3/Db.hpp" #include"Sqlite3/Tx.hpp" #include"Ev/Io.hpp" #include"Ev/concurrent.hpp" #include"Ev/start.hpp" #include"Ev/yield.hpp" #include #include int main() { auto db = Sqlite3::Db(":memory:"); auto empty_transaction = [&]() { return db.transact().then([&](Sqlite3::Tx tx) { tx.commit(); return Ev::lift(); }); }; auto code = Ev::lift().then([&]() { return db.transact(); }).then([&](Sqlite3::Tx tx) { assert(tx); tx.commit(); assert(!tx); return db.transact(); }).then([&](Sqlite3::Tx tx) { assert(tx); tx.rollback(); assert(!tx); /* Test concurrency. */ return Ev::concurrent(empty_transaction()); }).then([&]() { return Ev::concurrent(empty_transaction()); }).then([&]() { return Ev::concurrent(empty_transaction()); }).then([&]() { return Ev::yield(); }).then([&]() { /* Test simple interface. */ return db.transact(); }).then([&](Sqlite3::Tx tx) { tx.query_execute("CREATE TABLE \"foo\" (c1 INTEGER, c2 TEXT);"); return Ev::lift(0); }); return Ev::start(code); }