Skip to content

Commit 674ce6b

Browse files
committed
support the SQLITE_USE_URI environment variable
1 parent ed7c7b9 commit 674ce6b

File tree

7 files changed

+24
-6
lines changed

7 files changed

+24
-6
lines changed

lib/database.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ function Database(filenameGiven, options) {
6161
}
6262

6363
// Make sure the specified directory exists
64-
if (!anonymous && !fs.existsSync(path.dirname(filename))) {
64+
if (!anonymous && !filename.startsWith('file:') && !fs.existsSync(path.dirname(filename))) {
6565
throw new TypeError('Cannot open database because the directory does not exist');
6666
}
6767

src/addon.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ struct Addon {
1515
return next_id++;
1616
}
1717

18+
static void ConfigureURI() {
19+
static std::once_flag init_flag;
20+
std::call_once(init_flag, [](){
21+
const char* env = getenv("SQLITE_USE_URI");
22+
if (env != NULL) {
23+
if (strcmp(env, "1") == 0) {
24+
int status = sqlite3_config(SQLITE_CONFIG_URI, 1);
25+
assert(status == SQLITE_OK); ((void)status);
26+
} else if (strcmp(env, "0") == 0) {
27+
int status = sqlite3_config(SQLITE_CONFIG_URI, 0);
28+
assert(status == SQLITE_OK); ((void)status);
29+
}
30+
}
31+
});
32+
}
33+
1834
static NODE_METHOD(JS_setErrorConstructor) {
1935
REQUIRE_ARGUMENT_FUNCTION(first, v8::Local<v8::Function> SqliteError);
2036
OnlyAddon->SqliteError.Reset(OnlyIsolate, SqliteError);

src/better_sqlite3.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <set>
77
#include <unordered_map>
88
#include <algorithm>
9+
#include <mutex>
910
#include <sqlite3.h>
1011
#include <node.h>
1112
#include <node_object_wrap.h>
@@ -47,6 +48,7 @@ class Backup;
4748
NODE_MODULE_INIT(/* exports, context */) {
4849
v8::Isolate* isolate = context->GetIsolate();
4950
v8::HandleScope scope(isolate);
51+
Addon::ConfigureURI();
5052

5153
// Initialize addon instance.
5254
Addon* addon = new Addon(isolate);

src/objects/database.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@ NODE_METHOD(Database::JS_new) {
173173
sqlite3_limit(db_handle, SQLITE_LIMIT_LENGTH, MAX_BUFFER_SIZE < MAX_STRING_SIZE ? MAX_BUFFER_SIZE : MAX_STRING_SIZE);
174174
sqlite3_limit(db_handle, SQLITE_LIMIT_SQL_LENGTH, MAX_STRING_SIZE);
175175
int status = sqlite3_db_config(db_handle, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, 1, NULL);
176-
assert(status == SQLITE_OK);
176+
assert(status == SQLITE_OK); ((void)status);
177177
status = sqlite3_db_config(db_handle, SQLITE_DBCONFIG_DEFENSIVE, 1, NULL);
178-
assert(status == SQLITE_OK);
178+
assert(status == SQLITE_OK); ((void)status);
179179

180180
if (node::Buffer::HasInstance(buffer) && !Deserialize(buffer.As<v8::Object>(), addon, db_handle, readonly)) {
181181
int status = sqlite3_close(db_handle);

src/objects/statement.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ NODE_METHOD(Statement::JS_columns) {
363363
);
364364
columns.emplace_back(
365365
v8::Object::New(isolate,
366-
v8::Null(isolate),
366+
v8::Object::New(isolate)->GetPrototype(),
367367
keys.data(),
368368
values.data(),
369369
keys.size()

src/util/data.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ namespace Data {
146146
}
147147
return v8::Object::New(
148148
isolate,
149-
v8::Null(isolate),
149+
v8::Object::New(isolate)->GetPrototype(),
150150
keys.data(),
151151
values.data(),
152152
column_count

src/util/row-builder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class RowBuilder {
3333
}
3434

3535
return v8::Object::New(isolate,
36-
v8::Null(isolate),
36+
v8::Object::New(isolate)->GetPrototype(),
3737
keys.data(),
3838
values.data(),
3939
column_count

0 commit comments

Comments
 (0)