66#include " node.h"
77#include " node_errors.h"
88#include " node_mem-inl.h"
9+ #include " path.h"
910#include " sqlite3.h"
1011#include " util-inl.h"
1112
@@ -47,7 +48,7 @@ using v8::Value;
4748#define THROW_AND_RETURN_ON_BAD_STATE (env, condition, msg ) \
4849 do { \
4950 if ((condition)) { \
50- node:: THROW_ERR_INVALID_STATE ((env), (msg)); \
51+ THROW_ERR_INVALID_STATE ((env), (msg)); \
5152 return ; \
5253 } \
5354 } while (0 )
@@ -94,7 +95,7 @@ DatabaseSync::DatabaseSync(Environment* env,
9495 bool open)
9596 : BaseObject(env, object) {
9697 MakeWeak ();
97- node:: Utf8Value utf8_location (env->isolate (), location);
98+ Utf8Value utf8_location (env->isolate (), location);
9899 location_ = utf8_location.ToString ();
99100 connection_ = nullptr ;
100101
@@ -117,7 +118,7 @@ void DatabaseSync::MemoryInfo(MemoryTracker* tracker) const {
117118
118119bool DatabaseSync::Open () {
119120 if (IsOpen ()) {
120- node:: THROW_ERR_INVALID_STATE (env (), " database is already open" );
121+ THROW_ERR_INVALID_STATE (env (), " database is already open" );
121122 return false ;
122123 }
123124
@@ -160,17 +161,17 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
160161 }
161162
162163 if (!args[0 ]->IsString ()) {
163- node:: THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
164- " The \" path\" argument must be a string." );
164+ THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
165+ " The \" path\" argument must be a string." );
165166 return ;
166167 }
167168
168169 bool open = true ;
169170
170171 if (args.Length () > 1 ) {
171172 if (!args[1 ]->IsObject ()) {
172- node:: THROW_ERR_INVALID_ARG_TYPE (
173- env-> isolate (), " The \" options\" argument must be an object." );
173+ THROW_ERR_INVALID_ARG_TYPE (env-> isolate (),
174+ " The \" options\" argument must be an object." );
174175 return ;
175176 }
176177
@@ -182,7 +183,7 @@ void DatabaseSync::New(const FunctionCallbackInfo<Value>& args) {
182183 }
183184 if (!open_v->IsUndefined ()) {
184185 if (!open_v->IsBoolean ()) {
185- node:: THROW_ERR_INVALID_ARG_TYPE (
186+ THROW_ERR_INVALID_ARG_TYPE (
186187 env->isolate (), " The \" options.open\" argument must be a boolean." );
187188 return ;
188189 }
@@ -217,12 +218,12 @@ void DatabaseSync::Prepare(const FunctionCallbackInfo<Value>& args) {
217218 THROW_AND_RETURN_ON_BAD_STATE (env, !db->IsOpen (), " database is not open" );
218219
219220 if (!args[0 ]->IsString ()) {
220- node:: THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
221- " The \" sql\" argument must be a string." );
221+ THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
222+ " The \" sql\" argument must be a string." );
222223 return ;
223224 }
224225
225- node::Utf8Value sql (env->isolate (), args[0 ].As <String>());
226+ auto sql = Utf8Value (env->isolate (), args[0 ].As <String>());
226227 sqlite3_stmt* s = nullptr ;
227228 int r = sqlite3_prepare_v2 (db->connection_ , *sql, -1 , &s, 0 );
228229 CHECK_ERROR_OR_THROW (env->isolate (), db->connection_ , r, SQLITE_OK, void ());
@@ -238,12 +239,12 @@ void DatabaseSync::Exec(const FunctionCallbackInfo<Value>& args) {
238239 THROW_AND_RETURN_ON_BAD_STATE (env, !db->IsOpen (), " database is not open" );
239240
240241 if (!args[0 ]->IsString ()) {
241- node:: THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
242- " The \" sql\" argument must be a string." );
242+ THROW_ERR_INVALID_ARG_TYPE (env->isolate (),
243+ " The \" sql\" argument must be a string." );
243244 return ;
244245 }
245246
246- node::Utf8Value sql (env->isolate (), args[0 ].As <String>());
247+ auto sql = Utf8Value (env->isolate (), args[0 ].As <String>());
247248 int r = sqlite3_exec (db->connection_ , *sql, nullptr , nullptr , nullptr );
248249 CHECK_ERROR_OR_THROW (env->isolate (), db->connection_ , r, SQLITE_OK, void ());
249250}
@@ -311,7 +312,7 @@ bool StatementSync::BindParams(const FunctionCallbackInfo<Value>& args) {
311312 if (insertion.second == false ) {
312313 auto existing_full_name = (*insertion.first ).second ;
313314 if (full_name != existing_full_name) {
314- node:: THROW_ERR_INVALID_STATE (
315+ THROW_ERR_INVALID_STATE (
315316 env (),
316317 " Cannot create bare named parameter '%s' because of "
317318 " conflicting names '%s' and '%s'." ,
@@ -331,7 +332,7 @@ bool StatementSync::BindParams(const FunctionCallbackInfo<Value>& args) {
331332 return false ;
332333 }
333334
334- node::Utf8Value utf8_key (env ()->isolate (), key);
335+ auto utf8_key = Utf8Value (env ()->isolate (), key);
335336 int r = sqlite3_bind_parameter_index (statement_, *utf8_key);
336337 if (r == 0 ) {
337338 if (allow_bare_named_params_) {
@@ -343,7 +344,7 @@ bool StatementSync::BindParams(const FunctionCallbackInfo<Value>& args) {
343344 }
344345
345346 if (r == 0 ) {
346- node:: THROW_ERR_INVALID_STATE (
347+ THROW_ERR_INVALID_STATE (
347348 env (), " Unknown named parameter '%s'" , *utf8_key);
348349 return false ;
349350 }
@@ -387,7 +388,7 @@ bool StatementSync::BindValue(const Local<Value>& value, const int index) {
387388 double val = value.As <Number>()->Value ();
388389 r = sqlite3_bind_double (statement_, index, val);
389390 } else if (value->IsString ()) {
390- node::Utf8Value val (env ()->isolate (), value.As <String>());
391+ auto val = Utf8Value (env ()->isolate (), value.As <String>());
391392 r = sqlite3_bind_text (
392393 statement_, index, *val, val.length (), SQLITE_TRANSIENT);
393394 } else if (value->IsNull ()) {
@@ -400,13 +401,12 @@ bool StatementSync::BindValue(const Local<Value>& value, const int index) {
400401 bool lossless;
401402 int64_t as_int = value.As <BigInt>()->Int64Value (&lossless);
402403 if (!lossless) {
403- node::THROW_ERR_INVALID_ARG_VALUE (env (),
404- " BigInt value is too large to bind." );
404+ THROW_ERR_INVALID_ARG_VALUE (env (), " BigInt value is too large to bind." );
405405 return false ;
406406 }
407407 r = sqlite3_bind_int64 (statement_, index, as_int);
408408 } else {
409- node:: THROW_ERR_INVALID_ARG_TYPE (
409+ THROW_ERR_INVALID_ARG_TYPE (
410410 env ()->isolate (),
411411 " Provided value cannot be bound to SQLite parameter %d." ,
412412 index);
@@ -432,7 +432,7 @@ MaybeLocal<Value> StatementSync::ColumnToValue(const int column) {
432432 " represented as a JavaScript number: %" PRId64,
433433 column,
434434 value);
435- return MaybeLocal<Value>() ;
435+ return {} ;
436436 }
437437 }
438438 case SQLITE_FLOAT:
@@ -441,7 +441,11 @@ MaybeLocal<Value> StatementSync::ColumnToValue(const int column) {
441441 case SQLITE_TEXT: {
442442 const char * value = reinterpret_cast <const char *>(
443443 sqlite3_column_text (statement_, column));
444- return String::NewFromUtf8 (env ()->isolate (), value).As <Value>();
444+ Local<Value> val;
445+ if (!String::NewFromUtf8 (env ()->isolate (), value).ToLocal (&val)) {
446+ return {};
447+ }
448+ return val;
445449 }
446450 case SQLITE_NULL:
447451 return Null (env ()->isolate ());
@@ -463,12 +467,15 @@ MaybeLocal<Value> StatementSync::ColumnToValue(const int column) {
463467MaybeLocal<Name> StatementSync::ColumnNameToName (const int column) {
464468 const char * col_name = sqlite3_column_name (statement_, column);
465469 if (col_name == nullptr ) {
466- node::THROW_ERR_INVALID_STATE (
467- env (), " Cannot get name of column %d" , column);
468- return MaybeLocal<Name>();
470+ THROW_ERR_INVALID_STATE (env (), " Cannot get name of column %d" , column);
471+ return {};
469472 }
470473
471- return String::NewFromUtf8 (env ()->isolate (), col_name).As <Name>();
474+ Local<String> key;
475+ if (!String::NewFromUtf8 (env ()->isolate (), col_name).ToLocal (&key)) {
476+ return {};
477+ }
478+ return key;
472479}
473480
474481void StatementSync::MemoryInfo (MemoryTracker* tracker) const {}
@@ -657,7 +664,7 @@ void StatementSync::SetAllowBareNamedParameters(
657664 env, stmt->IsFinalized (), " statement has been finalized" );
658665
659666 if (!args[0 ]->IsBoolean ()) {
660- node:: THROW_ERR_INVALID_ARG_TYPE (
667+ THROW_ERR_INVALID_ARG_TYPE (
661668 env->isolate (),
662669 " The \" allowBareNamedParameters\" argument must be a boolean." );
663670 return ;
@@ -674,7 +681,7 @@ void StatementSync::SetReadBigInts(const FunctionCallbackInfo<Value>& args) {
674681 env, stmt->IsFinalized (), " statement has been finalized" );
675682
676683 if (!args[0 ]->IsBoolean ()) {
677- node:: THROW_ERR_INVALID_ARG_TYPE (
684+ THROW_ERR_INVALID_ARG_TYPE (
678685 env->isolate (), " The \" readBigInts\" argument must be a boolean." );
679686 return ;
680687 }
@@ -683,7 +690,7 @@ void StatementSync::SetReadBigInts(const FunctionCallbackInfo<Value>& args) {
683690}
684691
685692void IllegalConstructor (const FunctionCallbackInfo<Value>& args) {
686- node:: THROW_ERR_ILLEGAL_CONSTRUCTOR (Environment::GetCurrent (args));
693+ THROW_ERR_ILLEGAL_CONSTRUCTOR (Environment::GetCurrent (args));
687694}
688695
689696Local<FunctionTemplate> StatementSync::GetConstructorTemplate (
0 commit comments