@@ -109,6 +109,8 @@ bool DatabaseSync::Open() {
109
109
int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
110
110
int r = sqlite3_open_v2 (location_.c_str (), &connection_, flags, nullptr );
111
111
CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r, SQLITE_OK, false );
112
+ int r2 = sqlite3_enable_load_extension (connection_, 1 );
113
+ CHECK_ERROR_OR_THROW (env ()->isolate (), connection_, r2, SQLITE_OK, false );
112
114
return true ;
113
115
}
114
116
@@ -211,6 +213,24 @@ void DatabaseSync::Exec(const FunctionCallbackInfo<Value>& args) {
211
213
CHECK_ERROR_OR_THROW (env->isolate (), db->connection_ , r, SQLITE_OK, void ());
212
214
}
213
215
216
+ void DatabaseSync::LoadExtension (const FunctionCallbackInfo<Value>& args) {
217
+ DatabaseSync* db;
218
+ ASSIGN_OR_RETURN_UNWRAP (&db, args.This ());
219
+ Environment* env = Environment::GetCurrent (args);
220
+ THROW_AND_RETURN_ON_BAD_STATE (
221
+ env, db->connection_ == nullptr , " database is not open" );
222
+
223
+ if (!args[0 ]->IsString ()) {
224
+ node::THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
225
+ " The \" path\" argument must be a string." );
226
+ return ;
227
+ }
228
+
229
+ auto path = node::Utf8Value (env->isolate (), args[0 ].As <String>());
230
+ int r = sqlite3_load_extension (db->connection_ , *path, nullptr , nullptr );
231
+ CHECK_ERROR_OR_THROW (env->isolate (), db->connection_ , r, SQLITE_OK, void ());
232
+ }
233
+
214
234
StatementSync::StatementSync (Environment* env,
215
235
Local<Object> object,
216
236
sqlite3* db,
@@ -658,6 +678,7 @@ static void Initialize(Local<Object> target,
658
678
SetProtoMethod (isolate, db_tmpl, " close" , DatabaseSync::Close);
659
679
SetProtoMethod (isolate, db_tmpl, " prepare" , DatabaseSync::Prepare);
660
680
SetProtoMethod (isolate, db_tmpl, " exec" , DatabaseSync::Exec);
681
+ SetProtoMethod (isolate, db_tmpl, " load_extension" , DatabaseSync::LoadExtension);
661
682
SetConstructorFunction (context, target, " DatabaseSync" , db_tmpl);
662
683
SetConstructorFunction (context,
663
684
target,
0 commit comments