Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var sqlite3 = require("sqlite3"),
- _ = require("underscore"),
- slide = require("slide"),
- fs = require("fs");
- var db;
- function init(callback) {
- var self = this;
- var file = "./async_transaction.sqlite3";
- db = new sqlite3.Database(
- file,
- sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
- function(err) {
- if (err) return callback(err);
- initDatabase(callback);
- }
- );
- }
- function initDatabase(callback) {
- db.exec(
- "CREATE TABLE IF NOT EXISTS data (" +
- "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
- "t TEXT NOT NULL" +
- ");" +
- "DELETE FROM data;",
- callback
- );
- }
- function insertData(callback) {
- // start a transaction
- db.exec("BEGIN;", function(err) {
- //console.log('insertData -> begin');
- // do multiple inserts
- slide.asyncMap(
- ['all', 'your', 'base', 'are', 'belong', 'to', 'us'],
- function(item, cb) {
- db.run("INSERT INTO data (t) VALUES (?)", item, cb);
- },
- function(err) {
- // all done
- db.exec("ROLLBACK;", function(e) {
- //console.log('insertData -> commit');
- callback();
- });
- }
- );
- });
- }
- init(function() {
- // insert with transaction
- function doTransactionInsert(e) {
- if (e) return console.log(e);
- setTimeout(_.partial(insertData, doTransactionInsert), 10);
- }
- doTransactionInsert();
- // Insert increasing integers 0, 1, 2, ...
- var i=0;
- function doIntegerInsert() {
- //console.log('integer insert');
- db.exec("INSERT INTO data (t) VALUES ('"+(i++)+"')", function(e) {
- if (e) return console.log(e);
- setTimeout(doIntegerInsert, 9);
- });
- }
- doIntegerInsert();
- // Check if any inserted integer has disappeared.
- function checkConsistent() {
- db.all("SELECT * FROM data WHERE t-1 NOT IN (SELECT t FROM data)", function(err, rows) {
- for (var i=1; i<rows.length; ++i) { // skip first record - 0 has no predecessor
- var missingValue = rows[i].t-1;
- if (_.isNaN(missingValue))
- console.log("That shouldn't be here", rows[i].t);
- else
- console.log("Not consistent - missing "+missingValue);
- }
- console.log("------------");
- });
- }
- setInterval(checkConsistent, 2000);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement