@nymphjs/driver-sqlite3 1.0.0-beta.81 → 1.0.0-beta.83
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/CHANGELOG.md +14 -0
- package/README.md +1 -1
- package/dist/SQLite3Driver.d.ts +2 -2
- package/dist/SQLite3Driver.js +74 -80
- package/dist/SQLite3Driver.js.map +1 -1
- package/dist/SQLite3Driver.test.js +17 -22
- package/dist/SQLite3Driver.test.js.map +1 -1
- package/dist/conf/d.js +1 -2
- package/dist/conf/defaults.d.ts +1 -1
- package/dist/conf/defaults.js +1 -3
- package/dist/conf/defaults.js.map +1 -1
- package/dist/conf/index.d.ts +2 -2
- package/dist/conf/index.js +2 -8
- package/dist/conf/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -24
- package/dist/index.js.map +1 -1
- package/jest.config.js +12 -2
- package/package.json +14 -13
- package/src/SQLite3Driver.test.ts +1 -1
- package/src/SQLite3Driver.ts +20 -18
- package/src/conf/defaults.ts +1 -1
- package/src/conf/index.ts +2 -2
- package/src/index.ts +2 -2
- package/tsconfig.json +3 -1
package/dist/SQLite3Driver.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
7
|
-
const nymph_1 = require("@nymphjs/nymph");
|
|
8
|
-
const guid_1 = require("@nymphjs/guid");
|
|
9
|
-
const conf_1 = require("./conf");
|
|
1
|
+
import SQLite3 from 'better-sqlite3';
|
|
2
|
+
import { NymphDriver, EntityUniqueConstraintError, InvalidParametersError, NotConfiguredError, QueryFailedError, UnableToConnectError, xor, } from '@nymphjs/nymph';
|
|
3
|
+
import { makeTableSuffix } from '@nymphjs/guid';
|
|
4
|
+
import { SQLite3DriverConfigDefaults as defaults, } from './conf/index.js';
|
|
10
5
|
class InternalStore {
|
|
11
6
|
link;
|
|
12
7
|
linkWrite;
|
|
@@ -19,20 +14,20 @@ class InternalStore {
|
|
|
19
14
|
/**
|
|
20
15
|
* The SQLite3 Nymph database driver.
|
|
21
16
|
*/
|
|
22
|
-
class SQLite3Driver extends
|
|
17
|
+
export default class SQLite3Driver extends NymphDriver {
|
|
23
18
|
config;
|
|
24
19
|
prefix;
|
|
25
20
|
// @ts-ignore: this is assigned in connect(), which is called by the constructor.
|
|
26
21
|
store;
|
|
27
22
|
static escape(input) {
|
|
28
23
|
if (input.indexOf('\x00') !== -1) {
|
|
29
|
-
throw new
|
|
24
|
+
throw new InvalidParametersError('SQLite3 identifiers (like entity ETYPE) cannot contain null characters.');
|
|
30
25
|
}
|
|
31
26
|
return '"' + input.replace(/"/g, () => '""') + '"';
|
|
32
27
|
}
|
|
33
28
|
constructor(config, store) {
|
|
34
29
|
super();
|
|
35
|
-
this.config = { ...
|
|
30
|
+
this.config = { ...defaults, ...config };
|
|
36
31
|
if (this.config.filename === ':memory:') {
|
|
37
32
|
this.config.explicitWrite = true;
|
|
38
33
|
}
|
|
@@ -84,7 +79,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
84
79
|
};
|
|
85
80
|
let link;
|
|
86
81
|
try {
|
|
87
|
-
link = new
|
|
82
|
+
link = new SQLite3(filename, {
|
|
88
83
|
readonly: !explicitWrite && !write,
|
|
89
84
|
fileMustExist,
|
|
90
85
|
timeout,
|
|
@@ -99,7 +94,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
99
94
|
// This happens when the file doesn't exist and we attempt to open it
|
|
100
95
|
// readonly.
|
|
101
96
|
// First open it in write mode.
|
|
102
|
-
const writeLink = new
|
|
97
|
+
const writeLink = new SQLite3(filename, {
|
|
103
98
|
readonly: false,
|
|
104
99
|
fileMustExist,
|
|
105
100
|
timeout,
|
|
@@ -108,7 +103,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
108
103
|
setOptions(writeLink);
|
|
109
104
|
writeLink.close();
|
|
110
105
|
// Now open in readonly.
|
|
111
|
-
link = new
|
|
106
|
+
link = new SQLite3(filename, {
|
|
112
107
|
readonly: true,
|
|
113
108
|
fileMustExist,
|
|
114
109
|
timeout,
|
|
@@ -139,11 +134,11 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
139
134
|
this.store.connected = false;
|
|
140
135
|
}
|
|
141
136
|
if (filename === ':memory:') {
|
|
142
|
-
throw new
|
|
137
|
+
throw new NotConfiguredError("It seems the config hasn't been set up correctly. Could not connect: " +
|
|
143
138
|
e?.message);
|
|
144
139
|
}
|
|
145
140
|
else {
|
|
146
|
-
throw new
|
|
141
|
+
throw new UnableToConnectError('Could not connect: ' + e?.message);
|
|
147
142
|
}
|
|
148
143
|
}
|
|
149
144
|
}
|
|
@@ -242,19 +237,19 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
242
237
|
return runQuery();
|
|
243
238
|
}
|
|
244
239
|
catch (e2) {
|
|
245
|
-
throw new
|
|
240
|
+
throw new QueryFailedError('Query failed: ' + e2?.code + ' - ' + e2?.message, query);
|
|
246
241
|
}
|
|
247
242
|
}
|
|
248
243
|
else if (errorCode === 'SQLITE_CONSTRAINT_UNIQUE' &&
|
|
249
244
|
errorMsg.match(/^UNIQUE constraint failed: /)) {
|
|
250
|
-
throw new
|
|
245
|
+
throw new EntityUniqueConstraintError(`Unique constraint violation.`);
|
|
251
246
|
}
|
|
252
247
|
else {
|
|
253
|
-
throw new
|
|
248
|
+
throw new QueryFailedError('Query failed: ' + e?.code + ' - ' + e?.message, query);
|
|
254
249
|
}
|
|
255
250
|
}
|
|
256
251
|
}
|
|
257
|
-
|
|
252
|
+
queryArray(query, { etypes = [], params = {}, } = {}) {
|
|
258
253
|
return this.query(() => (this.store.linkWrite || this.store.link)
|
|
259
254
|
.prepare(query)
|
|
260
255
|
.iterate(params), `${query} -- ${JSON.stringify(params)}`, etypes);
|
|
@@ -267,7 +262,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
267
262
|
}
|
|
268
263
|
async commit(name) {
|
|
269
264
|
if (name == null || typeof name !== 'string' || name.length === 0) {
|
|
270
|
-
throw new
|
|
265
|
+
throw new InvalidParametersError('Transaction commit attempted without a name.');
|
|
271
266
|
}
|
|
272
267
|
if (this.store.transactionsStarted === 0) {
|
|
273
268
|
return true;
|
|
@@ -334,7 +329,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
334
329
|
}
|
|
335
330
|
async deleteUID(name) {
|
|
336
331
|
if (!name) {
|
|
337
|
-
throw new
|
|
332
|
+
throw new InvalidParametersError('Name not given for UID');
|
|
338
333
|
}
|
|
339
334
|
await this.startTransaction('nymph-delete-uid');
|
|
340
335
|
this.queryRun(`DELETE FROM ${SQLite3Driver.escape(`${this.prefix}uids`)} WHERE "name"=@name;`, {
|
|
@@ -370,7 +365,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
370
365
|
return;
|
|
371
366
|
}
|
|
372
367
|
// Export UIDs.
|
|
373
|
-
let uids = this.
|
|
368
|
+
let uids = this.queryArray(`SELECT * FROM ${SQLite3Driver.escape(`${this.prefix}uids`)} ORDER BY "name";`);
|
|
374
369
|
for (const uid of uids) {
|
|
375
370
|
if (yield { type: 'uid', content: `<${uid.name}>[${uid.cur_uid}]\n` }) {
|
|
376
371
|
return;
|
|
@@ -389,7 +384,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
389
384
|
return;
|
|
390
385
|
}
|
|
391
386
|
// Get the etypes.
|
|
392
|
-
const tables = this.
|
|
387
|
+
const tables = this.queryArray("SELECT `name` FROM `sqlite_master` WHERE `type`='table' AND `name` LIKE @prefix;", {
|
|
393
388
|
params: {
|
|
394
389
|
prefix: this.prefix + 'entities_' + '%',
|
|
395
390
|
},
|
|
@@ -400,7 +395,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
400
395
|
}
|
|
401
396
|
for (const etype of etypes) {
|
|
402
397
|
// Export entities.
|
|
403
|
-
const dataIterator = this.
|
|
398
|
+
const dataIterator = this.queryArray(`SELECT e.*, d."name", d."value", json(d."json") as "json", d."string", d."number" FROM ${SQLite3Driver.escape(`${this.prefix}entities_${etype}`)} e LEFT JOIN ${SQLite3Driver.escape(`${this.prefix}data_${etype}`)} d USING ("guid") ORDER BY e."guid";`)[Symbol.iterator]();
|
|
404
399
|
let datum = dataIterator.next();
|
|
405
400
|
while (!datum.done) {
|
|
406
401
|
const guid = datum.value.guid;
|
|
@@ -470,7 +465,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
470
465
|
}
|
|
471
466
|
const guid = `param${++count.i}`;
|
|
472
467
|
curQuery +=
|
|
473
|
-
(
|
|
468
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
474
469
|
ieTable +
|
|
475
470
|
'."guid"=@' +
|
|
476
471
|
guid;
|
|
@@ -485,7 +480,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
485
480
|
}
|
|
486
481
|
const tag = `param${++count.i}`;
|
|
487
482
|
curQuery +=
|
|
488
|
-
(
|
|
483
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
489
484
|
ieTable +
|
|
490
485
|
'."tags" LIKE @' +
|
|
491
486
|
tag +
|
|
@@ -509,7 +504,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
509
504
|
curQuery +=
|
|
510
505
|
ieTable +
|
|
511
506
|
'."guid" ' +
|
|
512
|
-
(
|
|
507
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
513
508
|
'IN (SELECT "guid" FROM ' +
|
|
514
509
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
515
510
|
' WHERE "name"=@' +
|
|
@@ -526,7 +521,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
526
521
|
}
|
|
527
522
|
if (curVar === 'cdate') {
|
|
528
523
|
curQuery +=
|
|
529
|
-
(
|
|
524
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
530
525
|
'(' +
|
|
531
526
|
ieTable +
|
|
532
527
|
'."cdate" NOT NULL)';
|
|
@@ -534,7 +529,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
534
529
|
}
|
|
535
530
|
else if (curVar === 'mdate') {
|
|
536
531
|
curQuery +=
|
|
537
|
-
(
|
|
532
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
538
533
|
'(' +
|
|
539
534
|
ieTable +
|
|
540
535
|
'."mdate" NOT NULL)';
|
|
@@ -543,7 +538,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
543
538
|
else {
|
|
544
539
|
const name = `param${++count.i}`;
|
|
545
540
|
curQuery +=
|
|
546
|
-
(
|
|
541
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
547
542
|
'EXISTS (SELECT "guid" FROM ' +
|
|
548
543
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
549
544
|
' WHERE "guid"=' +
|
|
@@ -563,7 +558,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
563
558
|
}
|
|
564
559
|
const cdate = `param${++count.i}`;
|
|
565
560
|
curQuery +=
|
|
566
|
-
(
|
|
561
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
567
562
|
ieTable +
|
|
568
563
|
'."cdate"=@' +
|
|
569
564
|
cdate;
|
|
@@ -576,7 +571,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
576
571
|
}
|
|
577
572
|
const mdate = `param${++count.i}`;
|
|
578
573
|
curQuery +=
|
|
579
|
-
(
|
|
574
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
580
575
|
ieTable +
|
|
581
576
|
'."mdate"=@' +
|
|
582
577
|
mdate;
|
|
@@ -590,7 +585,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
590
585
|
const name = `param${++count.i}`;
|
|
591
586
|
const value = `param${++count.i}`;
|
|
592
587
|
curQuery +=
|
|
593
|
-
(
|
|
588
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
594
589
|
'EXISTS (SELECT "guid" FROM ' +
|
|
595
590
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
596
591
|
' WHERE "guid"=' +
|
|
@@ -610,7 +605,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
610
605
|
const name = `param${++count.i}`;
|
|
611
606
|
const value = `param${++count.i}`;
|
|
612
607
|
curQuery +=
|
|
613
|
-
(
|
|
608
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
614
609
|
'EXISTS (SELECT "guid" FROM ' +
|
|
615
610
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
616
611
|
' WHERE "guid"=' +
|
|
@@ -638,7 +633,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
638
633
|
const name = `param${++count.i}`;
|
|
639
634
|
const value = `param${++count.i}`;
|
|
640
635
|
curQuery +=
|
|
641
|
-
(
|
|
636
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
642
637
|
'EXISTS (SELECT "guid" FROM ' +
|
|
643
638
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
644
639
|
' WHERE "guid"=' +
|
|
@@ -660,7 +655,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
660
655
|
}
|
|
661
656
|
const cdate = `param${++count.i}`;
|
|
662
657
|
curQuery +=
|
|
663
|
-
(
|
|
658
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
664
659
|
ieTable +
|
|
665
660
|
'."cdate"=@' +
|
|
666
661
|
cdate;
|
|
@@ -673,7 +668,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
673
668
|
}
|
|
674
669
|
const mdate = `param${++count.i}`;
|
|
675
670
|
curQuery +=
|
|
676
|
-
(
|
|
671
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
677
672
|
ieTable +
|
|
678
673
|
'."mdate"=@' +
|
|
679
674
|
mdate;
|
|
@@ -681,7 +676,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
681
676
|
break;
|
|
682
677
|
}
|
|
683
678
|
else {
|
|
684
|
-
const containTableSuffix =
|
|
679
|
+
const containTableSuffix = makeTableSuffix();
|
|
685
680
|
if (curQuery) {
|
|
686
681
|
curQuery += typeIsOr ? ' OR ' : ' AND ';
|
|
687
682
|
}
|
|
@@ -696,7 +691,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
696
691
|
const name = `param${++count.i}`;
|
|
697
692
|
const value = `param${++count.i}`;
|
|
698
693
|
curQuery +=
|
|
699
|
-
(
|
|
694
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
700
695
|
'EXISTS (SELECT "guid" FROM ' +
|
|
701
696
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
702
697
|
' d' +
|
|
@@ -722,7 +717,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
722
717
|
}
|
|
723
718
|
const cdate = `param${++count.i}`;
|
|
724
719
|
curQuery +=
|
|
725
|
-
(
|
|
720
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
726
721
|
'(' +
|
|
727
722
|
ieTable +
|
|
728
723
|
'."cdate" REGEXP @' +
|
|
@@ -737,7 +732,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
737
732
|
}
|
|
738
733
|
const mdate = `param${++count.i}`;
|
|
739
734
|
curQuery +=
|
|
740
|
-
(
|
|
735
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
741
736
|
'(' +
|
|
742
737
|
ieTable +
|
|
743
738
|
'."mdate" REGEXP @' +
|
|
@@ -753,7 +748,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
753
748
|
const name = `param${++count.i}`;
|
|
754
749
|
const value = `param${++count.i}`;
|
|
755
750
|
curQuery +=
|
|
756
|
-
(
|
|
751
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
757
752
|
'EXISTS (SELECT "guid" FROM ' +
|
|
758
753
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
759
754
|
' WHERE "guid"=' +
|
|
@@ -775,7 +770,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
775
770
|
}
|
|
776
771
|
const cdate = `param${++count.i}`;
|
|
777
772
|
curQuery +=
|
|
778
|
-
(
|
|
773
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
779
774
|
'(' +
|
|
780
775
|
ieTable +
|
|
781
776
|
'."cdate" REGEXP @' +
|
|
@@ -790,7 +785,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
790
785
|
}
|
|
791
786
|
const mdate = `param${++count.i}`;
|
|
792
787
|
curQuery +=
|
|
793
|
-
(
|
|
788
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
794
789
|
'(' +
|
|
795
790
|
ieTable +
|
|
796
791
|
'."mdate" REGEXP @' +
|
|
@@ -806,7 +801,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
806
801
|
const name = `param${++count.i}`;
|
|
807
802
|
const value = `param${++count.i}`;
|
|
808
803
|
curQuery +=
|
|
809
|
-
(
|
|
804
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
810
805
|
'EXISTS (SELECT "guid" FROM ' +
|
|
811
806
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
812
807
|
' WHERE "guid"=' +
|
|
@@ -828,7 +823,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
828
823
|
}
|
|
829
824
|
const cdate = `param${++count.i}`;
|
|
830
825
|
curQuery +=
|
|
831
|
-
(
|
|
826
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
832
827
|
'(' +
|
|
833
828
|
ieTable +
|
|
834
829
|
'."cdate" LIKE @' +
|
|
@@ -843,7 +838,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
843
838
|
}
|
|
844
839
|
const mdate = `param${++count.i}`;
|
|
845
840
|
curQuery +=
|
|
846
|
-
(
|
|
841
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
847
842
|
'(' +
|
|
848
843
|
ieTable +
|
|
849
844
|
'."mdate" LIKE @' +
|
|
@@ -859,7 +854,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
859
854
|
const name = `param${++count.i}`;
|
|
860
855
|
const value = `param${++count.i}`;
|
|
861
856
|
curQuery +=
|
|
862
|
-
(
|
|
857
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
863
858
|
'EXISTS (SELECT "guid" FROM ' +
|
|
864
859
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
865
860
|
' WHERE "guid"=' +
|
|
@@ -881,7 +876,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
881
876
|
}
|
|
882
877
|
const cdate = `param${++count.i}`;
|
|
883
878
|
curQuery +=
|
|
884
|
-
(
|
|
879
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
885
880
|
'(' +
|
|
886
881
|
ieTable +
|
|
887
882
|
'."cdate" LIKE @' +
|
|
@@ -896,7 +891,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
896
891
|
}
|
|
897
892
|
const mdate = `param${++count.i}`;
|
|
898
893
|
curQuery +=
|
|
899
|
-
(
|
|
894
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
900
895
|
'(' +
|
|
901
896
|
ieTable +
|
|
902
897
|
'."mdate" LIKE @' +
|
|
@@ -912,7 +907,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
912
907
|
const name = `param${++count.i}`;
|
|
913
908
|
const value = `param${++count.i}`;
|
|
914
909
|
curQuery +=
|
|
915
|
-
(
|
|
910
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
916
911
|
'EXISTS (SELECT "guid" FROM ' +
|
|
917
912
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
918
913
|
' WHERE "guid"=' +
|
|
@@ -934,7 +929,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
934
929
|
}
|
|
935
930
|
const cdate = `param${++count.i}`;
|
|
936
931
|
curQuery +=
|
|
937
|
-
(
|
|
932
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
938
933
|
ieTable +
|
|
939
934
|
'."cdate">@' +
|
|
940
935
|
cdate;
|
|
@@ -947,7 +942,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
947
942
|
}
|
|
948
943
|
const mdate = `param${++count.i}`;
|
|
949
944
|
curQuery +=
|
|
950
|
-
(
|
|
945
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
951
946
|
ieTable +
|
|
952
947
|
'."mdate">@' +
|
|
953
948
|
mdate;
|
|
@@ -961,7 +956,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
961
956
|
const name = `param${++count.i}`;
|
|
962
957
|
const value = `param${++count.i}`;
|
|
963
958
|
curQuery +=
|
|
964
|
-
(
|
|
959
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
965
960
|
'EXISTS (SELECT "guid" FROM ' +
|
|
966
961
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
967
962
|
' WHERE "guid"=' +
|
|
@@ -983,7 +978,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
983
978
|
}
|
|
984
979
|
const cdate = `param${++count.i}`;
|
|
985
980
|
curQuery +=
|
|
986
|
-
(
|
|
981
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
987
982
|
ieTable +
|
|
988
983
|
'."cdate">=@' +
|
|
989
984
|
cdate;
|
|
@@ -996,7 +991,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
996
991
|
}
|
|
997
992
|
const mdate = `param${++count.i}`;
|
|
998
993
|
curQuery +=
|
|
999
|
-
(
|
|
994
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1000
995
|
ieTable +
|
|
1001
996
|
'."mdate">=@' +
|
|
1002
997
|
mdate;
|
|
@@ -1010,7 +1005,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1010
1005
|
const name = `param${++count.i}`;
|
|
1011
1006
|
const value = `param${++count.i}`;
|
|
1012
1007
|
curQuery +=
|
|
1013
|
-
(
|
|
1008
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1014
1009
|
'EXISTS (SELECT "guid" FROM ' +
|
|
1015
1010
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
1016
1011
|
' WHERE "guid"=' +
|
|
@@ -1032,7 +1027,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1032
1027
|
}
|
|
1033
1028
|
const cdate = `param${++count.i}`;
|
|
1034
1029
|
curQuery +=
|
|
1035
|
-
(
|
|
1030
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1036
1031
|
ieTable +
|
|
1037
1032
|
'."cdate"<@' +
|
|
1038
1033
|
cdate;
|
|
@@ -1045,7 +1040,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1045
1040
|
}
|
|
1046
1041
|
const mdate = `param${++count.i}`;
|
|
1047
1042
|
curQuery +=
|
|
1048
|
-
(
|
|
1043
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1049
1044
|
ieTable +
|
|
1050
1045
|
'."mdate"<@' +
|
|
1051
1046
|
mdate;
|
|
@@ -1059,7 +1054,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1059
1054
|
const name = `param${++count.i}`;
|
|
1060
1055
|
const value = `param${++count.i}`;
|
|
1061
1056
|
curQuery +=
|
|
1062
|
-
(
|
|
1057
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1063
1058
|
'EXISTS (SELECT "guid" FROM ' +
|
|
1064
1059
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
1065
1060
|
' WHERE "guid"=' +
|
|
@@ -1081,7 +1076,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1081
1076
|
}
|
|
1082
1077
|
const cdate = `param${++count.i}`;
|
|
1083
1078
|
curQuery +=
|
|
1084
|
-
(
|
|
1079
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1085
1080
|
ieTable +
|
|
1086
1081
|
'."cdate"<=@' +
|
|
1087
1082
|
cdate;
|
|
@@ -1094,7 +1089,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1094
1089
|
}
|
|
1095
1090
|
const mdate = `param${++count.i}`;
|
|
1096
1091
|
curQuery +=
|
|
1097
|
-
(
|
|
1092
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1098
1093
|
ieTable +
|
|
1099
1094
|
'."mdate"<=@' +
|
|
1100
1095
|
mdate;
|
|
@@ -1108,7 +1103,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1108
1103
|
const name = `param${++count.i}`;
|
|
1109
1104
|
const value = `param${++count.i}`;
|
|
1110
1105
|
curQuery +=
|
|
1111
|
-
(
|
|
1106
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1112
1107
|
'EXISTS (SELECT "guid" FROM ' +
|
|
1113
1108
|
SQLite3Driver.escape(this.prefix + 'data_' + etype) +
|
|
1114
1109
|
' WHERE "guid"=' +
|
|
@@ -1140,7 +1135,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1140
1135
|
const name = `param${++count.i}`;
|
|
1141
1136
|
const guid = `param${++count.i}`;
|
|
1142
1137
|
curQuery +=
|
|
1143
|
-
(
|
|
1138
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1144
1139
|
'EXISTS (SELECT "guid" FROM ' +
|
|
1145
1140
|
SQLite3Driver.escape(this.prefix + 'references_' + etype) +
|
|
1146
1141
|
' WHERE "guid"=' +
|
|
@@ -1160,24 +1155,24 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1160
1155
|
curQuery += typeIsOr ? ' OR ' : ' AND ';
|
|
1161
1156
|
}
|
|
1162
1157
|
curQuery +=
|
|
1163
|
-
(
|
|
1158
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1164
1159
|
'(' +
|
|
1165
1160
|
subquery.query +
|
|
1166
1161
|
')';
|
|
1167
1162
|
break;
|
|
1168
1163
|
case 'qref':
|
|
1169
1164
|
case '!qref':
|
|
1170
|
-
const referenceTableSuffix =
|
|
1165
|
+
const referenceTableSuffix = makeTableSuffix();
|
|
1171
1166
|
const [qrefOptions, ...qrefSelectors] = curValue[1];
|
|
1172
1167
|
const QrefEntityClass = qrefOptions.class;
|
|
1173
1168
|
etypes.push(QrefEntityClass.ETYPE);
|
|
1174
|
-
const qrefQuery = this.makeEntityQuery({ ...qrefOptions, return: 'guid', class: QrefEntityClass }, qrefSelectors, QrefEntityClass.ETYPE, count, params, false,
|
|
1169
|
+
const qrefQuery = this.makeEntityQuery({ ...qrefOptions, return: 'guid', class: QrefEntityClass }, qrefSelectors, QrefEntityClass.ETYPE, count, params, false, makeTableSuffix(), etypes, 'r' + referenceTableSuffix + '."reference"');
|
|
1175
1170
|
if (curQuery) {
|
|
1176
1171
|
curQuery += typeIsOr ? ' OR ' : ' AND ';
|
|
1177
1172
|
}
|
|
1178
1173
|
const qrefName = `param${++count.i}`;
|
|
1179
1174
|
curQuery +=
|
|
1180
|
-
(
|
|
1175
|
+
(xor(typeIsNot, clauseNot) ? 'NOT ' : '') +
|
|
1181
1176
|
'EXISTS (SELECT "guid" FROM ' +
|
|
1182
1177
|
SQLite3Driver.escape(this.prefix + 'references_' + etype) +
|
|
1183
1178
|
' r' +
|
|
@@ -1379,7 +1374,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1379
1374
|
}
|
|
1380
1375
|
performQuery(options, formattedSelectors, etype) {
|
|
1381
1376
|
const { query, params, etypes } = this.makeEntityQuery(options, formattedSelectors, etype);
|
|
1382
|
-
const result = this.
|
|
1377
|
+
const result = this.queryArray(query, { etypes, params })[Symbol.iterator]();
|
|
1383
1378
|
return {
|
|
1384
1379
|
result,
|
|
1385
1380
|
};
|
|
@@ -1415,7 +1410,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1415
1410
|
}
|
|
1416
1411
|
async getUID(name) {
|
|
1417
1412
|
if (name == null) {
|
|
1418
|
-
throw new
|
|
1413
|
+
throw new InvalidParametersError('Name not given for UID.');
|
|
1419
1414
|
}
|
|
1420
1415
|
const result = this.queryGet(`SELECT "cur_uid" FROM ${SQLite3Driver.escape(`${this.prefix}uids`)} WHERE "name"=@name;`, {
|
|
1421
1416
|
params: {
|
|
@@ -1509,7 +1504,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1509
1504
|
});
|
|
1510
1505
|
}
|
|
1511
1506
|
catch (e) {
|
|
1512
|
-
if (e instanceof
|
|
1507
|
+
if (e instanceof EntityUniqueConstraintError) {
|
|
1513
1508
|
this.nymph.config.debugError('sqlite3', `Import entity unique constraint violation for GUID "${guid}" on etype "${etype}": "${unique}"`);
|
|
1514
1509
|
}
|
|
1515
1510
|
throw e;
|
|
@@ -1545,7 +1540,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1545
1540
|
}
|
|
1546
1541
|
async newUID(name) {
|
|
1547
1542
|
if (name == null) {
|
|
1548
|
-
throw new
|
|
1543
|
+
throw new InvalidParametersError('Name not given for UID.');
|
|
1549
1544
|
}
|
|
1550
1545
|
await this.startTransaction('nymph-newuid');
|
|
1551
1546
|
let curUid = undefined;
|
|
@@ -1585,7 +1580,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1585
1580
|
}
|
|
1586
1581
|
async renameUID(oldName, newName) {
|
|
1587
1582
|
if (oldName == null || newName == null) {
|
|
1588
|
-
throw new
|
|
1583
|
+
throw new InvalidParametersError('Name not given for UID.');
|
|
1589
1584
|
}
|
|
1590
1585
|
await this.startTransaction('nymph-rename-uid');
|
|
1591
1586
|
this.queryRun(`UPDATE ${SQLite3Driver.escape(`${this.prefix}uids`)} SET "name"=@newName WHERE "name"=@oldName;`, {
|
|
@@ -1599,7 +1594,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1599
1594
|
}
|
|
1600
1595
|
async rollback(name) {
|
|
1601
1596
|
if (name == null || typeof name !== 'string' || name.length === 0) {
|
|
1602
|
-
throw new
|
|
1597
|
+
throw new InvalidParametersError('Transaction rollback attempted without a name.');
|
|
1603
1598
|
}
|
|
1604
1599
|
if (this.store.transactionsStarted === 0) {
|
|
1605
1600
|
return true;
|
|
@@ -1662,7 +1657,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1662
1657
|
});
|
|
1663
1658
|
}
|
|
1664
1659
|
catch (e) {
|
|
1665
|
-
if (e instanceof
|
|
1660
|
+
if (e instanceof EntityUniqueConstraintError) {
|
|
1666
1661
|
this.nymph.config.debugError('sqlite3', `Save entity unique constraint violation for GUID "${guid}" on etype "${etype}": "${unique}"`);
|
|
1667
1662
|
}
|
|
1668
1663
|
throw e;
|
|
@@ -1756,7 +1751,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1756
1751
|
}
|
|
1757
1752
|
async setUID(name, curUid) {
|
|
1758
1753
|
if (name == null) {
|
|
1759
|
-
throw new
|
|
1754
|
+
throw new InvalidParametersError('Name not given for UID.');
|
|
1760
1755
|
}
|
|
1761
1756
|
await this.startTransaction('nymph-set-uid');
|
|
1762
1757
|
this.queryRun(`DELETE FROM ${SQLite3Driver.escape(`${this.prefix}uids`)} WHERE "name"=@name;`, {
|
|
@@ -1778,7 +1773,7 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1778
1773
|
}
|
|
1779
1774
|
async startTransaction(name) {
|
|
1780
1775
|
if (name == null || typeof name !== 'string' || name.length === 0) {
|
|
1781
|
-
throw new
|
|
1776
|
+
throw new InvalidParametersError('Transaction start attempted without a name.');
|
|
1782
1777
|
}
|
|
1783
1778
|
if (!this.config.explicitWrite && !this.store.linkWrite) {
|
|
1784
1779
|
this._connect(true);
|
|
@@ -1804,5 +1799,4 @@ class SQLite3Driver extends nymph_1.NymphDriver {
|
|
|
1804
1799
|
return false;
|
|
1805
1800
|
}
|
|
1806
1801
|
}
|
|
1807
|
-
exports.default = SQLite3Driver;
|
|
1808
1802
|
//# sourceMappingURL=SQLite3Driver.js.map
|