prostgles-server 2.0.157 → 2.0.158
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/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +8 -6
- package/dist/DboBuilder.js.map +1 -1
- package/dist/PubSubManager.d.ts +3 -2
- package/dist/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager.js +13 -13
- package/dist/PubSubManager.js.map +1 -1
- package/dist/SyncReplication.d.ts +1 -1
- package/dist/SyncReplication.d.ts.map +1 -1
- package/dist/SyncReplication.js +21 -19
- package/dist/SyncReplication.js.map +1 -1
- package/lib/DboBuilder.ts +8 -7
- package/lib/PubSubManager.ts +13 -13
- package/lib/SyncReplication.ts +24 -24
- package/package.json +2 -2
- package/tests/client/PID.txt +1 -1
- package/tests/client/package-lock.json +15 -15
- package/tests/client/package.json +1 -1
- package/tests/client_only_queries.js +26 -20
- package/tests/client_only_queries.ts +27 -18
- package/tests/isomorphic_queries.js +178 -231
- package/tests/isomorphic_queries.ts +2 -61
- package/tests/server/package-lock.json +186 -50
- package/tests/server/package.json +2 -2
|
@@ -45,9 +45,8 @@ function tryRunP(desc, func, log) {
|
|
|
45
45
|
await func(rv, rj);
|
|
46
46
|
}
|
|
47
47
|
catch (err) {
|
|
48
|
-
log?.(JSON.stringify(err));
|
|
48
|
+
log?.(`${desc} failed: ` + JSON.stringify(err));
|
|
49
49
|
setTimeout(() => {
|
|
50
|
-
log?.("Throw err");
|
|
51
50
|
throw err;
|
|
52
51
|
}, 1000);
|
|
53
52
|
}
|
|
@@ -65,13 +64,6 @@ async function isomorphic(db) {
|
|
|
65
64
|
await db.items2.delete({});
|
|
66
65
|
await db.items.delete({});
|
|
67
66
|
}
|
|
68
|
-
// await tryRun("UUID data", async () => {
|
|
69
|
-
// const r = await db.uuid_text.insert({}, { returning: "*"});
|
|
70
|
-
// throw r;
|
|
71
|
-
// })
|
|
72
|
-
// setTimeout(async () => {
|
|
73
|
-
// await db.any("DROP TABLE IF EXISTS tt; CREATE TABLE tt(id serial);");
|
|
74
|
-
// }, 500)
|
|
75
67
|
await tryRun("Prepare data", async () => {
|
|
76
68
|
await db.items.insert([{ name: "a" }, { name: "a" }, { name: "b" }]);
|
|
77
69
|
console.log(await db.items.find());
|
|
@@ -419,244 +411,199 @@ async function isomorphic(db) {
|
|
|
419
411
|
console.log("TODO: socket.io stringifies dates");
|
|
420
412
|
});
|
|
421
413
|
await tryRun("Postgis examples", async () => {
|
|
422
|
-
await
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
orderBy: "geom"
|
|
446
|
-
});
|
|
447
|
-
assert_1.strict.deepStrictEqual(f, {
|
|
448
|
-
geomGeo: {
|
|
449
|
-
coordinates: [-2, 2],
|
|
450
|
-
type: 'Point'
|
|
451
|
-
},
|
|
452
|
-
geomTxt: 'POINT(-2 2)'
|
|
453
|
-
});
|
|
454
|
-
/**Aggregate functions */
|
|
455
|
-
const aggs = await db.shapes.findOne({}, {
|
|
456
|
-
select: {
|
|
457
|
-
xMin: { "$ST_XMin_Agg": ["geom"] },
|
|
458
|
-
xMax: { "$ST_XMax_Agg": ["geom"] },
|
|
459
|
-
yMin: { "$ST_YMin_Agg": ["geom"] },
|
|
460
|
-
yMax: { "$ST_YMax_Agg": ["geom"] },
|
|
461
|
-
zMin: { "$ST_ZMin_Agg": ["geom"] },
|
|
462
|
-
zMax: { "$ST_ZMax_Agg": ["geom"] },
|
|
463
|
-
extent: { "$ST_Extent": ["geom"] },
|
|
464
|
-
// extent3D: { "$ST_3DExtent": ["geom"] },
|
|
465
|
-
},
|
|
466
|
-
});
|
|
467
|
-
assert_1.strict.deepStrictEqual(aggs, {
|
|
468
|
-
xMax: -1,
|
|
469
|
-
xMin: -2,
|
|
470
|
-
yMax: 2,
|
|
471
|
-
yMin: 1,
|
|
472
|
-
zMax: 0,
|
|
473
|
-
zMin: 0,
|
|
474
|
-
extent: 'BOX(-2 1,-1 2)',
|
|
475
|
-
// extent3D: 'BOX3D(-2 1 0,-1 2 6.952908662134e-310)' <-- looks like a value that will fail tests at some point
|
|
476
|
-
});
|
|
414
|
+
await db.shapes.delete();
|
|
415
|
+
const p1 = { ST_GeomFromText: ["POINT(-1 1)", 4326] }, p2 = { ST_GeomFromText: ["POINT(-2 2)", 4326] };
|
|
416
|
+
await db.shapes.insert([
|
|
417
|
+
{ geom: p1, geog: p1 },
|
|
418
|
+
{ geom: p2, geog: p2 },
|
|
419
|
+
]);
|
|
420
|
+
/** Basic functions and extent filters */
|
|
421
|
+
const f = await db.shapes.findOne({ $and: [
|
|
422
|
+
{ "geom.&&.st_makeenvelope": [
|
|
423
|
+
-3, 2,
|
|
424
|
+
-2, 2
|
|
425
|
+
] },
|
|
426
|
+
{ "geog.&&.st_makeenvelope": [
|
|
427
|
+
-3, 2,
|
|
428
|
+
-2, 2
|
|
429
|
+
] }
|
|
430
|
+
]
|
|
431
|
+
}, {
|
|
432
|
+
select: {
|
|
433
|
+
geomTxt: { "$ST_AsText": ["geom"] },
|
|
434
|
+
geomGeo: { "$ST_AsGeoJSON": ["geom"] },
|
|
435
|
+
},
|
|
436
|
+
orderBy: "geom"
|
|
477
437
|
});
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
const { name, media: { extension, content_type, original_name } } = await db.items_with_one_media.insert({ name: "somename.txt", media: mediaFile }, { returning: "*" });
|
|
485
|
-
assert_1.strict.deepStrictEqual({ extension, content_type, original_name }, {
|
|
486
|
-
extension: 'txt',
|
|
487
|
-
content_type: 'text/plain',
|
|
488
|
-
original_name: 'sample_file.txt',
|
|
489
|
-
});
|
|
490
|
-
// const _data = fs.readFileSync(__dirname + "/server/media/"+file.name);
|
|
491
|
-
assert_1.strict.equal(name, "somename.txt");
|
|
492
|
-
});
|
|
438
|
+
assert_1.strict.deepStrictEqual(f, {
|
|
439
|
+
geomGeo: {
|
|
440
|
+
coordinates: [-2, 2],
|
|
441
|
+
type: 'Point'
|
|
442
|
+
},
|
|
443
|
+
geomTxt: 'POINT(-2 2)'
|
|
493
444
|
});
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
445
|
+
/**Aggregate functions */
|
|
446
|
+
const aggs = await db.shapes.findOne({}, {
|
|
447
|
+
select: {
|
|
448
|
+
xMin: { "$ST_XMin_Agg": ["geom"] },
|
|
449
|
+
xMax: { "$ST_XMax_Agg": ["geom"] },
|
|
450
|
+
yMin: { "$ST_YMin_Agg": ["geom"] },
|
|
451
|
+
yMax: { "$ST_YMax_Agg": ["geom"] },
|
|
452
|
+
zMin: { "$ST_ZMin_Agg": ["geom"] },
|
|
453
|
+
zMax: { "$ST_ZMax_Agg": ["geom"] },
|
|
454
|
+
extent: { "$ST_Extent": ["geom"] },
|
|
455
|
+
// extent3D: { "$ST_3DExtent": ["geom"] },
|
|
456
|
+
},
|
|
498
457
|
});
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
458
|
+
assert_1.strict.deepStrictEqual(aggs, {
|
|
459
|
+
xMax: -1,
|
|
460
|
+
xMin: -2,
|
|
461
|
+
yMax: 2,
|
|
462
|
+
yMin: 1,
|
|
463
|
+
zMax: 0,
|
|
464
|
+
zMin: 0,
|
|
465
|
+
extent: 'BOX(-2 1,-1 2)',
|
|
466
|
+
// extent3D: 'BOX3D(-2 1 0,-1 2 6.952908662134e-310)' <-- looks like a value that will fail tests at some point
|
|
502
467
|
});
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
468
|
+
});
|
|
469
|
+
await tryRun("Local file upload", async () => {
|
|
470
|
+
let str = "This is a string", data = Buffer.from(str, "utf-8"), mediaFile = { data, name: "sample_file.txt" };
|
|
471
|
+
const file = await db.media.insert(mediaFile, { returning: "*" });
|
|
472
|
+
const _data = fs.readFileSync(__dirname + "/server/media/" + file.name);
|
|
473
|
+
assert_1.strict.equal(str, _data.toString('utf8'));
|
|
474
|
+
await tryRun("Nested insert", async () => {
|
|
475
|
+
const { name, media: { extension, content_type, original_name } } = await db.items_with_one_media.insert({ name: "somename.txt", media: mediaFile }, { returning: "*" });
|
|
476
|
+
assert_1.strict.deepStrictEqual({ extension, content_type, original_name }, {
|
|
477
|
+
extension: 'txt',
|
|
478
|
+
content_type: 'text/plain',
|
|
479
|
+
original_name: 'sample_file.txt',
|
|
509
480
|
});
|
|
510
|
-
|
|
481
|
+
// const _data = fs.readFileSync(__dirname + "/server/media/"+file.name);
|
|
482
|
+
assert_1.strict.equal(name, "somename.txt");
|
|
511
483
|
});
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
484
|
+
});
|
|
485
|
+
await tryRun("Exists filter example", async () => {
|
|
486
|
+
const fo = await db.items.findOne(), f = await db.items.find();
|
|
487
|
+
assert_1.strict.deepStrictEqual(fo, { h: null, id: 1, name: 'a' }, "findOne query failed");
|
|
488
|
+
assert_1.strict.deepStrictEqual(f[0], { h: null, id: 1, name: 'a' }, "findOne query failed");
|
|
489
|
+
});
|
|
490
|
+
await tryRun("Result size", async () => {
|
|
491
|
+
const is75bits = await db.items.size({}, { select: { name: 1 } });
|
|
492
|
+
assert_1.strict.equal(is75bits, '75', "Result size query failed");
|
|
493
|
+
});
|
|
494
|
+
await tryRun("Basic exists", async () => {
|
|
495
|
+
const expect0 = await db.items.count({
|
|
496
|
+
$and: [
|
|
497
|
+
{ $exists: { items2: { name: "a" } } },
|
|
498
|
+
{ $exists: { items3: { name: "b" } } },
|
|
499
|
+
]
|
|
521
500
|
});
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
]
|
|
528
|
-
|
|
529
|
-
|
|
501
|
+
assert_1.strict.equal(expect0, 0, "$exists query failed");
|
|
502
|
+
});
|
|
503
|
+
await tryRun("Basic fts with shorthand notation", async () => {
|
|
504
|
+
const res = await db.items.count({
|
|
505
|
+
$and: [
|
|
506
|
+
{ $exists: { items2: { "name.@@.to_tsquery": ["a"] } } },
|
|
507
|
+
{ $exists: { items3: { "name.@@.to_tsquery": ["b"] } } },
|
|
508
|
+
]
|
|
530
509
|
});
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
510
|
+
// assert.deepStrictEqual(res, { name: 'a'})
|
|
511
|
+
assert_1.strict.equal(res, 0, "FTS query failed");
|
|
512
|
+
});
|
|
513
|
+
await tryRun("Exists with shortest path wildcard filter example", async () => {
|
|
514
|
+
const expect2 = await db.items.find({
|
|
515
|
+
$and: [
|
|
516
|
+
{ $existsJoined: { "**.items3": { name: "a" } } },
|
|
517
|
+
{ $existsJoined: { items2: { name: "a" } } }
|
|
518
|
+
]
|
|
540
519
|
});
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
520
|
+
assert_1.strict.equal(expect2.length, 2, "$existsJoined query failed");
|
|
521
|
+
});
|
|
522
|
+
await tryRun("Exists with exact path filter example", async () => {
|
|
523
|
+
const _expect2 = await db.items.find({
|
|
524
|
+
$and: [
|
|
525
|
+
// { "items2": { name: "a" } },
|
|
526
|
+
// { "items2.items3": { name: "a" } },
|
|
527
|
+
{ $existsJoined: { items2: { name: "a" } } }
|
|
528
|
+
]
|
|
550
529
|
});
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
530
|
+
assert_1.strict.equal(_expect2.length, 2, "$existsJoined query failed");
|
|
531
|
+
});
|
|
532
|
+
await tryRun("Not Exists with exact path filter example", async () => {
|
|
533
|
+
const _expect1 = await db.items.find({
|
|
534
|
+
$and: [
|
|
535
|
+
// { "items2": { name: "a" } },
|
|
536
|
+
// { "items2.items3": { name: "a" } },
|
|
537
|
+
{ $notExistsJoined: { items2: { name: "a" } } }
|
|
538
|
+
]
|
|
556
539
|
});
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
540
|
+
assert_1.strict.equal(_expect1.length, 1, "$notExistsJoined query failed");
|
|
541
|
+
});
|
|
542
|
+
/* Upsert */
|
|
543
|
+
await tryRun("Upsert example", async () => {
|
|
544
|
+
await db.items.upsert({ name: "tx" }, { name: "tx" });
|
|
545
|
+
await db.items.upsert({ name: "tx" }, { name: "tx" });
|
|
546
|
+
assert_1.strict.equal(await db.items.count({ name: "tx" }), 1, "upsert command failed");
|
|
547
|
+
});
|
|
548
|
+
/* Joins example */
|
|
549
|
+
await tryRun("Joins example", async () => {
|
|
550
|
+
const items = await db.items.find({}, {
|
|
551
|
+
select: {
|
|
552
|
+
"*": 1,
|
|
553
|
+
items3: "*",
|
|
554
|
+
items22: db.leftJoin.items2({}, "*")
|
|
569
555
|
}
|
|
570
556
|
});
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
items2j: db.leftJoin.items2({}, "*")
|
|
584
|
-
}
|
|
585
|
-
});
|
|
586
|
-
items2.forEach((d, i) => {
|
|
587
|
-
assert_1.strict.deepStrictEqual(d.items2, items2j[i].items2, "Joins duplicate aliased table query failed");
|
|
588
|
-
assert_1.strict.deepStrictEqual(d.items2, items2j[i].items2j, "Joins duplicate aliased table query failed");
|
|
589
|
-
});
|
|
590
|
-
});
|
|
591
|
-
await tryRun("Join aggregate functions example", async () => {
|
|
592
|
-
const singleShortHandAgg = await db.items.findOne({}, { select: { id: "$max" } });
|
|
593
|
-
const singleAgg = await db.items.findOne({}, { select: { id: { "$max": ["id"] } } });
|
|
594
|
-
assert_1.strict.deepStrictEqual(singleShortHandAgg, { id: 4 });
|
|
595
|
-
assert_1.strict.deepStrictEqual(singleAgg, { id: 4 });
|
|
596
|
-
const shortHandAggJoined = await db.items.findOne({ id: 4 }, { select: { id: 1, items2: { name: "$max" } } });
|
|
597
|
-
assert_1.strict.deepStrictEqual(shortHandAggJoined, { id: 4, items2: [] });
|
|
598
|
-
// console.log(JSON.stringify(shortHandAggJoined, null, 2));
|
|
599
|
-
// throw 1;
|
|
600
|
-
/* TODO joins & aggs */
|
|
601
|
-
// const aggsJoined = await db.items.find(
|
|
602
|
-
// {},
|
|
603
|
-
// {
|
|
604
|
-
// select: {
|
|
605
|
-
// id: "$count",
|
|
606
|
-
// name: 1,
|
|
607
|
-
// items2: {
|
|
608
|
-
// id: 1
|
|
609
|
-
// }
|
|
610
|
-
// },
|
|
611
|
-
// orderBy: {
|
|
612
|
-
// id: -1
|
|
613
|
-
// }
|
|
614
|
-
// }
|
|
615
|
-
// );
|
|
616
|
-
// console.log(JSON.stringify(aggsJoined, null, 2))
|
|
617
|
-
// assert.deepStrictEqual(aggsJoined, [
|
|
618
|
-
// {
|
|
619
|
-
// "name": "a",
|
|
620
|
-
// "items2": [
|
|
621
|
-
// {
|
|
622
|
-
// "id": 1
|
|
623
|
-
// },
|
|
624
|
-
// {
|
|
625
|
-
// "id": 1
|
|
626
|
-
// }
|
|
627
|
-
// ],
|
|
628
|
-
// "id": "2"
|
|
629
|
-
// },
|
|
630
|
-
// {
|
|
631
|
-
// "name": "b",
|
|
632
|
-
// "items2": [],
|
|
633
|
-
// "id": "1"
|
|
634
|
-
// },
|
|
635
|
-
// {
|
|
636
|
-
// "name": "tx",
|
|
637
|
-
// "items2": [],
|
|
638
|
-
// "id": "1"
|
|
639
|
-
// }
|
|
640
|
-
// ], "Joined aggregation query failed");
|
|
557
|
+
if (!items.length || !items.every(it => Array.isArray(it.items3) && Array.isArray(it.items22))) {
|
|
558
|
+
console.log(items[0].items3);
|
|
559
|
+
throw "Joined select query failed";
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
/* Joins duplicate table example */
|
|
563
|
+
await tryRun("Joins repeating table example", async () => {
|
|
564
|
+
const items2 = await db.items.find({}, {
|
|
565
|
+
select: {
|
|
566
|
+
"*": 1,
|
|
567
|
+
items2: "*"
|
|
568
|
+
}
|
|
641
569
|
});
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
const rh1 = await db.items.findOne({ $rowhash: rowhash.$rowhash }, { select: { $rowhash: 1 } });
|
|
648
|
-
const rhView = await db.v_items.findOne({ $rowhash: rowhashView.$rowhash }, { select: { $rowhash: 1 } });
|
|
649
|
-
// console.log({ rowhash, f });
|
|
650
|
-
await db.items.update(f, { name: 'a' });
|
|
651
|
-
// console.log(rowhash, rh1)
|
|
652
|
-
// console.log(rowhashView, rhView)
|
|
653
|
-
if (typeof rowhash.$rowhash !== "string" ||
|
|
654
|
-
typeof rowhashView.$rowhash !== "string" ||
|
|
655
|
-
rowhash.$rowhash !== rh1.$rowhash ||
|
|
656
|
-
rowhashView.$rowhash !== rhView.$rowhash) {
|
|
657
|
-
throw "$rowhash query failed";
|
|
570
|
+
const items2j = await db.items.find({}, {
|
|
571
|
+
select: {
|
|
572
|
+
"*": 1,
|
|
573
|
+
items2: "*",
|
|
574
|
+
items2j: db.leftJoin.items2({}, "*")
|
|
658
575
|
}
|
|
659
576
|
});
|
|
577
|
+
items2.forEach((d, i) => {
|
|
578
|
+
assert_1.strict.deepStrictEqual(d.items2, items2j[i].items2, "Joins duplicate aliased table query failed");
|
|
579
|
+
assert_1.strict.deepStrictEqual(d.items2, items2j[i].items2j, "Joins duplicate aliased table query failed");
|
|
580
|
+
});
|
|
581
|
+
});
|
|
582
|
+
await tryRun("Join aggregate functions example", async () => {
|
|
583
|
+
const singleShortHandAgg = await db.items.findOne({}, { select: { id: "$max" } });
|
|
584
|
+
const singleAgg = await db.items.findOne({}, { select: { id: { "$max": ["id"] } } });
|
|
585
|
+
assert_1.strict.deepStrictEqual(singleShortHandAgg, { id: 4 });
|
|
586
|
+
assert_1.strict.deepStrictEqual(singleAgg, { id: 4 });
|
|
587
|
+
const shortHandAggJoined = await db.items.findOne({ id: 4 }, { select: { id: 1, items2: { name: "$max" } } });
|
|
588
|
+
assert_1.strict.deepStrictEqual(shortHandAggJoined, { id: 4, items2: [] });
|
|
589
|
+
});
|
|
590
|
+
/* $rowhash -> Custom column that returms md5(ctid + allowed select columns). Used in joins & CRUD to bypass PKey details */
|
|
591
|
+
await tryRun("$rowhash example", async () => {
|
|
592
|
+
const rowhash = await db.items.findOne({}, { select: { $rowhash: 1, "*": 1 } });
|
|
593
|
+
const f = { $rowhash: rowhash.$rowhash };
|
|
594
|
+
const rowhashView = await db.v_items.findOne({}, { select: { $rowhash: 1 } });
|
|
595
|
+
const rh1 = await db.items.findOne({ $rowhash: rowhash.$rowhash }, { select: { $rowhash: 1 } });
|
|
596
|
+
const rhView = await db.v_items.findOne({ $rowhash: rowhashView.$rowhash }, { select: { $rowhash: 1 } });
|
|
597
|
+
// console.log({ rowhash, f });
|
|
598
|
+
await db.items.update(f, { name: 'a' });
|
|
599
|
+
// console.log(rowhash, rh1)
|
|
600
|
+
// console.log(rowhashView, rhView)
|
|
601
|
+
if (typeof rowhash.$rowhash !== "string" ||
|
|
602
|
+
typeof rowhashView.$rowhash !== "string" ||
|
|
603
|
+
rowhash.$rowhash !== rh1.$rowhash ||
|
|
604
|
+
rowhashView.$rowhash !== rhView.$rowhash) {
|
|
605
|
+
throw "$rowhash query failed";
|
|
606
|
+
}
|
|
660
607
|
});
|
|
661
608
|
}
|
|
662
609
|
exports.default = isomorphic;
|
|
@@ -19,11 +19,10 @@ export async function tryRun(desc: string, func: () => any, log?: Function){
|
|
|
19
19
|
export function tryRunP(desc: string, func: (resolve: any, reject: any) => any, log?: Function){
|
|
20
20
|
return new Promise(async (rv, rj) => {
|
|
21
21
|
try {
|
|
22
|
-
await func(rv, rj)
|
|
22
|
+
await func(rv, rj);
|
|
23
23
|
} catch(err: any){
|
|
24
|
-
log?.(JSON.stringify(err));
|
|
24
|
+
log?.(`${desc} failed: ` + JSON.stringify(err));
|
|
25
25
|
setTimeout(() => {
|
|
26
|
-
log?.("Throw err");
|
|
27
26
|
throw err;
|
|
28
27
|
}, 1000)
|
|
29
28
|
}
|
|
@@ -45,17 +44,6 @@ export default async function isomorphic(db: Partial<DbHandler> | Partial<DBHand
|
|
|
45
44
|
await db.items.delete({ });
|
|
46
45
|
|
|
47
46
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// await tryRun("UUID data", async () => {
|
|
51
|
-
// const r = await db.uuid_text.insert({}, { returning: "*"});
|
|
52
|
-
// throw r;
|
|
53
|
-
// })
|
|
54
|
-
|
|
55
|
-
// setTimeout(async () => {
|
|
56
|
-
// await db.any("DROP TABLE IF EXISTS tt; CREATE TABLE tt(id serial);");
|
|
57
|
-
|
|
58
|
-
// }, 500)
|
|
59
47
|
|
|
60
48
|
|
|
61
49
|
await tryRun("Prepare data", async () => {
|
|
@@ -471,8 +459,6 @@ export default async function isomorphic(db: Partial<DbHandler> | Partial<DBHand
|
|
|
471
459
|
console.log("TODO: socket.io stringifies dates")
|
|
472
460
|
});
|
|
473
461
|
|
|
474
|
-
await tryRun("Postgis examples", async () => {
|
|
475
|
-
|
|
476
462
|
await tryRun("Postgis examples", async () => {
|
|
477
463
|
await db.shapes.delete();
|
|
478
464
|
const p1 = { ST_GeomFromText: ["POINT(-1 1)", 4326] },
|
|
@@ -693,51 +679,6 @@ export default async function isomorphic(db: Partial<DbHandler> | Partial<DBHand
|
|
|
693
679
|
{ select: { id: 1, items2: { name: "$max" } }}
|
|
694
680
|
);
|
|
695
681
|
assert.deepStrictEqual(shortHandAggJoined, { id: 4, items2: [] });
|
|
696
|
-
// console.log(JSON.stringify(shortHandAggJoined, null, 2));
|
|
697
|
-
// throw 1;
|
|
698
|
-
|
|
699
|
-
/* TODO joins & aggs */
|
|
700
|
-
// const aggsJoined = await db.items.find(
|
|
701
|
-
// {},
|
|
702
|
-
// {
|
|
703
|
-
// select: {
|
|
704
|
-
// id: "$count",
|
|
705
|
-
// name: 1,
|
|
706
|
-
// items2: {
|
|
707
|
-
// id: 1
|
|
708
|
-
// }
|
|
709
|
-
// },
|
|
710
|
-
// orderBy: {
|
|
711
|
-
// id: -1
|
|
712
|
-
// }
|
|
713
|
-
// }
|
|
714
|
-
// );
|
|
715
|
-
// console.log(JSON.stringify(aggsJoined, null, 2))
|
|
716
|
-
// assert.deepStrictEqual(aggsJoined, [
|
|
717
|
-
// {
|
|
718
|
-
// "name": "a",
|
|
719
|
-
// "items2": [
|
|
720
|
-
// {
|
|
721
|
-
// "id": 1
|
|
722
|
-
// },
|
|
723
|
-
// {
|
|
724
|
-
// "id": 1
|
|
725
|
-
// }
|
|
726
|
-
// ],
|
|
727
|
-
// "id": "2"
|
|
728
|
-
// },
|
|
729
|
-
// {
|
|
730
|
-
// "name": "b",
|
|
731
|
-
// "items2": [],
|
|
732
|
-
// "id": "1"
|
|
733
|
-
// },
|
|
734
|
-
// {
|
|
735
|
-
// "name": "tx",
|
|
736
|
-
// "items2": [],
|
|
737
|
-
// "id": "1"
|
|
738
|
-
// }
|
|
739
|
-
// ], "Joined aggregation query failed");
|
|
740
|
-
|
|
741
682
|
});
|
|
742
683
|
|
|
743
684
|
|