@@ -255,16 +255,19 @@ void JSValueToSQLiteResult(Isolate* isolate,
255255 }
256256}
257257
258+ inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate, sqlite3* db) {
259+ Local<Object> e;
260+ if (CreateSQLiteError (isolate, db).ToLocal (&e)) {
261+ isolate->ThrowException (e);
262+ }
263+ }
258264inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate, DatabaseSync* db) {
259265 if (db->ShouldIgnoreSQLiteError ()) {
260266 db->SetIgnoreNextSQLiteError (false );
261267 return ;
262268 }
263269
264- Local<Object> e;
265- if (CreateSQLiteError (isolate, db->Connection ()).ToLocal (&e)) {
266- isolate->ThrowException (e);
267- }
270+ THROW_ERR_SQLITE_ERROR (isolate, db->Connection ());
268271}
269272
270273inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate, const char * message) {
@@ -299,6 +302,28 @@ inline MaybeLocal<Value> NullableSQLiteStringToValue(Isolate* isolate,
299302 .As <Value>();
300303}
301304
305+ DatabaseCommon::DatabaseCommon (Environment* env,
306+ Local<Object> object,
307+ DatabaseOpenConfiguration&& open_config,
308+ bool allow_load_extension)
309+ : BaseObject(env, object),
310+ open_config_ (std::move(open_config)),
311+ allow_load_extension_(allow_load_extension),
312+ enable_load_extension_(allow_load_extension) {
313+ MakeWeak ();
314+ }
315+
316+ namespace {
317+ void AddDatabaseCommonMethodsToTemplate (Isolate* isolate,
318+ Local<FunctionTemplate> tmpl) {
319+ SetProtoMethod (isolate, tmpl, " open" , DatabaseCommon::Open);
320+ SetSideEffectFreeGetter (isolate,
321+ tmpl,
322+ FIXED_ONE_BYTE_STRING (isolate, " isOpen" ),
323+ DatabaseCommon::IsOpenGetter);
324+ }
325+ } // namespace
326+
302327class CustomAggregate {
303328 public:
304329 explicit CustomAggregate (Environment* env,
@@ -875,11 +900,9 @@ DatabaseSync::DatabaseSync(Environment* env,
875900 DatabaseOpenConfiguration&& open_config,
876901 bool open,
877902 bool allow_load_extension)
878- : BaseObject(env, object), open_config_(std::move(open_config)) {
903+ : DatabaseCommon(
904+ env, object, std::move(open_config), allow_load_extension) {
879905 MakeWeak ();
880- connection_ = nullptr ;
881- allow_load_extension_ = allow_load_extension;
882- enable_load_extension_ = allow_load_extension;
883906 ignore_next_sqlite_error_ = false ;
884907
885908 if (open) {
@@ -931,7 +954,8 @@ v8::Local<v8::FunctionTemplate> CreateDatabaseSyncConstructorTemplate(
931954 tmpl->InstanceTemplate ()->SetInternalFieldCount (
932955 DatabaseSync::kInternalFieldCount );
933956
934- SetProtoMethod (isolate, tmpl, " open" , DatabaseSync::Open);
957+ AddDatabaseCommonMethodsToTemplate (isolate, tmpl);
958+
935959 SetProtoMethod (isolate, tmpl, " close" , DatabaseSync::Close);
936960 SetProtoDispose (isolate, tmpl, DatabaseSync::Dispose);
937961 SetProtoMethod (isolate, tmpl, " prepare" , DatabaseSync::Prepare);
@@ -948,10 +972,6 @@ v8::Local<v8::FunctionTemplate> CreateDatabaseSyncConstructorTemplate(
948972 isolate, tmpl, " enableDefensive" , DatabaseSync::EnableDefensive);
949973 SetProtoMethod (isolate, tmpl, " loadExtension" , DatabaseSync::LoadExtension);
950974 SetProtoMethod (isolate, tmpl, " setAuthorizer" , DatabaseSync::SetAuthorizer);
951- SetSideEffectFreeGetter (isolate,
952- tmpl,
953- FIXED_ONE_BYTE_STRING (isolate, " isOpen" ),
954- DatabaseSync::IsOpenGetter);
955975 SetSideEffectFreeGetter (isolate,
956976 tmpl,
957977 FIXED_ONE_BYTE_STRING (isolate, " isTransaction" ),
@@ -971,7 +991,7 @@ v8::Local<v8::FunctionTemplate> CreateDatabaseSyncConstructorTemplate(
971991}
972992} // namespace
973993
974- bool DatabaseSync ::Open () {
994+ bool DatabaseCommon ::Open () {
975995 if (IsOpen ()) {
976996 THROW_ERR_INVALID_STATE (env (), " database is already open" );
977997 return false ;
@@ -986,34 +1006,34 @@ bool DatabaseSync::Open() {
9861006 &connection_,
9871007 flags | default_flags,
9881008 nullptr );
989- CHECK_ERROR_OR_THROW (env ()->isolate (), this , r, SQLITE_OK, false );
1009+ CHECK_ERROR_OR_THROW (env ()->isolate (), connection_ , r, SQLITE_OK, false );
9901010
9911011 r = sqlite3_db_config (connection_,
9921012 SQLITE_DBCONFIG_DQS_DML,
9931013 static_cast <int >(open_config_.get_enable_dqs ()),
9941014 nullptr );
995- CHECK_ERROR_OR_THROW (env ()->isolate (), this , r, SQLITE_OK, false );
1015+ CHECK_ERROR_OR_THROW (env ()->isolate (), connection_ , r, SQLITE_OK, false );
9961016 r = sqlite3_db_config (connection_,
9971017 SQLITE_DBCONFIG_DQS_DDL,
9981018 static_cast <int >(open_config_.get_enable_dqs ()),
9991019 nullptr );
1000- CHECK_ERROR_OR_THROW (env ()->isolate (), this , r, SQLITE_OK, false );
1020+ CHECK_ERROR_OR_THROW (env ()->isolate (), connection_ , r, SQLITE_OK, false );
10011021
10021022 int foreign_keys_enabled;
10031023 r = sqlite3_db_config (
10041024 connection_,
10051025 SQLITE_DBCONFIG_ENABLE_FKEY,
10061026 static_cast <int >(open_config_.get_enable_foreign_keys ()),
10071027 &foreign_keys_enabled);
1008- CHECK_ERROR_OR_THROW (env ()->isolate (), this , r, SQLITE_OK, false );
1028+ CHECK_ERROR_OR_THROW (env ()->isolate (), connection_ , r, SQLITE_OK, false );
10091029 CHECK_EQ (foreign_keys_enabled, open_config_.get_enable_foreign_keys ());
10101030
10111031 int defensive_enabled;
10121032 r = sqlite3_db_config (connection_,
10131033 SQLITE_DBCONFIG_DEFENSIVE,
10141034 static_cast <int >(open_config_.get_enable_defensive ()),
10151035 &defensive_enabled);
1016- CHECK_ERROR_OR_THROW (env ()->isolate (), this , r, SQLITE_OK, false );
1036+ CHECK_ERROR_OR_THROW (env ()->isolate (), connection_ , r, SQLITE_OK, false );
10171037 CHECK_EQ (defensive_enabled, open_config_.get_enable_defensive ());
10181038
10191039 sqlite3_busy_timeout (connection_, open_config_.get_timeout ());
@@ -1036,7 +1056,7 @@ bool DatabaseSync::Open() {
10361056 const int load_extension_ret = sqlite3_db_config (
10371057 connection_, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, 1 , nullptr );
10381058 CHECK_ERROR_OR_THROW (
1039- env ()->isolate (), this , load_extension_ret, SQLITE_OK, false );
1059+ env ()->isolate (), connection_ , load_extension_ret, SQLITE_OK, false );
10401060 }
10411061
10421062 return true ;
@@ -1065,11 +1085,11 @@ void DatabaseSync::UntrackStatement(StatementSync* statement) {
10651085 }
10661086}
10671087
1068- inline bool DatabaseSync ::IsOpen () {
1088+ inline bool DatabaseCommon ::IsOpen () {
10691089 return connection_ != nullptr ;
10701090}
10711091
1072- inline sqlite3* DatabaseSync ::Connection () {
1092+ inline sqlite3* DatabaseCommon ::Connection () {
10731093 return connection_;
10741094}
10751095
@@ -1410,13 +1430,13 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
14101430 env, args.This (), std::move (open_config), open, allow_load_extension);
14111431}
14121432
1413- void DatabaseSync ::Open (const FunctionCallbackInfo<Value>& args) {
1433+ void DatabaseCommon ::Open (const FunctionCallbackInfo<Value>& args) {
14141434 DatabaseSync* db;
14151435 ASSIGN_OR_RETURN_UNWRAP (&db, args.This ());
14161436 db->Open ();
14171437}
14181438
1419- void DatabaseSync ::IsOpenGetter (const FunctionCallbackInfo<Value>& args) {
1439+ void DatabaseCommon ::IsOpenGetter (const FunctionCallbackInfo<Value>& args) {
14201440 DatabaseSync* db;
14211441 ASSIGN_OR_RETURN_UNWRAP (&db, args.This ());
14221442 args.GetReturnValue ().Set (db->IsOpen ());
0 commit comments