Commit 800c61fb by Konstantin Käfer

finalize the statement when the database was closed intermittently

parent 013d9ae3
......@@ -41,7 +41,7 @@ public:
ev_ref(EV_DEFAULT_UC);
callback = Persistent<Function>::New(cb_);
}
~Baton() {
virtual ~Baton() {
db->Unref();
ev_unref(EV_DEFAULT_UC);
callback.Dispose();
......
......@@ -132,8 +132,13 @@ public:
Baton(db_, cb_), stmt(stmt_) {
stmt->Ref();
}
~PrepareBaton() {
virtual ~PrepareBaton() {
stmt->Unref();
if (!db->open && db->locked) {
// The database handle was closed before the statement could be
// prepared.
stmt->Finalize();
}
}
};
......
var sqlite3 = require('sqlite3');
var assert = require('assert');
if (process.setMaxListeners) process.setMaxListeners(0);
exports['test scheduling a query after the database was closed'] = function(beforeExit) {
var error = false;
var db = new sqlite3.Database(':memory:');
db.on('error', function(err) {
error = true;
assert.equal(err.message, "SQLITE_MISUSE: Database handle is closed");
});
db.close();
db.run("CREATE TABLE foo (id int)");
beforeExit(function() {
assert.ok(error);
});
};
exports['test scheduling a query with callback after the database was closed'] = function(beforeExit) {
var error = false;
var errorEvent = false;
var db = new sqlite3.Database(':memory:');
db.on('error', function(err) {
errorEvent = true;
});
db.close();
db.run("CREATE TABLE foo (id int)", function(err) {
assert.ok(err.message, "SQLITE_MISUSE: Database handle is closed");
error = true;
});
beforeExit(function() {
assert.ok(error);
assert.ok(!errorEvent);
});
};
exports['test running a query after the database was closed'] = function(beforeExit) {
var error = false;
var db = new sqlite3.Database(':memory:');
db.on('error', function(err) {
error = true;
assert.equal(err.message, "SQLITE_BUSY: unable to close due to unfinalised statements");
});
var stmt = db.prepare("CREATE TABLE foo (id int)");
db.close();
stmt.run();
beforeExit(function() {
assert.ok(error);
});
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment