test-sqlite3-session.nut 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. auto db = SQLite3("session.db");
  2. db.exec_dml("drop table if exists test;");
  3. db.exec_dml("create table if not exists test(id integer primary key, name text);");
  4. class MySQLite3Session
  5. {
  6. _db_src = null;
  7. _db2save = null;
  8. _dbsession = null;
  9. _dbfn2save = null;
  10. _stmt = null;
  11. MySQLite3Session(db, dbfn2save)
  12. {
  13. _db_src = db;
  14. _dbsession = SQLite3Session(db);
  15. _dbfn2save = dbfn2save;
  16. _newSession();
  17. _db2save = SQLite3(dbfn2save);
  18. _db2save.exec_dml("create table if not exists changesets(id integer primary key, day datetime not null default CURRENT_TIMESTAMP, changeset blob);");
  19. _stmt = _db2save.prepare("insert into changesets(changeset) values(?)");
  20. }
  21. function _newSession()
  22. {
  23. if(_dbsession) _dbsession.xdelete();
  24. _dbsession = SQLite3Session(_db_src);
  25. _dbsession.attach();
  26. }
  27. function save()
  28. {
  29. auto changeset = _dbsession.changeset();
  30. if(changeset && changeset.len())
  31. {
  32. _stmt.bind_blob(1, changeset);
  33. _stmt.step();
  34. _stmt.reset();
  35. _newSession();
  36. }
  37. return changeset;
  38. }
  39. function apply(db, cset)
  40. {
  41. return _dbsession.apply(db, cset);
  42. }
  43. }
  44. auto dbsession = new MySQLite3Session(db, "changeset.db");
  45. db.exec_dml("insert into test values(1, 'dad')");
  46. auto stmt = db.prepare("select * from test");
  47. while(stmt.next_row())
  48. {
  49. print(stmt.col(0), stmt.col(1));
  50. }
  51. auto changeset = dbsession.save();
  52. print(changeset.len());
  53. auto dbm = SQLite3(":memory:");
  54. dbm.exec_dml("drop table if exists test;");
  55. dbm.exec_dml("create table if not exists test(id integer primary key, name text);");
  56. dbsession.apply(dbm, changeset);
  57. auto stmtm = dbm.prepare("select * from test");
  58. while(stmtm.next_row())
  59. {
  60. print(stmtm.col(0), stmtm.col(1));
  61. }