| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- auto db = SQLite3("session.db");
- db.exec_dml("drop table if exists test;");
- db.exec_dml("create table if not exists test(id integer primary key, name text);");
- class MySQLite3Session
- {
- _db_src = null;
- _db2save = null;
- _dbsession = null;
- _dbfn2save = null;
- _stmt = null;
-
- MySQLite3Session(db, dbfn2save)
- {
- _db_src = db;
- _dbsession = SQLite3Session(db);
- _dbfn2save = dbfn2save;
- _newSession();
- _db2save = SQLite3(dbfn2save);
- _db2save.exec_dml("create table if not exists changesets(id integer primary key, day datetime not null default CURRENT_TIMESTAMP, changeset blob);");
- _stmt = _db2save.prepare("insert into changesets(changeset) values(?)");
- }
- function _newSession()
- {
- if(_dbsession) _dbsession.xdelete();
- _dbsession = SQLite3Session(_db_src);
- _dbsession.attach();
- }
-
- function save()
- {
- auto changeset = _dbsession.changeset();
- if(changeset && changeset.len())
- {
- _stmt.bind_blob(1, changeset);
- _stmt.step();
- _stmt.reset();
- _newSession();
- }
- return changeset;
- }
-
- function apply(db, cset)
- {
- return _dbsession.apply(db, cset);
- }
- }
- auto dbsession = new MySQLite3Session(db, "changeset.db");
- db.exec_dml("insert into test values(1, 'dad')");
- auto stmt = db.prepare("select * from test");
- while(stmt.next_row())
- {
- print(stmt.col(0), stmt.col(1));
- }
- auto changeset = dbsession.save();
- print(changeset.len());
- auto dbm = SQLite3(":memory:");
- dbm.exec_dml("drop table if exists test;");
- dbm.exec_dml("create table if not exists test(id integer primary key, name text);");
- dbsession.apply(dbm, changeset);
- auto stmtm = dbm.prepare("select * from test");
- while(stmtm.next_row())
- {
- print(stmtm.col(0), stmtm.col(1));
- }
|