datafolder 1.0.2 → 1.0.4
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/README.md +34 -31
- package/index.js +1 -3
- package/package.json +5 -3
- package/sample.js +37 -37
- package/scripts/airbnb.js +10 -11
- package/scripts/airbnb2.js +10 -11
- package/scripts/airbnb2_queries.js +20 -22
- package/scripts/airbnb_queries.js +23 -22
- package/scripts/downloadFile.js +29 -31
- package/scripts/express.js +7 -5
- package/scripts/fastify.js +12 -11
- package/scripts/flights.js +9 -9
- package/scripts/flights2.js +9 -9
- package/scripts/flights2_queries.js +107 -105
- package/scripts/flights_queries.js +113 -109
- package/src/QyAcl.js +153 -152
- package/src/QyAclSaver.js +16 -10
- package/src/QyAclSaver_Worker.js +21 -15
- package/src/QyAclWriter.js +23 -13
- package/src/QyBatch.js +298 -263
- package/src/QyBinWriter.js +49 -37
- package/src/QyCD.js +13 -14
- package/src/QyCache.js +177 -140
- package/src/QyCompressor.js +71 -45
- package/src/QyCompressor_Worker.js +17 -9
- package/src/QyDB.js +67 -12
- package/src/QyDefaultOptions.js +13 -10
- package/src/QyDir.js +89 -53
- package/src/QyFetch.js +27 -24
- package/src/QyFile.js +89 -77
- package/src/QyFileContentUtils.js +129 -132
- package/src/QyFileLogger.js +63 -41
- package/src/QyIndex.js +175 -197
- package/src/QyIndexPropTree.js +25 -25
- package/src/QyIntersectNode.js +34 -31
- package/src/QyItem.js +54 -52
- package/src/QyJsonSaver.js +12 -6
- package/src/QyKVData.js +279 -245
- package/src/QyKVDataCleaner.js +12 -6
- package/src/QyKVDataCleaner_Worker.js +77 -59
- package/src/QyKVDataLoader.js +67 -46
- package/src/QyKVDataSaver.js +15 -9
- package/src/QyKVDataSaver_Worker.js +83 -60
- package/src/QyLogFileSaver.js +12 -6
- package/src/QyLogFileSaver_Worker.js +24 -14
- package/src/QyLogger.js +51 -40
- package/src/QyMessageWorker.js +43 -29
- package/src/QyMessager.js +74 -54
- package/src/QyMessager_Run.js +20 -7
- package/src/QyMod.js +15 -11
- package/src/QyOpRunner.js +58 -41
- package/src/QyQueue.js +35 -30
- package/src/QySaver.js +52 -29
- package/src/QySnapshotCompactor.js +15 -9
- package/src/QySnapshotCompactor_Worker.js +131 -110
- package/src/QySnapshotSaver.js +15 -9
- package/src/QySnapshotSaver_Worker.js +125 -110
- package/src/QySnapshots.js +264 -242
- package/src/QyStructure.js +35 -27
- package/src/QyTrigger.js +62 -55
- package/src/QyUnionNode.js +54 -56
- package/src/QyUtils.js +170 -158
- package/src/QyWorker.js +34 -20
- package/src/hackernews.js +63 -71
- package/src/rpc/getFileContent.js +7 -7
- package/src/rpc/getSubItems.js +12 -28
- package/src/rpc/queryFiles.js +2 -25
- package/src/simulate.js +85 -80
- package/src/simulate2.js +77 -78
- package/src/soc_pokec.js +44 -32
- package/static/datafolderui/QyStyledElement.js +12 -12
- package/static/datafolderui/QyUIFolderTree.js +20 -20
- package/static/datafolderui/QyUIUtils.js +8 -8
- package/static/datafolderui/explore-tree.js +31 -31
- package/static/datafolderui/folder-tree.js +2 -2
- package/static/datafolderui/hscrpt.js +9 -17
- package/static/datafolderui/json-view.js +3 -5
- package/static/datafolderui/kv-input.js +15 -15
- package/static/datafolderui/list-input.js +17 -17
- package/static/datafolderui/main-page.js +18 -18
- package/static/datafolderui/num-input.js +5 -5
- package/static/datafolderui/query-editor.js +6 -1
- package/static/datafolderui/querySelectorShadowRoot.js +15 -19
- package/static/datafolderui/resizable-input.js +18 -18
package/scripts/downloadFile.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { createWriteStream } from "fs";
|
|
2
|
+
import { get } from "https";
|
|
3
|
+
import { ensureParentDir, folderOrFileExists } from "../src/QyUtils.js";
|
|
4
|
+
import { logger } from "../src/QyLogger.js";
|
|
5
5
|
|
|
6
6
|
async function downloadFile(fileUrl, filePath) {
|
|
7
7
|
if (await folderOrFileExists(filePath)) return;
|
|
@@ -11,32 +11,30 @@ async function downloadFile(fileUrl, filePath) {
|
|
|
11
11
|
resolve = res;
|
|
12
12
|
reject = rej;
|
|
13
13
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
reject(err.message);
|
|
39
|
-
});
|
|
14
|
+
get(fileUrl, (response) => {
|
|
15
|
+
if (response.statusCode !== 200) {
|
|
16
|
+
logger.error(`Download failed: Status Code ${response.statusCode}`);
|
|
17
|
+
reject(response.statusCode);
|
|
18
|
+
} else {
|
|
19
|
+
const fileStream = createWriteStream(filePath);
|
|
20
|
+
let accu = 0;
|
|
21
|
+
response.on("data", (chunk) => {
|
|
22
|
+
fileStream.write(chunk);
|
|
23
|
+
accu += chunk.length;
|
|
24
|
+
if (accu >= 1000_000) {
|
|
25
|
+
process.stdout.write(".");
|
|
26
|
+
accu = 0;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
response.on("end", () => {
|
|
30
|
+
fileStream.close();
|
|
31
|
+
resolve();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}).on("error", (err) => {
|
|
35
|
+
logger.error(`Request error: ${err.message}`);
|
|
36
|
+
reject(err.message);
|
|
37
|
+
});
|
|
40
38
|
return promise;
|
|
41
39
|
}
|
|
42
|
-
|
|
40
|
+
export { downloadFile };
|
package/scripts/express.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { QyDB } from "../src/QyDB.js";
|
|
3
|
+
import Express from "express";
|
|
4
|
+
import { __dirname } from "../src/QyUtils.js";
|
|
3
5
|
|
|
4
6
|
const config = {
|
|
5
7
|
port: 3629,
|
|
6
8
|
qyDBDataFolder: "./tmp/QyExpress",
|
|
7
|
-
staticRoot:
|
|
8
|
-
rpcFolder:
|
|
9
|
+
staticRoot: join(__dirname, "../static/"),
|
|
10
|
+
rpcFolder: join(__dirname, "rpc"),
|
|
9
11
|
};
|
|
10
12
|
|
|
11
13
|
const { port, qyDBDataFolder } = config;
|
|
12
|
-
const app =
|
|
14
|
+
const app = Express();
|
|
13
15
|
const qyDB = new QyDB(qyDBDataFolder);
|
|
14
16
|
|
|
15
17
|
let server;
|
package/scripts/fastify.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { join, basename } from "node:path";
|
|
3
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
4
|
+
import fastifyStatic from "@fastify/static";
|
|
5
|
+
import fastifyCompress from "@fastify/compress";
|
|
6
|
+
import { QyDB } from "../src/QyDB.js";
|
|
7
|
+
import { folderOrFileExists, __dirname } from "../src/QyUtils.js";
|
|
8
|
+
import Fastify from "fastify";
|
|
8
9
|
|
|
9
10
|
const config = {
|
|
10
11
|
port: 3628,
|
|
11
|
-
staticRoot:
|
|
12
|
-
rpcFolder:
|
|
12
|
+
staticRoot: join(__dirname, "../static/"),
|
|
13
|
+
rpcFolder: join(__dirname, "../src/rpc"),
|
|
13
14
|
};
|
|
14
15
|
const { port, staticRoot } = config;
|
|
15
16
|
|
|
16
|
-
const fastify =
|
|
17
|
+
const fastify = Fastify({ logger: false, forceCloseConnections: true });
|
|
17
18
|
|
|
18
19
|
const qyDB = new QyDB();
|
|
19
20
|
|
|
@@ -35,8 +36,8 @@ async function insertRpcs() {
|
|
|
35
36
|
const { rpcFolder } = config;
|
|
36
37
|
if (await folderOrFileExists(rpcFolder)) {
|
|
37
38
|
await Promise.all(
|
|
38
|
-
(await
|
|
39
|
-
qyDB.insertRpc(
|
|
39
|
+
(await readdir(rpcFolder)).map(async (x) => {
|
|
40
|
+
qyDB.insertRpc(basename(x, ".js"), (await readFile(join(rpcFolder, x))).toString());
|
|
40
41
|
}),
|
|
41
42
|
);
|
|
42
43
|
}
|
package/scripts/flights.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// node --prof profile.js
|
|
2
2
|
// node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { rm } from "node:fs/promises";
|
|
6
|
+
import { QyDB } from "../src/QyDB.js";
|
|
7
|
+
import { folderOrFileExists } from "../src/QyUtils.js";
|
|
8
|
+
import { runQueries } from "./flights_queries.js";
|
|
9
9
|
|
|
10
10
|
logger.level = "info";
|
|
11
11
|
|
|
12
|
-
const arangoJsonFolderPath = "
|
|
12
|
+
const arangoJsonFolderPath = "D:\\scripts\\GraphCourse_DemoData_ArangoDB-2";
|
|
13
13
|
const dataFolder = "./tmp/flights";
|
|
14
14
|
|
|
15
15
|
const qyDB = new QyDB(dataFolder, { preloadFoldersAtStart: false });
|
|
@@ -17,7 +17,7 @@ const qyDB = new QyDB(dataFolder, { preloadFoldersAtStart: false });
|
|
|
17
17
|
run();
|
|
18
18
|
|
|
19
19
|
function insertAirports() {
|
|
20
|
-
const data = JSON.parse(
|
|
20
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "airports.json")));
|
|
21
21
|
console.time("insertAirports");
|
|
22
22
|
const { batch } = qyDB;
|
|
23
23
|
for (const record of data) {
|
|
@@ -28,7 +28,7 @@ function insertAirports() {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function insertFlights() {
|
|
31
|
-
const data = JSON.parse(
|
|
31
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "flights.json")));
|
|
32
32
|
console.time("insertFlights");
|
|
33
33
|
const { batch } = qyDB;
|
|
34
34
|
for (let i = 0; i < data.length; ++i) {
|
package/scripts/flights2.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
// node --prof profile.js
|
|
2
2
|
// node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { rm } from "node:fs/promises";
|
|
6
|
+
import { QyDB } from "../src/QyDB.js";
|
|
7
|
+
import { folderOrFileExists } from "../src/QyUtils.js";
|
|
8
|
+
import { runQueries } from "./flights2_queries.js";
|
|
9
9
|
|
|
10
10
|
logger.level = "info";
|
|
11
11
|
|
|
12
|
-
const arangoJsonFolderPath = "
|
|
12
|
+
const arangoJsonFolderPath = "D:\\scripts\\GraphCourse_DemoData_ArangoDB-2";
|
|
13
13
|
const dataFolder = "./tmp/flights2";
|
|
14
14
|
const qyDB = new QyDB(dataFolder, { preloadFoldersAtStart: false });
|
|
15
15
|
|
|
16
16
|
run();
|
|
17
17
|
|
|
18
18
|
function insertAirports() {
|
|
19
|
-
const data = JSON.parse(
|
|
19
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "airports.json")));
|
|
20
20
|
console.time("insertAirports");
|
|
21
21
|
const { batch } = qyDB;
|
|
22
22
|
for (const record of data) {
|
|
@@ -28,7 +28,7 @@ function insertAirports() {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function insertFlights() {
|
|
31
|
-
const data = JSON.parse(
|
|
31
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "flights.json")));
|
|
32
32
|
console.time("insertFlights");
|
|
33
33
|
const { batch } = qyDB;
|
|
34
34
|
for (let i = 0; i < data.length; ++i) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { deepEqual } from "node:assert/strict";
|
|
2
2
|
|
|
3
3
|
// Return the names of all airports one can reach
|
|
4
4
|
// directly (1 step) from Los Angeles International
|
|
@@ -6,94 +6,93 @@ const assert = require("node:assert/strict");
|
|
|
6
6
|
|
|
7
7
|
function query1(qyDB) {
|
|
8
8
|
console.time("query1");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
]);
|
|
9
|
+
deepEqual(
|
|
10
|
+
[...new Set(qyDB.queryFiles("flights/**", { _from: "airports/LAX" }).map((x) => x.prop("_to"))).values()],
|
|
11
|
+
[
|
|
12
|
+
"airports/CVG",
|
|
13
|
+
"airports/SMF",
|
|
14
|
+
"airports/ATL",
|
|
15
|
+
"airports/MSP",
|
|
16
|
+
"airports/DFW",
|
|
17
|
+
"airports/PHL",
|
|
18
|
+
"airports/IAH",
|
|
19
|
+
"airports/TUS",
|
|
20
|
+
"airports/ORD",
|
|
21
|
+
"airports/PDX",
|
|
22
|
+
"airports/MIA",
|
|
23
|
+
"airports/SFO",
|
|
24
|
+
"airports/DEN",
|
|
25
|
+
"airports/IAD",
|
|
26
|
+
"airports/SJC",
|
|
27
|
+
"airports/PHX",
|
|
28
|
+
"airports/SEA",
|
|
29
|
+
"airports/SLC",
|
|
30
|
+
"airports/JFK",
|
|
31
|
+
"airports/SAN",
|
|
32
|
+
"airports/ONT",
|
|
33
|
+
"airports/LAS",
|
|
34
|
+
"airports/MCI",
|
|
35
|
+
"airports/MDW",
|
|
36
|
+
"airports/FLL",
|
|
37
|
+
"airports/AUS",
|
|
38
|
+
"airports/EWR",
|
|
39
|
+
"airports/CLE",
|
|
40
|
+
"airports/SBP",
|
|
41
|
+
"airports/MEM",
|
|
42
|
+
"airports/SBA",
|
|
43
|
+
"airports/CLT",
|
|
44
|
+
"airports/COS",
|
|
45
|
+
"airports/ASE",
|
|
46
|
+
"airports/ICT",
|
|
47
|
+
"airports/HOU",
|
|
48
|
+
"airports/YUM",
|
|
49
|
+
"airports/STL",
|
|
50
|
+
"airports/FAT",
|
|
51
|
+
"airports/ABQ",
|
|
52
|
+
"airports/BOI",
|
|
53
|
+
"airports/BOS",
|
|
54
|
+
"airports/LIH",
|
|
55
|
+
"airports/HNL",
|
|
56
|
+
"airports/SMX",
|
|
57
|
+
"airports/MRY",
|
|
58
|
+
"airports/DTW",
|
|
59
|
+
"airports/RNO",
|
|
60
|
+
"airports/MCO",
|
|
61
|
+
"airports/OXR",
|
|
62
|
+
"airports/OAK",
|
|
63
|
+
"airports/OGG",
|
|
64
|
+
"airports/KOA",
|
|
65
|
+
"airports/BWI",
|
|
66
|
+
"airports/CLD",
|
|
67
|
+
"airports/IND",
|
|
68
|
+
"airports/PSP",
|
|
69
|
+
"airports/ELP",
|
|
70
|
+
"airports/TPA",
|
|
71
|
+
"airports/OKC",
|
|
72
|
+
"airports/MSY",
|
|
73
|
+
"airports/SNA",
|
|
74
|
+
"airports/IYK",
|
|
75
|
+
"airports/IPL",
|
|
76
|
+
"airports/SAT",
|
|
77
|
+
"airports/MOD",
|
|
78
|
+
"airports/BNA",
|
|
79
|
+
"airports/DCA",
|
|
80
|
+
"airports/SGU",
|
|
81
|
+
"airports/BFL",
|
|
82
|
+
"airports/EUG",
|
|
83
|
+
"airports/EGE",
|
|
84
|
+
"airports/GEG",
|
|
85
|
+
"airports/BDL",
|
|
86
|
+
"airports/JAX",
|
|
87
|
+
"airports/CMH",
|
|
88
|
+
"airports/PIT",
|
|
89
|
+
"airports/RDU",
|
|
90
|
+
"airports/SJU",
|
|
91
|
+
"airports/XNA",
|
|
92
|
+
"airports/MTJ",
|
|
93
|
+
"airports/JAC",
|
|
94
|
+
],
|
|
95
|
+
);
|
|
97
96
|
console.timeEnd("query1");
|
|
98
97
|
}
|
|
99
98
|
|
|
@@ -111,24 +110,25 @@ function query1(qyDB) {
|
|
|
111
110
|
|
|
112
111
|
function query2(qyDB) {
|
|
113
112
|
console.time("query2");
|
|
114
|
-
|
|
113
|
+
deepEqual(
|
|
115
114
|
qyDB
|
|
116
115
|
.queryFiles(["flights", "*", 1, (x) => x >= 5 && x <= 7], {
|
|
117
116
|
$or: [{ _from: "airports/BIS" }, { _to: "airports/BIS" }],
|
|
118
117
|
})
|
|
119
|
-
.map((x) => x.
|
|
118
|
+
.map((x) => x.prop("FlightNum"))
|
|
119
|
+
.sort((x, y) => x - y),
|
|
120
120
|
[
|
|
121
121
|
6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
|
|
122
122
|
6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
|
|
123
123
|
5650, 6636, 6678, 1087,
|
|
124
|
-
],
|
|
124
|
+
].sort((x, y) => x - y),
|
|
125
125
|
);
|
|
126
126
|
console.timeEnd("query2");
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
function query3(qyDB) {
|
|
130
130
|
console.time("query3");
|
|
131
|
-
|
|
131
|
+
deepEqual(
|
|
132
132
|
qyDB
|
|
133
133
|
.queryFiles(["flights", "*", 1, (x) => x >= 1 && x <= 7], {
|
|
134
134
|
$or: [
|
|
@@ -136,7 +136,8 @@ function query3(qyDB) {
|
|
|
136
136
|
{ _from: "airports/MSP", _to: "airports/BOI" },
|
|
137
137
|
],
|
|
138
138
|
})
|
|
139
|
-
.map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
|
|
139
|
+
.map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
|
|
140
|
+
.sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
|
|
140
141
|
[
|
|
141
142
|
{
|
|
142
143
|
_from: "airports/BOI",
|
|
@@ -333,7 +334,7 @@ function query3(qyDB) {
|
|
|
333
334
|
_to: "airports/BOI",
|
|
334
335
|
ArrTimeUTC: "2008-01-08T06:29:00.000Z",
|
|
335
336
|
},
|
|
336
|
-
],
|
|
337
|
+
].sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
|
|
337
338
|
);
|
|
338
339
|
|
|
339
340
|
console.timeEnd("query3");
|
|
@@ -350,7 +351,7 @@ function query3(qyDB) {
|
|
|
350
351
|
|
|
351
352
|
function query4(qyDB) {
|
|
352
353
|
console.time("query4");
|
|
353
|
-
|
|
354
|
+
deepEqual(
|
|
354
355
|
qyDB.queryFiles(["flights", "*", 1, 5], { FlightNum: 860 }).map((x) => x.view(["_from", "_to"])),
|
|
355
356
|
[
|
|
356
357
|
{ _from: "airports/IAD", _to: "airports/BOS" },
|
|
@@ -365,10 +366,10 @@ function query4(qyDB) {
|
|
|
365
366
|
|
|
366
367
|
function query5(qyDB) {
|
|
367
368
|
console.time("query5");
|
|
368
|
-
|
|
369
|
+
deepEqual(
|
|
369
370
|
qyDB
|
|
370
371
|
.queryFiles("**", { vip: true })
|
|
371
|
-
.map((x) => x.
|
|
372
|
+
.map((x) => x.prop("name"))
|
|
372
373
|
.sort(),
|
|
373
374
|
[
|
|
374
375
|
"Amarillo International",
|
|
@@ -390,7 +391,7 @@ function query5(qyDB) {
|
|
|
390
391
|
|
|
391
392
|
function query6(qyDB) {
|
|
392
393
|
console.time("query6");
|
|
393
|
-
|
|
394
|
+
deepEqual(
|
|
394
395
|
qyDB
|
|
395
396
|
.queryFiles("flights/**", {
|
|
396
397
|
FlightNum: { $or: [859, 860] },
|
|
@@ -407,25 +408,26 @@ function query6(qyDB) {
|
|
|
407
408
|
|
|
408
409
|
function query7(qyDB) {
|
|
409
410
|
console.time("query7");
|
|
410
|
-
|
|
411
|
+
deepEqual(
|
|
411
412
|
qyDB
|
|
412
413
|
.queryFiles(["flights", "*", { $or: [1] }, [5, 6, 7]], {
|
|
413
414
|
$or: [{ _from: "airports/BIS" }, { _to: "airports/BIS" }],
|
|
414
415
|
})
|
|
415
|
-
.map((x) => x.
|
|
416
|
+
.map((x) => x.prop("FlightNum"))
|
|
417
|
+
.sort((x, y) => x - y),
|
|
416
418
|
[
|
|
417
419
|
6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
|
|
418
420
|
6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
|
|
419
421
|
5650, 6636, 6678, 1087,
|
|
420
|
-
],
|
|
422
|
+
].sort((x, y) => x - y),
|
|
421
423
|
);
|
|
422
424
|
console.timeEnd("query7");
|
|
423
425
|
}
|
|
424
426
|
|
|
425
427
|
function query8(qyDB) {
|
|
426
428
|
console.time("query8");
|
|
427
|
-
|
|
428
|
-
qyDB.queryFiles("**", { name: "Thigpen " }).map((x) => x.
|
|
429
|
+
deepEqual(
|
|
430
|
+
qyDB.queryFiles("**", { name: "Thigpen " }).map((x) => x.prop("name")),
|
|
429
431
|
["Thigpen "],
|
|
430
432
|
);
|
|
431
433
|
console.timeEnd("query8");
|
|
@@ -450,4 +452,4 @@ function runQueries(qyDB) {
|
|
|
450
452
|
query8(qyDB);
|
|
451
453
|
}
|
|
452
454
|
|
|
453
|
-
|
|
455
|
+
export { runQueries };
|