velocious 1.0.497 → 1.0.498
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/database/drivers/sqlite/index.native.js +14 -2
- package/build/src/database/drivers/sqlite/index.native.d.ts +8 -0
- package/build/src/database/drivers/sqlite/index.native.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.native.js +14 -4
- package/package.json +1 -1
- package/src/database/drivers/sqlite/index.native.js +14 -2
|
@@ -7,9 +7,19 @@ import query from "./query"
|
|
|
7
7
|
// @ts-expect-error
|
|
8
8
|
import * as SQLite from "expo-sqlite"
|
|
9
9
|
|
|
10
|
+
import Mutex from "epic-locks/build/mutex.js"
|
|
11
|
+
|
|
10
12
|
import Base from "./base.js"
|
|
11
13
|
|
|
12
14
|
export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
15
|
+
/**
|
|
16
|
+
* Serializes native queries so concurrent `getAllAsync` calls never race
|
|
17
|
+
* `expo-sqlite`'s shared `NativeStatement` objects (a single connection
|
|
18
|
+
* prepares/executes/finalizes one statement at a time).
|
|
19
|
+
* @type {Mutex}
|
|
20
|
+
*/
|
|
21
|
+
_queryMutex = new Mutex()
|
|
22
|
+
|
|
13
23
|
async connect() {
|
|
14
24
|
const {isBrowser, isNative, isServer} = envSense()
|
|
15
25
|
|
|
@@ -65,8 +75,10 @@ export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
|
65
75
|
* @returns {Promise<Record<string, ?>[]>} - Query result rows.
|
|
66
76
|
*/
|
|
67
77
|
async _queryActual(sql) {
|
|
68
|
-
|
|
78
|
+
return await this._queryMutex.sync(() => {
|
|
79
|
+
if (!this.connection) throw new Error("Not connected yet")
|
|
69
80
|
|
|
70
|
-
|
|
81
|
+
return query(this.connection, sql)
|
|
82
|
+
})
|
|
71
83
|
}
|
|
72
84
|
}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
2
|
+
/**
|
|
3
|
+
* Serializes native queries so concurrent `getAllAsync` calls never race
|
|
4
|
+
* `expo-sqlite`'s shared `NativeStatement` objects (a single connection
|
|
5
|
+
* prepares/executes/finalizes one statement at a time).
|
|
6
|
+
* @type {Mutex}
|
|
7
|
+
*/
|
|
8
|
+
_queryMutex: Mutex;
|
|
2
9
|
connection: any;
|
|
3
10
|
connectArgs(): Record<string, any>;
|
|
4
11
|
}
|
|
5
12
|
import Base from "./base.js";
|
|
13
|
+
import Mutex from "epic-locks/build/mutex.js";
|
|
6
14
|
//# sourceMappingURL=index.native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/index.native.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/index.native.js"],"names":[],"mappings":"AAaA;IACE;;;;;OAKG;IACH,aAFU,KAAK,CAEU;IAyBvB,gBAA8D;IAIhE,mCAeC;CAmBF;iBAxEgB,WAAW;kBAFV,2BAA2B"}
|
|
@@ -4,8 +4,16 @@ import envSense from "env-sense/build/use-env-sense.js";
|
|
|
4
4
|
import query from "./query";
|
|
5
5
|
// @ts-expect-error
|
|
6
6
|
import * as SQLite from "expo-sqlite";
|
|
7
|
+
import Mutex from "epic-locks/build/mutex.js";
|
|
7
8
|
import Base from "./base.js";
|
|
8
9
|
export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
10
|
+
/**
|
|
11
|
+
* Serializes native queries so concurrent `getAllAsync` calls never race
|
|
12
|
+
* `expo-sqlite`'s shared `NativeStatement` objects (a single connection
|
|
13
|
+
* prepares/executes/finalizes one statement at a time).
|
|
14
|
+
* @type {Mutex}
|
|
15
|
+
*/
|
|
16
|
+
_queryMutex = new Mutex();
|
|
9
17
|
async connect() {
|
|
10
18
|
const { isBrowser, isNative, isServer } = envSense();
|
|
11
19
|
if (!isNative)
|
|
@@ -55,9 +63,11 @@ export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
|
55
63
|
* @returns {Promise<Record<string, ?>[]>} - Query result rows.
|
|
56
64
|
*/
|
|
57
65
|
async _queryActual(sql) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
return await this._queryMutex.sync(() => {
|
|
67
|
+
if (!this.connection)
|
|
68
|
+
throw new Error("Not connected yet");
|
|
69
|
+
return query(this.connection, sql);
|
|
70
|
+
});
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL2luZGV4Lm5hdGl2ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sUUFBUSxNQUFNLGtDQUFrQyxDQUFBO0FBRXZELG1CQUFtQjtBQUNuQixPQUFPLEtBQUssTUFBTSxTQUFTLENBQUE7QUFFM0IsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBRXJDLE9BQU8sS0FBSyxNQUFNLDJCQUEyQixDQUFBO0FBRTdDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUU1QixNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFxQyxTQUFRLElBQUk7SUFDcEU7Ozs7O09BS0c7SUFDSCxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtJQUV6QixLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxHQUFHLFFBQVEsRUFBRSxDQUFBO1FBRWxELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFaEosTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUVsRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBRTlCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ2hELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7b0JBQy9FLG1CQUFtQjtnQkFDckIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sS0FBSyxDQUFBO2dCQUNiLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDOUQsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDM0I7O3VDQUUrQjtRQUMvQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBRWhELEtBQUssTUFBTSxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7WUFDbkMsSUFBSSxZQUFZLElBQUksSUFBSTtnQkFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNoRixDQUFDO1FBRUQsSUFBSSxVQUFVLElBQUksSUFBSTtZQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFOUQsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHO1FBQ3BCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtZQUUxRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBlbnZTZW5zZSBmcm9tIFwiZW52LXNlbnNlL2J1aWxkL3VzZS1lbnYtc2Vuc2UuanNcIlxuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5pbXBvcnQgcXVlcnkgZnJvbSBcIi4vcXVlcnlcIlxuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5pbXBvcnQgKiBhcyBTUUxpdGUgZnJvbSBcImV4cG8tc3FsaXRlXCJcblxuaW1wb3J0IE11dGV4IGZyb20gXCJlcGljLWxvY2tzL2J1aWxkL211dGV4LmpzXCJcblxuaW1wb3J0IEJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZU5hdGl2ZSBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogU2VyaWFsaXplcyBuYXRpdmUgcXVlcmllcyBzbyBjb25jdXJyZW50IGBnZXRBbGxBc3luY2AgY2FsbHMgbmV2ZXIgcmFjZVxuICAgKiBgZXhwby1zcWxpdGVgJ3Mgc2hhcmVkIGBOYXRpdmVTdGF0ZW1lbnRgIG9iamVjdHMgKGEgc2luZ2xlIGNvbm5lY3Rpb25cbiAgICogcHJlcGFyZXMvZXhlY3V0ZXMvZmluYWxpemVzIG9uZSBzdGF0ZW1lbnQgYXQgYSB0aW1lKS5cbiAgICogQHR5cGUge011dGV4fVxuICAgKi9cbiAgX3F1ZXJ5TXV0ZXggPSBuZXcgTXV0ZXgoKVxuXG4gIGFzeW5jIGNvbm5lY3QoKSB7XG4gICAgY29uc3Qge2lzQnJvd3NlciwgaXNOYXRpdmUsIGlzU2VydmVyfSA9IGVudlNlbnNlKClcblxuICAgIGlmICghaXNOYXRpdmUpIHRocm93IG5ldyBFcnJvcihgU1FMaXRlIG5hdGl2ZSBkcml2ZXIgcnVubmluZyBpbnNpZGUgbm9uLW5hdGl2ZSBlbnZpcm9ubWVudDogJHtKU09OLnN0cmluZ2lmeSh7aXNCcm93c2VyLCBpc05hdGl2ZSwgaXNTZXJ2ZXJ9KX1gKVxuXG4gICAgY29uc3QgYXJncyA9IHRoaXMuZ2V0QXJncygpXG5cbiAgICBpZiAoIWFyZ3MubmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmFtZSBnaXZlbiBmb3IgU1FMaXRlIE5hdGl2ZVwiKVxuXG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gYXJncy5uYW1lXG5cbiAgICBpZiAoYXJncy5yZXNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgU1FMaXRlLmRlbGV0ZURhdGFiYXNlQXN5bmMoZGF0YWJhc2VOYW1lKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5tYXRjaCgvRGF0YWJhc2UgJyguKyknIG5vdCBmb3VuZC8pKSB7XG4gICAgICAgICAgLy8gSWdub3JlIG5vdCBmb3VuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBhd2FpdCBTUUxpdGUub3BlbkRhdGFiYXNlQXN5bmMoZGF0YWJhc2VOYW1lKVxuICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJWZXJzaW9uKClcbiAgfVxuXG4gIGNvbm5lY3RBcmdzKCkge1xuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmdldEFyZ3MoKVxuICAgIC8qKlxuICAgICAqIENvbm5lY3QgYXJncy5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gICAgY29uc3QgY29ubmVjdEFyZ3MgPSB7fVxuICAgIGNvbnN0IGZvcndhcmQgPSBbXCJkYXRhYmFzZVwiLCBcImhvc3RcIiwgXCJwYXNzd29yZFwiXVxuXG4gICAgZm9yIChjb25zdCBmb3J3YXJkVmFsdWUgb2YgZm9yd2FyZCkge1xuICAgICAgaWYgKGZvcndhcmRWYWx1ZSBpbiBhcmdzKSBjb25uZWN0QXJnc1tmb3J3YXJkVmFsdWVdID0gZGlnZyhhcmdzLCBmb3J3YXJkVmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKFwidXNlcm5hbWVcIiBpbiBhcmdzKSBjb25uZWN0QXJnc1tcInVzZXJcIl0gPSBhcmdzW1widXNlcm5hbWVcIl1cblxuICAgIHJldHVybiBjb25uZWN0QXJnc1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLmNsb3NlQXN5bmMoKVxuICAgIHRoaXMuY29ubmVjdGlvbiA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcXVlcnkgYWN0dWFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsIC0gU1FMIHN0cmluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgPz5bXT59IC0gUXVlcnkgcmVzdWx0IHJvd3MuXG4gICAqL1xuICBhc3luYyBfcXVlcnlBY3R1YWwoc3FsKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3F1ZXJ5TXV0ZXguc3luYygoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29ubmVjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm90IGNvbm5lY3RlZCB5ZXRcIilcblxuICAgICAgcmV0dXJuIHF1ZXJ5KHRoaXMuY29ubmVjdGlvbiwgc3FsKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -7,9 +7,19 @@ import query from "./query"
|
|
|
7
7
|
// @ts-expect-error
|
|
8
8
|
import * as SQLite from "expo-sqlite"
|
|
9
9
|
|
|
10
|
+
import Mutex from "epic-locks/build/mutex.js"
|
|
11
|
+
|
|
10
12
|
import Base from "./base.js"
|
|
11
13
|
|
|
12
14
|
export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
15
|
+
/**
|
|
16
|
+
* Serializes native queries so concurrent `getAllAsync` calls never race
|
|
17
|
+
* `expo-sqlite`'s shared `NativeStatement` objects (a single connection
|
|
18
|
+
* prepares/executes/finalizes one statement at a time).
|
|
19
|
+
* @type {Mutex}
|
|
20
|
+
*/
|
|
21
|
+
_queryMutex = new Mutex()
|
|
22
|
+
|
|
13
23
|
async connect() {
|
|
14
24
|
const {isBrowser, isNative, isServer} = envSense()
|
|
15
25
|
|
|
@@ -65,8 +75,10 @@ export default class VelociousDatabaseDriversSqliteNative extends Base {
|
|
|
65
75
|
* @returns {Promise<Record<string, ?>[]>} - Query result rows.
|
|
66
76
|
*/
|
|
67
77
|
async _queryActual(sql) {
|
|
68
|
-
|
|
78
|
+
return await this._queryMutex.sync(() => {
|
|
79
|
+
if (!this.connection) throw new Error("Not connected yet")
|
|
69
80
|
|
|
70
|
-
|
|
81
|
+
return query(this.connection, sql)
|
|
82
|
+
})
|
|
71
83
|
}
|
|
72
84
|
}
|