Skip to content

Commit ea6de4f

Browse files
committed
New async methods now throw erros on parameters validation.
1 parent 84e2e2d commit ea6de4f

1 file changed

Lines changed: 25 additions & 5 deletions

File tree

cpp/installer.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,24 +233,26 @@ void install(jsi::Runtime &rt, std::shared_ptr<react::CallInvoker> jsCallInvoker
233233
{
234234
if (sizeof(args) < 3)
235235
{
236+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncExecuteSqlBatch] Incorrect parameter count");
236237
return {};
237238
}
238239

239240
const jsi::Value &params = args[1];
240241
const jsi::Value &callbackHolder = args[2];
241242
if(!callbackHolder.isObject() || !callbackHolder.asObject(rt).isFunction(rt)) {
243+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncExecuteSqlBatch] The callback argument must be a function");
242244
return {};
243245
}
244246

245247
if (params.isNull() || params.isUndefined())
246248
{
247-
callbackHolder.asObject(rt).asFunction(rt).call(rt, createError(rt, "[react-native-quick-sqlite][execSQLBatch] - An array of SQL commands or parameters is needed"));
249+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncExecuteSqlBatch] - An array of SQL commands or parameters is needed");
248250
return {};
249251
}
250252

251253
const string dbName = args[0].asString(rt).utf8(rt);
252254
const jsi::Array &batchParams = params.asObject(rt).asArray(rt);
253-
auto callback = make_shared<jsi::Value>((callbackHolder.asObject(rt)));
255+
auto callback = make_shared<jsi::Value>(callbackHolder.asObject(rt));
254256

255257
vector<QuickQueryArguments> commands;
256258
jsiBatchParametersToQuickArguments(rt, batchParams, &commands);
@@ -318,9 +320,21 @@ void install(jsi::Runtime &rt, std::shared_ptr<react::CallInvoker> jsCallInvoker
318320
3,
319321
[pool](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value
320322
{
323+
if (sizeof(args) < 3)
324+
{
325+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncLoadSqlFile] Incorrect parameter count");
326+
return {};
327+
}
328+
329+
const jsi::Value &callbackHolder = args[2];
330+
if(!callbackHolder.isObject() || !callbackHolder.asObject(rt).isFunction(rt)) {
331+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncLoadSqlFile] The callback argument must be a function");
332+
return {};
333+
}
334+
321335
const string dbName = args[0].asString(rt).utf8(rt);
322336
const string sqlFileName = args[1].asString(rt).utf8(rt);
323-
auto callback = make_shared<jsi::Value>((args[2].asObject(rt)));
337+
auto callback = make_shared<jsi::Value>(callbackHolder.asObject(rt));
324338

325339
auto task =
326340
[&rt, dbName, sqlFileName, callback]()
@@ -364,14 +378,20 @@ void install(jsi::Runtime &rt, std::shared_ptr<react::CallInvoker> jsCallInvoker
364378
{
365379
if (count < 4)
366380
{
367-
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite] Incorrect arguments for asyncExecuteSQL");
381+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncExecuteSql] Incorrect arguments for asyncExecuteSQL");
382+
return {};
383+
}
384+
385+
const jsi::Value &callbackHolder = args[3];
386+
if(!callbackHolder.isObject() || !callbackHolder.asObject(rt).isFunction(rt)) {
387+
jsi::detail::throwJSError(rt, "[react-native-quick-sqlite][asyncExecuteSql] The callback argument must be a function");
368388
return {};
369389
}
370390

371391
const string dbName = args[0].asString(rt).utf8(rt);
372392
const string query = args[1].asString(rt).utf8(rt);
373393
const jsi::Value &originalParams = args[2];
374-
auto callback = make_shared<jsi::Value>(args[3].asObject(rt));
394+
auto callback = make_shared<jsi::Value>(callbackHolder.asObject(rt));
375395

376396
// Converting query parameters inside the javascript caller thread
377397
vector<QuickValue> params;

0 commit comments

Comments
 (0)