-
Notifications
You must be signed in to change notification settings - Fork 46
/
sqlite3.js
102 lines (87 loc) · 2.26 KB
/
sqlite3.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
'use strict';
var Driver = require('../driver');
var Connection = require('../connection');
var sqlite3 = require('sqlite3').verbose();
var Sqlite3Connection = Connection.extend({
init: function (driver, db, createdConnection, opts) {
this._super(driver, opts);
this.db = db;
this.createdConnection = createdConnection;
},
close: function () {
if (this.createdConnection) {
this.db.close();
}
},
beginTransaction: function (callback) {
this._runSql("BEGIN TRANSACTION", callback);
},
commitTransaction: function (callback) {
this._runSql("COMMIT TRANSACTION", callback);
},
rollbackTransaction: function (callback) {
this._runSql("ROLLBACK TRANSACTION", callback);
},
_runSql2: function (sql, callback) {
this.db.run(sql, function (err) {
if (err) {
callback(err);
return;
}
callback(null, {});
});
},
_runSql3: function (sql, values, callback) {
var stmt = this.db.prepare(sql, function (err) {
if (err) {
callback(err);
return;
}
});
stmt.run(values, function (err) {
if (err) {
callback(err);
return;
}
callback(null, {
lastId: stmt.lastID,
changes: stmt.changes
});
});
stmt.finalize();
},
_runSqlAll: function (sql, params, callback) {
this.db.all(sql, params, callback);
},
_runSqlEach: function (sql, params, callback, doneCallback) {
this.db.each(sql, params, callback, doneCallback);
}
});
var Sqlite3Driver = Driver.extend({
init: function () {
this._super();
},
connect: function (opts, callback) {
var conn;
if (opts.db) {
conn = new Sqlite3Connection(this, opts.db, false);
callback(null, conn);
} else {
var filename = opts.filename;
if (!filename) { throw new Error("Sqlite3 driver requires 'filename'"); }
var trace = opts.trace;
var db = new sqlite3.Database(filename);
if (trace) {
db.on('trace', function (sql) {
console.log(sql);
});
}
conn = new Sqlite3Connection(this, db, true, opts);
callback(null, conn);
}
},
escapeColumnName: function (columnName) {
return '"' + columnName + '"';
}
});
module.exports = Sqlite3Driver;