From 11323329de3b9385b21963308b9489846067b45c Mon Sep 17 00:00:00 2001 From: Guenter Sandner Date: Wed, 19 Sep 2018 10:37:36 +0200 Subject: [PATCH 1/9] add constants for file open --- src/node_sqlite3.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/node_sqlite3.cc b/src/node_sqlite3.cc index 64326f784..9c3007005 100644 --- a/src/node_sqlite3.cc +++ b/src/node_sqlite3.cc @@ -22,6 +22,9 @@ NAN_MODULE_INIT(RegisterModule) { DEFINE_CONSTANT_INTEGER(target, SQLITE_OPEN_READWRITE, OPEN_READWRITE); DEFINE_CONSTANT_INTEGER(target, SQLITE_OPEN_CREATE, OPEN_CREATE); DEFINE_CONSTANT_INTEGER(target, SQLITE_OPEN_FULLMUTEX, OPEN_FULLMUTEX); + DEFINE_CONSTANT_INTEGER(target, SQLITE_OPEN_URI, OPEN_URI); + DEFINE_CONSTANT_INTEGER(target, SQLITE_OPEN_SHAREDCACHE, OPEN_SHAREDCACHE); + DEFINE_CONSTANT_INTEGER(target, SQLITE_OPEN_PRIVATECACHE, OPEN_PRIVATECACHE); DEFINE_CONSTANT_STRING(target, SQLITE_VERSION, VERSION); #ifdef SQLITE_SOURCE_ID DEFINE_CONSTANT_STRING(target, SQLITE_SOURCE_ID, SOURCE_ID); From d47af2da2dcbec6c49839a99d67f68d9751c03b6 Mon Sep 17 00:00:00 2001 From: Kewde Date: Tue, 4 Dec 2018 03:03:36 +0000 Subject: [PATCH 2/9] add test for shared database --- test/shared.test.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 test/shared.test.js diff --git a/test/shared.test.js b/test/shared.test.js new file mode 100644 index 000000000..13ff44a16 --- /dev/null +++ b/test/shared.test.js @@ -0,0 +1,39 @@ +var sqlite3 = require('..'); +var assert = require('assert'); +var fs = require('fs'); + +describe('exec', function() { + var db; + before(function(done) { + db = new sqlite3.Database(':memory:',sqlite3.OPEN_SHAREDCACHE,done); + }); + + it('Database#exec', function(done) { + var sql = fs.readFileSync('test/support/script.sql', 'utf8'); + db.exec(sql, done); + }); + + it('retrieve database structure', function(done) { + db.all("SELECT type, name FROM sqlite_master ORDER BY type, name", function(err, rows) { + if (err) throw err; + assert.deepEqual(rows, [ + { type: 'index', name: 'grid_key_lookup' }, + { type: 'index', name: 'grid_utfgrid_lookup' }, + { type: 'index', name: 'images_id' }, + { type: 'index', name: 'keymap_lookup' }, + { type: 'index', name: 'map_index' }, + { type: 'index', name: 'name' }, + { type: 'table', name: 'grid_key' }, + { type: 'table', name: 'grid_utfgrid' }, + { type: 'table', name: 'images' }, + { type: 'table', name: 'keymap' }, + { type: 'table', name: 'map' }, + { type: 'table', name: 'metadata' }, + { type: 'view', name: 'grid_data' }, + { type: 'view', name: 'grids' }, + { type: 'view', name: 'tiles' } + ]); + done(); + }); + }); +}); From fe230c5633d5cb41a65e755202747082360adb57 Mon Sep 17 00:00:00 2001 From: Kewde Date: Tue, 4 Dec 2018 03:11:51 +0000 Subject: [PATCH 3/9] update naming on shared test --- test/shared.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/shared.test.js b/test/shared.test.js index 13ff44a16..2411dfc02 100644 --- a/test/shared.test.js +++ b/test/shared.test.js @@ -2,7 +2,7 @@ var sqlite3 = require('..'); var assert = require('assert'); var fs = require('fs'); -describe('exec', function() { +describe('exec shared', function() { var db; before(function(done) { db = new sqlite3.Database(':memory:',sqlite3.OPEN_SHAREDCACHE,done); From a5fbefd054bd1827fc1259fa4c89ea8183eba66c Mon Sep 17 00:00:00 2001 From: Kewde Date: Wed, 5 Dec 2018 15:50:53 +0000 Subject: [PATCH 4/9] Delete shared test --- test/shared.test.js | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 test/shared.test.js diff --git a/test/shared.test.js b/test/shared.test.js deleted file mode 100644 index 2411dfc02..000000000 --- a/test/shared.test.js +++ /dev/null @@ -1,39 +0,0 @@ -var sqlite3 = require('..'); -var assert = require('assert'); -var fs = require('fs'); - -describe('exec shared', function() { - var db; - before(function(done) { - db = new sqlite3.Database(':memory:',sqlite3.OPEN_SHAREDCACHE,done); - }); - - it('Database#exec', function(done) { - var sql = fs.readFileSync('test/support/script.sql', 'utf8'); - db.exec(sql, done); - }); - - it('retrieve database structure', function(done) { - db.all("SELECT type, name FROM sqlite_master ORDER BY type, name", function(err, rows) { - if (err) throw err; - assert.deepEqual(rows, [ - { type: 'index', name: 'grid_key_lookup' }, - { type: 'index', name: 'grid_utfgrid_lookup' }, - { type: 'index', name: 'images_id' }, - { type: 'index', name: 'keymap_lookup' }, - { type: 'index', name: 'map_index' }, - { type: 'index', name: 'name' }, - { type: 'table', name: 'grid_key' }, - { type: 'table', name: 'grid_utfgrid' }, - { type: 'table', name: 'images' }, - { type: 'table', name: 'keymap' }, - { type: 'table', name: 'map' }, - { type: 'table', name: 'metadata' }, - { type: 'view', name: 'grid_data' }, - { type: 'view', name: 'grids' }, - { type: 'view', name: 'tiles' } - ]); - done(); - }); - }); -}); From 202077845f8fb288f79eff4109d6fee489bdf30e Mon Sep 17 00:00:00 2001 From: Kewde Date: Wed, 5 Dec 2018 15:52:51 +0000 Subject: [PATCH 5/9] Add open / close for sharedcache database --- test/open_close.test.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/open_close.test.js b/test/open_close.test.js index 649e21789..021ff2a86 100644 --- a/test/open_close.test.js +++ b/test/open_close.test.js @@ -30,6 +30,29 @@ describe('open/close', function() { helper.deleteFile('test/tmp/test_create.db'); }); }); + + describe('open and close non-existant shared database', function() { + before(function() { + helper.deleteFile('test/tmp/test_create_shared.db'); + }); + + var db; + it('should open the database', function(done) { + db = new sqlite3.Database('test/tmp/test_create_shared.db',sqlite3.OPEN_SHAREDCACHE|sqlite3.SQLITE_OPEN_MEMORY, done); + }); + + it('should close the database', function(done) { + db.close(done); + }); + + it('should have created the file', function() { + assert.fileExists('test/tmp/test_create_shared.db'); + }); + + after(function() { + helper.deleteFile('test/tmp/test_create_shared.db'); + }); + }); it('should not be unable to open an inaccessible database', function(done) { // NOTE: test assumes that the user is not allowed to create new files From 8b817e1e813c1b60bf5addaf6f67345750a4b5d6 Mon Sep 17 00:00:00 2001 From: Kewde Date: Wed, 5 Dec 2018 16:14:13 +0000 Subject: [PATCH 6/9] try removing sqlite3.SQLITE_OPEN_MEMORY --- test/open_close.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/open_close.test.js b/test/open_close.test.js index 021ff2a86..e91eef0a8 100644 --- a/test/open_close.test.js +++ b/test/open_close.test.js @@ -38,7 +38,7 @@ describe('open/close', function() { var db; it('should open the database', function(done) { - db = new sqlite3.Database('test/tmp/test_create_shared.db',sqlite3.OPEN_SHAREDCACHE|sqlite3.SQLITE_OPEN_MEMORY, done); + db = new sqlite3.Database('test/tmp/test_create_shared.db',sqlite3.OPEN_SHAREDCACHE, done); }); it('should close the database', function(done) { From 5f3a351cc15784f1cef9ac502a51db0913f84e5a Mon Sep 17 00:00:00 2001 From: Guenter Sandner Date: Sun, 9 Dec 2018 18:39:49 +0100 Subject: [PATCH 7/9] Add open/close for sharedcache memory database --- test/open_close.test.js | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/test/open_close.test.js b/test/open_close.test.js index e91eef0a8..da88561f7 100644 --- a/test/open_close.test.js +++ b/test/open_close.test.js @@ -38,7 +38,7 @@ describe('open/close', function() { var db; it('should open the database', function(done) { - db = new sqlite3.Database('test/tmp/test_create_shared.db',sqlite3.OPEN_SHAREDCACHE, done); + db = new sqlite3.Database('file:./test/tmp/test_create_shared.db', sqlite3.OPEN_URI | sqlite3.OPEN_SHAREDCACHE | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, done); }); it('should close the database', function(done) { @@ -54,6 +54,41 @@ describe('open/close', function() { }); }); + + describe('open and close shared memory database', function() { + + var db1; + var db2; + + it('should open the first database', function(done) { + db1 = new sqlite3.Database('file:./test/tmp/test_memory.db?mode=memory', sqlite3.OPEN_URI | sqlite3.OPEN_SHAREDCACHE | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, done); + }); + + it('should open the second database', function(done) { + db2 = new sqlite3.Database('file:./test/tmp/test_memory.db?mode=memory', sqlite3.OPEN_URI | sqlite3.OPEN_SHAREDCACHE | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, done); + }); + + it('first database should set the user_version', function(done) { + db1.exec('PRAGMA user_version=42', done); + }); + + it('second database should get the user_version', function(done) { + db2.get('PRAGMA user_version', function(err, row) { + if (err) throw err; + assert.equal(row.user_version, 42); + done(); + }); + }); + + it('should close the first database', function(done) { + db1.close(done); + }); + + it('should close the second database', function(done) { + db2.close(done); + }); + }); + it('should not be unable to open an inaccessible database', function(done) { // NOTE: test assumes that the user is not allowed to create new files // in /usr/bin. From b1c356149847b8225b37404799f48aecaf3e8196 Mon Sep 17 00:00:00 2001 From: Guenter Sandner Date: Sun, 9 Dec 2018 18:40:23 +0100 Subject: [PATCH 8/9] Add test for OPEN_URI, OPEN_SHAREDCACHE and OPEN_PRIVATECACHE --- test/constants.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/constants.test.js b/test/constants.test.js index fc9ebf4d7..7e1affdda 100644 --- a/test/constants.test.js +++ b/test/constants.test.js @@ -6,7 +6,10 @@ describe('constants', function() { assert.ok(sqlite3.OPEN_READONLY === 1); assert.ok(sqlite3.OPEN_READWRITE === 2); assert.ok(sqlite3.OPEN_CREATE === 4); + assert.ok(sqlite3.OPEN_URI === 0x00000040); assert.ok(sqlite3.OPEN_FULLMUTEX === 0x00010000); + assert.ok(sqlite3.OPEN_SHAREDCACHE === 0x00020000); + assert.ok(sqlite3.OPEN_PRIVATECACHE === 0x00040000); }); it('should have the right error flags', function() { From 802afaf2e8dbe5b858c05677e85a16417ed61418 Mon Sep 17 00:00:00 2001 From: Guenter Sandner Date: Mon, 10 Dec 2018 20:18:11 +0100 Subject: [PATCH 9/9] test shared memory database on sqlite version >= 3.8 only --- test/open_close.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/open_close.test.js b/test/open_close.test.js index da88561f7..49d2af791 100644 --- a/test/open_close.test.js +++ b/test/open_close.test.js @@ -55,7 +55,7 @@ describe('open/close', function() { }); - describe('open and close shared memory database', function() { + (sqlite3.VERSION_NUMBER < 3008000 ? describe.skip : describe)('open and close shared memory database', function() { var db1; var db2;