@@ -1181,23 +1181,30 @@ void DatabaseSync::Location(const FunctionCallbackInfo<Value>& args) {
1181
1181
Environment* env = Environment::GetCurrent (args);
1182
1182
THROW_AND_RETURN_ON_BAD_STATE (env, !db->IsOpen (), " database is not open" );
1183
1183
1184
- std::string db_name = " main" ;
1184
+ std::string_view db_name = " main" ;
1185
1185
if (!args[0 ]->IsUndefined ()) {
1186
1186
if (!args[0 ]->IsString ()) {
1187
1187
THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
1188
1188
" The \" dbName\" argument must be a string." );
1189
1189
return ;
1190
1190
}
1191
1191
1192
- db_name = Utf8Value (env->isolate (), args[0 ].As <String>()).ToString ();
1192
+ Utf8Value db_name_utf8 (env->isolate (), args[0 ].As <String>());
1193
+ db_name = *db_name_utf8 ? *db_name_utf8 : " " ;
1193
1194
}
1194
1195
1195
1196
const char * db_filename =
1196
- sqlite3_db_filename (db->connection_ , db_name.c_str ());
1197
+ sqlite3_db_filename (db->connection_ , std::string (db_name).c_str ());
1198
+ if (!db_filename || db_filename[0 ] == ' \0 ' ) {
1199
+ args.GetReturnValue ().Set (Null (env->isolate ()));
1200
+ return ;
1201
+ }
1197
1202
1198
- args.GetReturnValue ().Set (
1199
- String::NewFromUtf8 (env->isolate (), db_filename, NewStringType::kNormal )
1200
- .ToLocalChecked ());
1203
+ Local<String> ret;
1204
+ if (String::NewFromUtf8 (env->isolate (), db_filename).ToLocal (&ret)) {
1205
+ args.GetReturnValue ().Set (ret);
1206
+ return ;
1207
+ }
1201
1208
}
1202
1209
1203
1210
void DatabaseSync::AggregateFunction (const FunctionCallbackInfo<Value>& args) {
@@ -1320,7 +1327,7 @@ void DatabaseSync::AggregateFunction(const FunctionCallbackInfo<Value>& args) {
1320
1327
return ;
1321
1328
}
1322
1329
1323
- // Subract 1 because the first argument is the aggregate value.
1330
+ // Sutract 1 because the first argument is the aggregate value.
1324
1331
argc = js_len.As <Int32>()->Value () - 1 ;
1325
1332
if (!inverseFunc.IsEmpty () &&
1326
1333
!inverseFunc->Get (env->context (), env->length_string ())
@@ -2632,7 +2639,8 @@ static void Initialize(Local<Object> target,
2632
2639
SetProtoMethod (isolate, db_tmpl, " prepare" , DatabaseSync::Prepare);
2633
2640
SetProtoMethod (isolate, db_tmpl, " exec" , DatabaseSync::Exec);
2634
2641
SetProtoMethod (isolate, db_tmpl, " function" , DatabaseSync::CustomFunction);
2635
- SetProtoMethod (isolate, db_tmpl, " location" , DatabaseSync::Location);
2642
+ SetProtoMethodNoSideEffect (
2643
+ isolate, db_tmpl, " location" , DatabaseSync::Location);
2636
2644
SetProtoMethod (
2637
2645
isolate, db_tmpl, " aggregate" , DatabaseSync::AggregateFunction);
2638
2646
SetProtoMethod (
0 commit comments