@@ -130,6 +130,23 @@ using v8::Value;
130130 } while (0 )
131131
132132namespace {
133+
134+ inline void SetSideEffectFreeGetter (Isolate* isolate,
135+ Local<FunctionTemplate> class_template,
136+ Local<String> name,
137+ FunctionCallback fn) {
138+ Local<FunctionTemplate> getter =
139+ FunctionTemplate::New (isolate,
140+ fn,
141+ Local<Value>(),
142+ v8::Signature::New (isolate, class_template),
143+ /* length */ 0 ,
144+ ConstructorBehavior::kThrow ,
145+ SideEffectType::kHasNoSideEffect );
146+ class_template->InstanceTemplate ()->SetAccessorProperty (
147+ name, getter, Local<FunctionTemplate>(), DontDelete);
148+ }
149+
133150Local<DictionaryTemplate> getLazyIterTemplate (Environment* env) {
134151 auto iter_template = env->iter_template ();
135152 if (iter_template.IsEmpty ()) {
@@ -238,8 +255,6 @@ void JSValueToSQLiteResult(Isolate* isolate,
238255 }
239256}
240257
241- class DatabaseSync ;
242-
243258inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate, DatabaseSync* db) {
244259 if (db->ShouldIgnoreSQLiteError ()) {
245260 db->SetIgnoreNextSQLiteError (false );
@@ -906,6 +921,56 @@ void DatabaseSync::MemoryInfo(MemoryTracker* tracker) const {
906921 " open_config" , sizeof (open_config_), " DatabaseOpenConfiguration" );
907922}
908923
924+ namespace {
925+ v8::Local<v8::FunctionTemplate> CreateDatabaseSyncConstructorTemplate (
926+ Environment* env) {
927+ Isolate* isolate = env->isolate ();
928+
929+ Local<FunctionTemplate> tmpl =
930+ NewFunctionTemplate (isolate, DatabaseSync::New);
931+ tmpl->InstanceTemplate ()->SetInternalFieldCount (
932+ DatabaseSync::kInternalFieldCount );
933+
934+ SetProtoMethod (isolate, tmpl, " open" , DatabaseSync::Open);
935+ SetProtoMethod (isolate, tmpl, " close" , DatabaseSync::Close);
936+ SetProtoDispose (isolate, tmpl, DatabaseSync::Dispose);
937+ SetProtoMethod (isolate, tmpl, " prepare" , DatabaseSync::Prepare);
938+ SetProtoMethod (isolate, tmpl, " exec" , DatabaseSync::Exec);
939+ SetProtoMethod (isolate, tmpl, " function" , DatabaseSync::CustomFunction);
940+ SetProtoMethod (isolate, tmpl, " createTagStore" , DatabaseSync::CreateTagStore);
941+ SetProtoMethodNoSideEffect (isolate, tmpl, " location" , DatabaseSync::Location);
942+ SetProtoMethod (isolate, tmpl, " aggregate" , DatabaseSync::AggregateFunction);
943+ SetProtoMethod (isolate, tmpl, " createSession" , DatabaseSync::CreateSession);
944+ SetProtoMethod (isolate, tmpl, " applyChangeset" , DatabaseSync::ApplyChangeset);
945+ SetProtoMethod (
946+ isolate, tmpl, " enableLoadExtension" , DatabaseSync::EnableLoadExtension);
947+ SetProtoMethod (
948+ isolate, tmpl, " enableDefensive" , DatabaseSync::EnableDefensive);
949+ SetProtoMethod (isolate, tmpl, " loadExtension" , DatabaseSync::LoadExtension);
950+ SetProtoMethod (isolate, tmpl, " setAuthorizer" , DatabaseSync::SetAuthorizer);
951+ SetSideEffectFreeGetter (isolate,
952+ tmpl,
953+ FIXED_ONE_BYTE_STRING (isolate, " isOpen" ),
954+ DatabaseSync::IsOpenGetter);
955+ SetSideEffectFreeGetter (isolate,
956+ tmpl,
957+ FIXED_ONE_BYTE_STRING (isolate, " isTransaction" ),
958+ DatabaseSync::IsTransactionGetter);
959+ SetSideEffectFreeGetter (isolate,
960+ tmpl,
961+ FIXED_ONE_BYTE_STRING (isolate, " limits" ),
962+ DatabaseSync::LimitsGetter);
963+ Local<String> sqlite_type_key = FIXED_ONE_BYTE_STRING (isolate, " sqlite-type" );
964+ Local<v8::Symbol> sqlite_type_symbol =
965+ v8::Symbol::For (isolate, sqlite_type_key);
966+ Local<String> database_sync_string =
967+ FIXED_ONE_BYTE_STRING (isolate, " node:sqlite" );
968+ tmpl->InstanceTemplate ()->Set (sqlite_type_symbol, database_sync_string);
969+
970+ return tmpl;
971+ }
972+ } // namespace
973+
909974bool DatabaseSync::Open () {
910975 if (IsOpen ()) {
911976 THROW_ERR_INVALID_STATE (env (), " database is already open" );
@@ -3060,23 +3125,6 @@ SQLTagStore::SQLTagStore(Environment* env,
30603125 MakeWeak ();
30613126}
30623127
3063- static inline void SetSideEffectFreeGetter (
3064- Isolate* isolate,
3065- Local<FunctionTemplate> class_template,
3066- Local<String> name,
3067- FunctionCallback fn) {
3068- Local<FunctionTemplate> getter =
3069- FunctionTemplate::New (isolate,
3070- fn,
3071- Local<Value>(),
3072- v8::Signature::New (isolate, class_template),
3073- /* length */ 0 ,
3074- ConstructorBehavior::kThrow ,
3075- SideEffectType::kHasNoSideEffect );
3076- class_template->InstanceTemplate ()->SetAccessorProperty (
3077- name, getter, Local<FunctionTemplate>(), DontDelete);
3078- }
3079-
30803128SQLTagStore::~SQLTagStore () {}
30813129
30823130Local<FunctionTemplate> SQLTagStore::GetConstructorTemplate (Environment* env) {
@@ -3722,60 +3770,15 @@ static void Initialize(Local<Object> target,
37223770 void * priv) {
37233771 Environment* env = Environment::GetCurrent (context);
37243772 Isolate* isolate = env->isolate ();
3725- Local<FunctionTemplate> db_tmpl =
3726- NewFunctionTemplate (isolate, DatabaseSync::New);
3727- db_tmpl->InstanceTemplate ()->SetInternalFieldCount (
3728- DatabaseSync::kInternalFieldCount );
3773+
37293774 Local<Object> constants = Object::New (isolate);
37303775
37313776 DefineConstants (constants);
37323777
3733- SetProtoMethod (isolate, db_tmpl, " open" , DatabaseSync::Open);
3734- SetProtoMethod (isolate, db_tmpl, " close" , DatabaseSync::Close);
3735- SetProtoDispose (isolate, db_tmpl, DatabaseSync::Dispose);
3736- SetProtoMethod (isolate, db_tmpl, " prepare" , DatabaseSync::Prepare);
3737- SetProtoMethod (isolate, db_tmpl, " exec" , DatabaseSync::Exec);
3738- SetProtoMethod (isolate, db_tmpl, " function" , DatabaseSync::CustomFunction);
3739- SetProtoMethod (
3740- isolate, db_tmpl, " createTagStore" , DatabaseSync::CreateTagStore);
3741- SetProtoMethodNoSideEffect (
3742- isolate, db_tmpl, " location" , DatabaseSync::Location);
3743- SetProtoMethod (
3744- isolate, db_tmpl, " aggregate" , DatabaseSync::AggregateFunction);
3745- SetProtoMethod (
3746- isolate, db_tmpl, " createSession" , DatabaseSync::CreateSession);
3747- SetProtoMethod (
3748- isolate, db_tmpl, " applyChangeset" , DatabaseSync::ApplyChangeset);
3749- SetProtoMethod (isolate,
3750- db_tmpl,
3751- " enableLoadExtension" ,
3752- DatabaseSync::EnableLoadExtension);
3753- SetProtoMethod (
3754- isolate, db_tmpl, " enableDefensive" , DatabaseSync::EnableDefensive);
3755- SetProtoMethod (
3756- isolate, db_tmpl, " loadExtension" , DatabaseSync::LoadExtension);
3757- SetProtoMethod (
3758- isolate, db_tmpl, " setAuthorizer" , DatabaseSync::SetAuthorizer);
3759- SetSideEffectFreeGetter (isolate,
3760- db_tmpl,
3761- FIXED_ONE_BYTE_STRING (isolate, " isOpen" ),
3762- DatabaseSync::IsOpenGetter);
3763- SetSideEffectFreeGetter (isolate,
3764- db_tmpl,
3765- FIXED_ONE_BYTE_STRING (isolate, " isTransaction" ),
3766- DatabaseSync::IsTransactionGetter);
3767- SetSideEffectFreeGetter (isolate,
3768- db_tmpl,
3769- FIXED_ONE_BYTE_STRING (isolate, " limits" ),
3770- DatabaseSync::LimitsGetter);
3771- Local<String> sqlite_type_key = FIXED_ONE_BYTE_STRING (isolate, " sqlite-type" );
3772- Local<v8::Symbol> sqlite_type_symbol =
3773- v8::Symbol::For (isolate, sqlite_type_key);
3774- Local<String> database_sync_string =
3775- FIXED_ONE_BYTE_STRING (isolate, " node:sqlite" );
3776- db_tmpl->InstanceTemplate ()->Set (sqlite_type_symbol, database_sync_string);
3777-
3778- SetConstructorFunction (context, target, " DatabaseSync" , db_tmpl);
3778+ SetConstructorFunction (context,
3779+ target,
3780+ " DatabaseSync" ,
3781+ CreateDatabaseSyncConstructorTemplate (env));
37793782 SetConstructorFunction (context,
37803783 target,
37813784 " StatementSync" ,
0 commit comments