@@ -122,6 +122,23 @@ using v8::Value;
122122 } while (0 )
123123
124124namespace {
125+
126+ inline void SetSideEffectFreeGetter (Isolate* isolate,
127+ Local<FunctionTemplate> class_template,
128+ Local<String> name,
129+ FunctionCallback fn) {
130+ Local<FunctionTemplate> getter =
131+ FunctionTemplate::New (isolate,
132+ fn,
133+ Local<Value>(),
134+ v8::Signature::New (isolate, class_template),
135+ /* length */ 0 ,
136+ ConstructorBehavior::kThrow ,
137+ SideEffectType::kHasNoSideEffect );
138+ class_template->InstanceTemplate ()->SetAccessorProperty (
139+ name, getter, Local<FunctionTemplate>(), DontDelete);
140+ }
141+
125142Local<DictionaryTemplate> getLazyIterTemplate (Environment* env) {
126143 auto iter_template = env->iter_template ();
127144 if (iter_template.IsEmpty ()) {
@@ -220,8 +237,6 @@ void JSValueToSQLiteResult(Isolate* isolate,
220237 }
221238}
222239
223- class DatabaseSync ;
224-
225240inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate, DatabaseSync* db) {
226241 if (db->ShouldIgnoreSQLiteError ()) {
227242 db->SetIgnoreNextSQLiteError (false );
@@ -719,6 +734,52 @@ void DatabaseSync::MemoryInfo(MemoryTracker* tracker) const {
719734 " open_config" , sizeof (open_config_), " DatabaseOpenConfiguration" );
720735}
721736
737+ namespace {
738+ v8::Local<v8::FunctionTemplate> CreateDatabaseSyncConstructorTemplate (
739+ Environment* env) {
740+ Isolate* isolate = env->isolate ();
741+
742+ Local<FunctionTemplate> tmpl =
743+ NewFunctionTemplate (isolate, DatabaseSync::New);
744+ tmpl->InstanceTemplate ()->SetInternalFieldCount (
745+ DatabaseSync::kInternalFieldCount );
746+
747+ SetProtoMethod (isolate, tmpl, " open" , DatabaseSync::Open);
748+ SetProtoMethod (isolate, tmpl, " close" , DatabaseSync::Close);
749+ SetProtoDispose (isolate, tmpl, DatabaseSync::Dispose);
750+ SetProtoMethod (isolate, tmpl, " prepare" , DatabaseSync::Prepare);
751+ SetProtoMethod (isolate, tmpl, " exec" , DatabaseSync::Exec);
752+ SetProtoMethod (isolate, tmpl, " function" , DatabaseSync::CustomFunction);
753+ SetProtoMethod (isolate, tmpl, " createTagStore" , DatabaseSync::CreateTagStore);
754+ SetProtoMethodNoSideEffect (isolate, tmpl, " location" , DatabaseSync::Location);
755+ SetProtoMethod (isolate, tmpl, " aggregate" , DatabaseSync::AggregateFunction);
756+ SetProtoMethod (isolate, tmpl, " createSession" , DatabaseSync::CreateSession);
757+ SetProtoMethod (isolate, tmpl, " applyChangeset" , DatabaseSync::ApplyChangeset);
758+ SetProtoMethod (
759+ isolate, tmpl, " enableLoadExtension" , DatabaseSync::EnableLoadExtension);
760+ SetProtoMethod (
761+ isolate, tmpl, " enableDefensive" , DatabaseSync::EnableDefensive);
762+ SetProtoMethod (isolate, tmpl, " loadExtension" , DatabaseSync::LoadExtension);
763+ SetProtoMethod (isolate, tmpl, " setAuthorizer" , DatabaseSync::SetAuthorizer);
764+ SetSideEffectFreeGetter (isolate,
765+ tmpl,
766+ FIXED_ONE_BYTE_STRING (isolate, " isOpen" ),
767+ DatabaseSync::IsOpenGetter);
768+ SetSideEffectFreeGetter (isolate,
769+ tmpl,
770+ FIXED_ONE_BYTE_STRING (isolate, " isTransaction" ),
771+ DatabaseSync::IsTransactionGetter);
772+ Local<String> sqlite_type_key = FIXED_ONE_BYTE_STRING (isolate, " sqlite-type" );
773+ Local<v8::Symbol> sqlite_type_symbol =
774+ v8::Symbol::For (isolate, sqlite_type_key);
775+ Local<String> database_sync_string =
776+ FIXED_ONE_BYTE_STRING (isolate, " node:sqlite" );
777+ tmpl->InstanceTemplate ()->Set (sqlite_type_symbol, database_sync_string);
778+
779+ return tmpl;
780+ }
781+ } // namespace
782+
722783bool DatabaseSync::Open () {
723784 if (IsOpen ()) {
724785 THROW_ERR_INVALID_STATE (env (), " database is already open" );
@@ -2792,23 +2853,6 @@ SQLTagStore::SQLTagStore(Environment* env,
27922853 MakeWeak ();
27932854}
27942855
2795- static inline void SetSideEffectFreeGetter (
2796- Isolate* isolate,
2797- Local<FunctionTemplate> class_template,
2798- Local<String> name,
2799- FunctionCallback fn) {
2800- Local<FunctionTemplate> getter =
2801- FunctionTemplate::New (isolate,
2802- fn,
2803- Local<Value>(),
2804- v8::Signature::New (isolate, class_template),
2805- /* length */ 0 ,
2806- ConstructorBehavior::kThrow ,
2807- SideEffectType::kHasNoSideEffect );
2808- class_template->InstanceTemplate ()->SetAccessorProperty (
2809- name, getter, Local<FunctionTemplate>(), DontDelete);
2810- }
2811-
28122856SQLTagStore::~SQLTagStore () {}
28132857
28142858Local<FunctionTemplate> SQLTagStore::GetConstructorTemplate (Environment* env) {
@@ -3454,56 +3498,15 @@ static void Initialize(Local<Object> target,
34543498 void * priv) {
34553499 Environment* env = Environment::GetCurrent (context);
34563500 Isolate* isolate = env->isolate ();
3457- Local<FunctionTemplate> db_tmpl =
3458- NewFunctionTemplate (isolate, DatabaseSync::New);
3459- db_tmpl->InstanceTemplate ()->SetInternalFieldCount (
3460- DatabaseSync::kInternalFieldCount );
3501+
34613502 Local<Object> constants = Object::New (isolate);
34623503
34633504 DefineConstants (constants);
34643505
3465- SetProtoMethod (isolate, db_tmpl, " open" , DatabaseSync::Open);
3466- SetProtoMethod (isolate, db_tmpl, " close" , DatabaseSync::Close);
3467- SetProtoDispose (isolate, db_tmpl, DatabaseSync::Dispose);
3468- SetProtoMethod (isolate, db_tmpl, " prepare" , DatabaseSync::Prepare);
3469- SetProtoMethod (isolate, db_tmpl, " exec" , DatabaseSync::Exec);
3470- SetProtoMethod (isolate, db_tmpl, " function" , DatabaseSync::CustomFunction);
3471- SetProtoMethod (
3472- isolate, db_tmpl, " createTagStore" , DatabaseSync::CreateTagStore);
3473- SetProtoMethodNoSideEffect (
3474- isolate, db_tmpl, " location" , DatabaseSync::Location);
3475- SetProtoMethod (
3476- isolate, db_tmpl, " aggregate" , DatabaseSync::AggregateFunction);
3477- SetProtoMethod (
3478- isolate, db_tmpl, " createSession" , DatabaseSync::CreateSession);
3479- SetProtoMethod (
3480- isolate, db_tmpl, " applyChangeset" , DatabaseSync::ApplyChangeset);
3481- SetProtoMethod (isolate,
3482- db_tmpl,
3483- " enableLoadExtension" ,
3484- DatabaseSync::EnableLoadExtension);
3485- SetProtoMethod (
3486- isolate, db_tmpl, " enableDefensive" , DatabaseSync::EnableDefensive);
3487- SetProtoMethod (
3488- isolate, db_tmpl, " loadExtension" , DatabaseSync::LoadExtension);
3489- SetProtoMethod (
3490- isolate, db_tmpl, " setAuthorizer" , DatabaseSync::SetAuthorizer);
3491- SetSideEffectFreeGetter (isolate,
3492- db_tmpl,
3493- FIXED_ONE_BYTE_STRING (isolate, " isOpen" ),
3494- DatabaseSync::IsOpenGetter);
3495- SetSideEffectFreeGetter (isolate,
3496- db_tmpl,
3497- FIXED_ONE_BYTE_STRING (isolate, " isTransaction" ),
3498- DatabaseSync::IsTransactionGetter);
3499- Local<String> sqlite_type_key = FIXED_ONE_BYTE_STRING (isolate, " sqlite-type" );
3500- Local<v8::Symbol> sqlite_type_symbol =
3501- v8::Symbol::For (isolate, sqlite_type_key);
3502- Local<String> database_sync_string =
3503- FIXED_ONE_BYTE_STRING (isolate, " node:sqlite" );
3504- db_tmpl->InstanceTemplate ()->Set (sqlite_type_symbol, database_sync_string);
3505-
3506- SetConstructorFunction (context, target, " DatabaseSync" , db_tmpl);
3506+ SetConstructorFunction (context,
3507+ target,
3508+ " DatabaseSync" ,
3509+ CreateDatabaseSyncConstructorTemplate (env));
35073510 SetConstructorFunction (context,
35083511 target,
35093512 " StatementSync" ,
0 commit comments