From 49a08208dd997b191e22a1609e9326bf9690baca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Gonz=C3=A1lez?= Date: Tue, 14 Jul 2020 22:36:33 +0200 Subject: [PATCH] Fix conflicts with plugins using nSQL --- README.md | 13 +++++++++++ .../recognizers/state/store.ts | 22 ++++++++++-------- src/internal/persistence/plugin-db.ts | 8 +++++++ src/package.json | 2 +- .../android/nativescript_context_apis.aar | Bin 3458 -> 3460 bytes 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 663781d..119f8f9 100644 --- a/README.md +++ b/README.md @@ -332,6 +332,19 @@ Before requesting user's current location some options can be customized in orde | acquireLocation(options: [AcquireOptions](#geolocation-acquire-options) | `Promise` | Allows to obtain user's current location | | locationStream(options: [StreamOptions](#geolocation-stream-options) | `Observable` | Allows to actively obtain user's location updates | +## Known issues + +### nanoSQL2 + +If your application depends on [nanoSQL 2](https://www.npmjs.com/package/@nano-sql/adapter-sqlite-nativescript) for data persistence, you should check which database is in use (and change it, if applicable) before running a query against your database. You can do it as follows: + +```ts +if (nSQL().selectedDB !== dbName) { + nSQL().useDatabase(dbName); +} +nSQL(tableName).query(...); +``` + ## Plugin authors diff --git a/src/internal/activity-recognition/recognizers/state/store.ts b/src/internal/activity-recognition/recognizers/state/store.ts index e9d0512..b45e474 100644 --- a/src/internal/activity-recognition/recognizers/state/store.ts +++ b/src/internal/activity-recognition/recognizers/state/store.ts @@ -1,5 +1,3 @@ -import { nSQL } from "@nano-sql/core/lib"; - import { HumanActivity, Resolution } from "../../index"; import { pluginDb } from "../../../persistence/plugin-db"; import { recognizersStateModel } from "./model"; @@ -19,8 +17,8 @@ class RecognizersStateStoreDb implements RecognizerStateStore { private tableName = recognizersStateModel.name; async isActive(recognizer: Resolution): Promise { - await pluginDb.createDB(); - const rows = await nSQL(this.tableName) + const instance = await this.db(); + const rows = await instance .query("select") .where(["id", "=", recognizer]) .exec(); @@ -39,8 +37,8 @@ class RecognizersStateStoreDb implements RecognizerStateStore { } async getLastActivity(recognizer: Resolution): Promise { - await pluginDb.createDB(); - const rows = await nSQL(this.tableName) + const instance = await this.db(); + const rows = await instance .query("select") .where(["id", "=", recognizer]) .exec(); @@ -55,23 +53,27 @@ class RecognizersStateStoreDb implements RecognizerStateStore { recognizer: Resolution, activity: HumanActivity ): Promise { - await pluginDb.createDB(); const isActive = await this.isActive(recognizer); if (!isActive) { return null; } - await nSQL(`${this.tableName}.lastActivity`) + const instance = await this.db(`${this.tableName}.lastActivity`); + await instance .query("upsert", activity) .where(["id", "=", recognizer]) .exec(); } private async updateStatus(recognizer: Resolution, active: boolean) { - await pluginDb.createDB(); - await nSQL(this.tableName) + const instance = await this.db(); + await instance .query("upsert", { id: recognizer, active, lastActivity: null }) .exec(); } + + private db(tableName = this.tableName) { + return pluginDb.instance(tableName); + } } export const recognizersStateStoreDb = new RecognizersStateStoreDb(); diff --git a/src/internal/persistence/plugin-db.ts b/src/internal/persistence/plugin-db.ts index c86ba9e..ed53e71 100644 --- a/src/internal/persistence/plugin-db.ts +++ b/src/internal/persistence/plugin-db.ts @@ -22,6 +22,14 @@ class PluginDb { await this.createDBProcedure; this.dbInitialized = true; } + + async instance(tableName: string) { + await this.createDB(); + if (nSQL().selectedDB !== dbName) { + nSQL().useDatabase(dbName); + } + return nSQL(tableName); + } } export const pluginDb = new PluginDb(); diff --git a/src/package.json b/src/package.json index b6cbc00..bfb38f4 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-context-apis", - "version": "1.0.0", + "version": "1.0.1", "description": "Painless access to contextual information for your NativeScript apps", "main": "context-apis", "typings": "index.d.ts", diff --git a/src/platforms/android/nativescript_context_apis.aar b/src/platforms/android/nativescript_context_apis.aar index 0780bc40d7743234226a77ea7b2931088ee079df..181fd9943a7927ed9831322d752979ce70157af5 100644 GIT binary patch delta 236 zcmZpYZjs*L%E`$+K}vo*0|SG~WIs-s`m)P#eU97NU``o#b-?G2+mx~*#Z8}(96uW+j!}{ipbuXSAxt^u|z4oHjhi_d+ zk~UUn9hfb$=H-)KOEa&D`xY{<+8p=#fyj|SRh6lxkzz?RIjUM1ttBr7R3}&~zf4j7 zuOn_IYxB5SUqJV1%Dc=@o7)qnP5b))v7k)atbIE7rj;oz={obn)OZQw&y-`I+v_(^ kb=oVm_LstU|IM;oPnnQ>!p$4RC_g!lSB~u<572820MKz}yZ`_I delta 234 zcmZpXZj#>M%E|d_=c&-G3=9mill?el>b~ z@R?(o_P?6$Wlaz6m3_ONxa{TpcY1O&PO#lSwd#&nV;p<(-y5f9wx4zU7JJd+LzzR; z#s~AVKB%!~M^z^GZ4FwI|Dxg4n(0;+tc5|Go~gcKNi#XBngpXIFGW-({C2o>((Pa5 zI;#qkW9spWQNL``rdzq&vTdFbQlGD0Fk^MeQR$2{r&|+d?$dCVns`2K*P5&4)tXlh inP