View difference between Paste ID: w5xGBgY7 and Js4L6DRX
SHOW: | | - or go back to the newest paste.
1
var sqlite3 = require("sqlite3"),
2
	_ = require("underscore"),
3
	slide = require("slide"),
4
	fs = require("fs");
5
6
var db;
7
8
function init(callback) {
9
	var self = this;
10
11-
	var file = "./transcation.sqlite3";
11+
	var file = "./async_transaction.sqlite3";
12
13-
	fs.unlink(file, function(e) {
13+
	db = new sqlite3.Database(
14
		file,
15
		sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
16-
		db = new sqlite3.Database(
16+
		function(err) {
17-
			file,
17+
			if (err) return callback(err);
18-
			sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
18+
			initDatabase(callback);
19
		}
20-
				if (err) return callback(err);
20+
21-
				initDatabase(callback);
21+
22
23
function initDatabase(callback) {
24
	db.exec(
25
		"CREATE TABLE IF NOT EXISTS data (" +
26
			"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
27
			"t TEXT NOT NULL" +
28
		");" +
29
		"DELETE FROM data;",
30
31
		callback
32-
		"); ",
32+
33
}
34
35
36
function insertData(callback) {
37
	// start a transaction
38
	db.exec("BEGIN;", function(err) {
39
		//console.log('insertData -> begin');
40
		// do multiple inserts
41
		slide.asyncMap(
42
			['all', 'your', 'base', 'are', 'belong', 'to', 'us'],
43
			function(item, cb) {
44
				db.run("INSERT INTO data (t) VALUES (?)", item, cb);
45
			},
46
			function(err) {
47
				// all done
48
				db.exec("ROLLBACK;", function(e) {
49
					//console.log('insertData -> commit');
50
					callback();
51
				});
52
			}
53
		);
54
	});
55
}
56
57
init(function() {
58
	// insert with transaction
59
	function doTransactionInsert(e) {
60
		if (e) return console.log(e);
61
		setTimeout(_.partial(insertData, doTransactionInsert), 10);
62
	}
63
	doTransactionInsert();
64
65
	// Insert increasing integers 0, 1, 2, ...
66
	var i=0;
67
	function doIntegerInsert() {
68
		//console.log('integer insert');
69
		db.exec("INSERT INTO data (t) VALUES ('"+(i++)+"')", function(e) {
70
			if (e) return console.log(e);
71
			setTimeout(doIntegerInsert, 9);
72
		});
73
	}
74
	doIntegerInsert();
75
76
	// Check if any inserted integer has disappeared.
77
	function checkConsistent() {
78
		db.all("SELECT * FROM data WHERE t-1 NOT IN (SELECT t FROM data)", function(err, rows) {
79
			for (var i=1; i<rows.length; ++i) { // skip first record - 0 has no predecessor
80
				var missingValue = rows[i].t-1;
81
				if (_.isNaN(missingValue))
82
					console.log("That shouldn't be here", rows[i].t);
83
				else
84
					console.log("Not consistent - missing "+missingValue);
85
			}
86
			console.log("------------");
87
		});
88
	}
89
	setInterval(checkConsistent, 2000);
90
	
91
92
});