@wxn0brp/db-string-query 0.0.7 → 0.0.9
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/.github/workflows/build.yml +18 -0
- package/CHANGELOG.md +44 -0
- package/bun.lock +118 -0
- package/dist/sql/handle/collection.d.ts +4 -0
- package/dist/sql/handle/collection.js +26 -0
- package/dist/sql/handle/delete.d.ts +1 -0
- package/dist/sql/handle/delete.js +11 -0
- package/dist/sql/handle/insert.d.ts +1 -0
- package/dist/sql/handle/insert.js +52 -0
- package/dist/sql/handle/select.d.ts +7 -0
- package/dist/sql/handle/select.js +55 -0
- package/dist/sql/handle/update.d.ts +1 -0
- package/dist/sql/handle/update.js +12 -0
- package/dist/sql/index.d.ts +2 -2
- package/dist/sql/index.js +10 -4
- package/dist/sql/utils/join.util.d.ts +10 -0
- package/dist/sql/utils/join.util.js +55 -0
- package/dist/sql/where.js +54 -17
- package/dist/types.d.ts +5 -1
- package/package.json +41 -39
- package/src/sql/handle/collection.ts +28 -0
- package/src/sql/handle/delete.ts +12 -0
- package/src/sql/handle/insert.ts +50 -0
- package/src/sql/handle/select.ts +68 -0
- package/src/sql/handle/update.ts +13 -0
- package/src/sql/index.ts +12 -13
- package/src/sql/utils/join.util.ts +73 -0
- package/src/sql/where.ts +53 -17
- package/src/types.ts +9 -1
- package/suglite.json +2 -2
- package/test/js.test.ts +103 -0
- package/test/sql/delete.test.ts +95 -0
- package/test/sql/index.test.ts +17 -0
- package/test/sql/insert.test.ts +95 -0
- package/test/sql/select.test.ts +92 -0
- package/test/sql/update.test.ts +85 -0
- package/test/sql/utils/join.test.ts +42 -0
- package/test/tsconfig.json +19 -0
- package/tsconfig.json +7 -3
- package/typedocs-generated/.nojekyll +1 -0
- package/typedocs-generated/404.html +76 -0
- package/typedocs-generated/assets/hierarchy.js +1 -0
- package/typedocs-generated/assets/highlight.css +78 -0
- package/typedocs-generated/assets/icons.js +18 -0
- package/typedocs-generated/assets/icons.svg +1 -0
- package/typedocs-generated/assets/main.js +60 -0
- package/typedocs-generated/assets/navigation.js +1 -0
- package/typedocs-generated/assets/search.js +1 -0
- package/typedocs-generated/assets/style.css +1633 -0
- package/typedocs-generated/classes/js.default.html +3 -0
- package/typedocs-generated/classes/sql_index.default.html +3 -0
- package/typedocs-generated/classes/sql_utils_join.util.JoinToRelationsEngine.html +3 -0
- package/typedocs-generated/functions/sql_handle_collection.handleCreate.html +1 -0
- package/typedocs-generated/functions/sql_handle_collection.handleDrop.html +1 -0
- package/typedocs-generated/functions/sql_handle_collection.handleExists.html +1 -0
- package/typedocs-generated/functions/sql_handle_collection.handleGet.html +1 -0
- package/typedocs-generated/functions/sql_handle_delete.handleDelete.html +1 -0
- package/typedocs-generated/functions/sql_handle_insert.handleInsert.html +1 -0
- package/typedocs-generated/functions/sql_handle_select.handleSelect.html +1 -0
- package/typedocs-generated/functions/sql_handle_select.parseJoinClauses.html +1 -0
- package/typedocs-generated/functions/sql_handle_select.parseSelectClause.html +1 -0
- package/typedocs-generated/functions/sql_handle_update.handleUpdate.html +1 -0
- package/typedocs-generated/functions/sql_utils.parseReturn.html +1 -0
- package/typedocs-generated/functions/sql_utils.parseSet.html +1 -0
- package/typedocs-generated/functions/sql_where.parseWhere.html +1 -0
- package/typedocs-generated/hierarchy.html +1 -0
- package/typedocs-generated/index.html +35 -0
- package/typedocs-generated/interfaces/types.Opts.html +3 -0
- package/typedocs-generated/interfaces/types.ValtheraParser.html +2 -0
- package/typedocs-generated/interfaces/types.ValtheraQuery.html +3 -0
- package/typedocs-generated/media/LICENSE +21 -0
- package/typedocs-generated/modules/.html +1 -0
- package/typedocs-generated/modules/index.html +1 -0
- package/typedocs-generated/modules/js.html +1 -0
- package/typedocs-generated/modules/sql_handle_collection.html +1 -0
- package/typedocs-generated/modules/sql_handle_delete.html +1 -0
- package/typedocs-generated/modules/sql_handle_insert.html +1 -0
- package/typedocs-generated/modules/sql_handle_select.html +1 -0
- package/typedocs-generated/modules/sql_handle_update.html +1 -0
- package/typedocs-generated/modules/sql_index.html +1 -0
- package/typedocs-generated/modules/sql_utils.html +1 -0
- package/typedocs-generated/modules/sql_utils_join.util.html +1 -0
- package/typedocs-generated/modules/sql_where.html +1 -0
- package/typedocs-generated/modules/types.html +1 -0
- package/typedocs-generated/modules.html +1 -0
- package/typedocs-generated/types/sql_utils_join.util.JoinClause.html +1 -0
- package/typedocs-generated/variables/.ValtheraDbParsers.html +1 -0
- package/typedocs-generated/variables/.ValtheraDbRelations.html +1 -0
- package/dist/sql/handle.d.ts +0 -12
- package/dist/sql/handle.js +0 -119
- package/src/sql/handle.ts +0 -129
|
@@ -14,8 +14,26 @@ concurrency:
|
|
|
14
14
|
cancel-in-progress: true
|
|
15
15
|
|
|
16
16
|
jobs:
|
|
17
|
+
test:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout code
|
|
22
|
+
uses: actions/checkout@v6
|
|
23
|
+
|
|
24
|
+
- uses: oven-sh/setup-bun@v2
|
|
25
|
+
with:
|
|
26
|
+
bun-version: latest
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: bun install
|
|
30
|
+
|
|
31
|
+
- name: Run unit tests
|
|
32
|
+
run: bun test
|
|
33
|
+
|
|
17
34
|
deploy:
|
|
18
35
|
runs-on: ubuntu-latest
|
|
36
|
+
needs: test
|
|
19
37
|
permissions:
|
|
20
38
|
contents: write
|
|
21
39
|
id-token: write
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
+
|
|
5
|
+
### [0.0.9](https://github.com/wxn0brP/ValtheraDB-string-query/compare/v0.0.8...v0.0.9) (2025-11-30)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* join support [#1](https://github.com/wxn0brP/ValtheraDB-string-query/issues/1) ([9628a84](https://github.com/wxn0brP/ValtheraDB-string-query/commit/9628a84ece45a5c221eaa58c29672943dd7cf9b8))
|
|
11
|
+
* join support [#2](https://github.com/wxn0brP/ValtheraDB-string-query/issues/2) ([a3ea7e5](https://github.com/wxn0brP/ValtheraDB-string-query/commit/a3ea7e5b78302c25e2339700f849a57f7704ca22))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* sql ; support ([647faf3](https://github.com/wxn0brP/ValtheraDB-string-query/commit/647faf3fb9c0a5c61d8e9d800d2b96a051ab50ce))
|
|
17
|
+
|
|
18
|
+
### 0.0.8 (2025-11-16)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* build workflow ([83e8e5e](https://github.com/wxn0brP/ValtheraDB-string-query/commit/83e8e5eed7ae027513248c2cb0e831fb2165312b))
|
|
24
|
+
* enhance sql engine and reorganize exports ([4afda95](https://github.com/wxn0brP/ValtheraDB-string-query/commit/4afda953b38eeb02644220a2eda548fdc824b249))
|
|
25
|
+
* exports ([c7354ec](https://github.com/wxn0brP/ValtheraDB-string-query/commit/c7354ec62bd443596d3edcefc9b8729a47f286be))
|
|
26
|
+
* imports ([0155739](https://github.com/wxn0brP/ValtheraDB-string-query/commit/01557398c8c77b9a66419ef40d7991d192e4636a))
|
|
27
|
+
* improve DROP command syntax handling ([ef9d942](https://github.com/wxn0brP/ValtheraDB-string-query/commit/ef9d9428918c8df7f42d1947b74ae523bed28a94))
|
|
28
|
+
* readme & small changes ([0df2679](https://github.com/wxn0brP/ValtheraDB-string-query/commit/0df2679c120daadd293a338e0c59ea8fa7cd88bf))
|
|
29
|
+
* simplify build and deploy workflow by using external template ([f8acd94](https://github.com/wxn0brP/ValtheraDB-string-query/commit/f8acd9429b25453262b1cd711b37524d139a56f1))
|
|
30
|
+
* **sql:** add collection handling methods for GET, CREATE, DROP, and EXISTS ([ea8b601](https://github.com/wxn0brP/ValtheraDB-string-query/commit/ea8b601a0c134f4309f5374be07819bbaf25c552))
|
|
31
|
+
* **sql:** check if where is null or "1" ([92008aa](https://github.com/wxn0brP/ValtheraDB-string-query/commit/92008aa0ecd42317f39fc8807b978dcb721f248a))
|
|
32
|
+
* **sql:** enhance query handling for CREATE, DROP, and EXISTS commands ([ad20f37](https://github.com/wxn0brP/ValtheraDB-string-query/commit/ad20f37676483bf4ffea65e49797aa5c08fd3d5a))
|
|
33
|
+
* types ([ed925aa](https://github.com/wxn0brP/ValtheraDB-string-query/commit/ed925aa5c195e323560fa25c47ee5f6e81a03fc3))
|
|
34
|
+
* types ([de6a23a](https://github.com/wxn0brP/ValtheraDB-string-query/commit/de6a23a2fe2037689ccaeab97ccad2c0c1d9e654))
|
|
35
|
+
* unit tests ([a88da49](https://github.com/wxn0brP/ValtheraDB-string-query/commit/a88da49b1f5277169cf198a824a9d9dc2038a96a))
|
|
36
|
+
* update parser to new db ([d61300a](https://github.com/wxn0brP/ValtheraDB-string-query/commit/d61300a0acdead9e8887e96cedd082ca68f87c5c))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Bug Fixes
|
|
40
|
+
|
|
41
|
+
* **sql:** ensure collection ([af3df0d](https://github.com/wxn0brP/ValtheraDB-string-query/commit/af3df0df7ae484b7bc9e7586887f002fc4677c3e))
|
|
42
|
+
* **sql:** improve regex for CREATE TABLE/COLLECTION command validation ([446ba29](https://github.com/wxn0brP/ValtheraDB-string-query/commit/446ba29e802fdd195d13e8b1fe91b0890aa67dc3))
|
|
43
|
+
* **sql:** insert ([97d393a](https://github.com/wxn0brP/ValtheraDB-string-query/commit/97d393a75b2bfa67aabe3aea60ef2e2e3378b5e5))
|
|
44
|
+
* where ([6e77c15](https://github.com/wxn0brP/ValtheraDB-string-query/commit/6e77c15c486fd9477d5579ba00ca5000785d868a))
|
package/bun.lock
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 1,
|
|
3
|
+
"configVersion": 1,
|
|
4
|
+
"workspaces": {
|
|
5
|
+
"": {
|
|
6
|
+
"name": "@wxn0brp/db-string-query",
|
|
7
|
+
"devDependencies": {
|
|
8
|
+
"@types/bun": "*",
|
|
9
|
+
"@types/node": "*",
|
|
10
|
+
"@wxn0brp/db-core": "^0.2.7",
|
|
11
|
+
"json5": "^2.2.3",
|
|
12
|
+
"tsc-alias": "*",
|
|
13
|
+
"typescript": "*",
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@wxn0brp/db-core": ">=0.2.7",
|
|
17
|
+
"json5": "^2.2.3",
|
|
18
|
+
},
|
|
19
|
+
"optionalPeers": [
|
|
20
|
+
"@wxn0brp/db-core",
|
|
21
|
+
"json5",
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
"packages": {
|
|
26
|
+
"@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
|
|
27
|
+
|
|
28
|
+
"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
|
|
29
|
+
|
|
30
|
+
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
|
|
31
|
+
|
|
32
|
+
"@types/bun": ["@types/bun@1.3.3", "", { "dependencies": { "bun-types": "1.3.3" } }, "sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g=="],
|
|
33
|
+
|
|
34
|
+
"@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="],
|
|
35
|
+
|
|
36
|
+
"@wxn0brp/db-core": ["@wxn0brp/db-core@0.2.12", "", { "dependencies": { "@wxn0brp/event-emitter": "^0.0.3" } }, "sha512-DQuYBDnC+XdouqS6aUwPqWW/2KIB4t6YqtGg5BDo7Ti8afHSukH3tj7IneVv/Aquhc6I9C8lUQVkindPG7H2wA=="],
|
|
37
|
+
|
|
38
|
+
"@wxn0brp/event-emitter": ["@wxn0brp/event-emitter@0.0.3", "", {}, "sha512-OYkyDJphUDlWSOArLs3kdXWsacQ/1AtLNQl23ffrSoIiUPpcTxTzvlFGE3Y5M50j9lstYH4Dtvbx7edOQnK2qA=="],
|
|
39
|
+
|
|
40
|
+
"anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
|
|
41
|
+
|
|
42
|
+
"array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="],
|
|
43
|
+
|
|
44
|
+
"binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
|
|
45
|
+
|
|
46
|
+
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
|
47
|
+
|
|
48
|
+
"bun-types": ["bun-types@1.3.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ=="],
|
|
49
|
+
|
|
50
|
+
"chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
|
|
51
|
+
|
|
52
|
+
"commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="],
|
|
53
|
+
|
|
54
|
+
"dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="],
|
|
55
|
+
|
|
56
|
+
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
|
|
57
|
+
|
|
58
|
+
"fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="],
|
|
59
|
+
|
|
60
|
+
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
|
61
|
+
|
|
62
|
+
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
|
63
|
+
|
|
64
|
+
"get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="],
|
|
65
|
+
|
|
66
|
+
"glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
|
67
|
+
|
|
68
|
+
"globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="],
|
|
69
|
+
|
|
70
|
+
"ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
|
|
71
|
+
|
|
72
|
+
"is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
|
|
73
|
+
|
|
74
|
+
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
|
|
75
|
+
|
|
76
|
+
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
|
|
77
|
+
|
|
78
|
+
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
|
|
79
|
+
|
|
80
|
+
"json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
|
|
81
|
+
|
|
82
|
+
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
|
|
83
|
+
|
|
84
|
+
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
|
85
|
+
|
|
86
|
+
"mylas": ["mylas@2.1.14", "", {}, "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog=="],
|
|
87
|
+
|
|
88
|
+
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
|
89
|
+
|
|
90
|
+
"path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="],
|
|
91
|
+
|
|
92
|
+
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
|
93
|
+
|
|
94
|
+
"plimit-lit": ["plimit-lit@1.6.1", "", { "dependencies": { "queue-lit": "^1.5.1" } }, "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA=="],
|
|
95
|
+
|
|
96
|
+
"queue-lit": ["queue-lit@1.5.2", "", {}, "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw=="],
|
|
97
|
+
|
|
98
|
+
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
|
|
99
|
+
|
|
100
|
+
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
|
|
101
|
+
|
|
102
|
+
"resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
|
|
103
|
+
|
|
104
|
+
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
|
|
105
|
+
|
|
106
|
+
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
|
|
107
|
+
|
|
108
|
+
"slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="],
|
|
109
|
+
|
|
110
|
+
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
|
111
|
+
|
|
112
|
+
"tsc-alias": ["tsc-alias@1.8.16", "", { "dependencies": { "chokidar": "^3.5.3", "commander": "^9.0.0", "get-tsconfig": "^4.10.0", "globby": "^11.0.4", "mylas": "^2.1.9", "normalize-path": "^3.0.0", "plimit-lit": "^1.2.6" }, "bin": { "tsc-alias": "dist/bin/index.js" } }, "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g=="],
|
|
113
|
+
|
|
114
|
+
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
115
|
+
|
|
116
|
+
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function handleGet(query: string): import("../../types.js").ValtheraQuery;
|
|
2
|
+
export declare function handleCreate(query: string): import("../../types.js").ValtheraQuery;
|
|
3
|
+
export declare function handleDrop(query: string): import("../../types.js").ValtheraQuery;
|
|
4
|
+
export declare function handleExists(query: string): import("../../types.js").ValtheraQuery;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { parseReturn } from "../utils.js";
|
|
2
|
+
export function handleGet(query) {
|
|
3
|
+
if (!/^GET\s+COLLECTIONS$/i.test(query)) {
|
|
4
|
+
throw new Error("Invalid GET COLLECTIONS syntax.");
|
|
5
|
+
}
|
|
6
|
+
return parseReturn("getCollections", []);
|
|
7
|
+
}
|
|
8
|
+
export function handleCreate(query) {
|
|
9
|
+
const match = query.match(/^CREATE\s+(?:TABLE|COLLECTION)\s+(IF\s+NOT\s+EXISTS\s+)?(\w+).*/i);
|
|
10
|
+
if (!match)
|
|
11
|
+
throw new Error("Invalid CREATE TABLE/COLLECTION syntax.");
|
|
12
|
+
return parseReturn("ensureCollection", [match[2]]);
|
|
13
|
+
}
|
|
14
|
+
export function handleDrop(query) {
|
|
15
|
+
const match = query.match(/^DROP\s+(?:TABLE|COLLECTION)\s+(?:IF\s+EXISTS\s+)?(\w+)$/i);
|
|
16
|
+
if (!match)
|
|
17
|
+
throw new Error("Invalid DROP TABLE/COLLECTION syntax.");
|
|
18
|
+
return parseReturn("removeCollection", [match[1]]);
|
|
19
|
+
}
|
|
20
|
+
export function handleExists(query) {
|
|
21
|
+
const match = query.match(/^EXISTS\s+(?:TABLE|COLLECTION)\s+(\w+)$/i);
|
|
22
|
+
if (!match)
|
|
23
|
+
throw new Error("Invalid EXISTS TABLE/COLLECTION syntax.");
|
|
24
|
+
return parseReturn("issetCollection", [match[1]]);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zcWwvaGFuZGxlL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWE7SUFDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN0QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUNyQixrRUFBa0UsQ0FDckUsQ0FBQztJQUNGLElBQUksQ0FBQyxLQUFLO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUN2RixJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUNyRSxPQUFPLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN0QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDLEtBQUs7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDdkUsT0FBTyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function handleDelete(query: string): import("../../types.js").ValtheraQuery;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { parseReturn } from "../../sql/utils.js";
|
|
2
|
+
import { parseWhere } from "../../sql/where.js";
|
|
3
|
+
export function handleDelete(query) {
|
|
4
|
+
const match = query.match(/DELETE FROM ([\w\/]+)(?: WHERE (.+))?/i);
|
|
5
|
+
if (!match)
|
|
6
|
+
throw new Error("Invalid DELETE syntax");
|
|
7
|
+
const collection = match[1];
|
|
8
|
+
const whereClause = match[2] ? parseWhere(match[2]) : {};
|
|
9
|
+
return parseReturn("remove", [collection, whereClause]);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NxbC9oYW5kbGUvZGVsZXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4QyxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWE7SUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQ3BFLElBQUksQ0FBQyxLQUFLO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRXJELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXpELE9BQU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function handleInsert(query: string): import("../../types.js").ValtheraQuery;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { parseReturn } from "../../sql/utils.js";
|
|
2
|
+
export function handleInsert(query) {
|
|
3
|
+
const match = query.match(/INSERT INTO ([\w\/]+)\s*\(([^)]+)\)\s*VALUES\s*\(([^)]+)\)/i);
|
|
4
|
+
if (!match)
|
|
5
|
+
throw new Error("Invalid INSERT syntax");
|
|
6
|
+
const collection = match[1];
|
|
7
|
+
const keys = match[2].split(/\s*,\s*/);
|
|
8
|
+
function splitByCommasOutsideQuotes(str) {
|
|
9
|
+
const tokens = [];
|
|
10
|
+
let current = '';
|
|
11
|
+
let inSingleQuote = false;
|
|
12
|
+
let inDoubleQuote = false;
|
|
13
|
+
for (let i = 0; i < str.length; i++) {
|
|
14
|
+
const char = str[i];
|
|
15
|
+
if ((char === "'") && !inDoubleQuote) {
|
|
16
|
+
inSingleQuote = !inSingleQuote;
|
|
17
|
+
current += char;
|
|
18
|
+
}
|
|
19
|
+
else if (char === '"' && !inSingleQuote) {
|
|
20
|
+
inDoubleQuote = !inDoubleQuote;
|
|
21
|
+
current += char;
|
|
22
|
+
}
|
|
23
|
+
else if (char === ',' && !inSingleQuote && !inDoubleQuote) {
|
|
24
|
+
tokens.push(current);
|
|
25
|
+
current = '';
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
current += char;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
tokens.push(current);
|
|
32
|
+
return tokens;
|
|
33
|
+
}
|
|
34
|
+
const rawValues = splitByCommasOutsideQuotes(match[3]);
|
|
35
|
+
const values = rawValues.map(v => {
|
|
36
|
+
v = v.trim();
|
|
37
|
+
if (v.length >= 2) {
|
|
38
|
+
if (v[0] === "'" && v[v.length - 1] === "'") {
|
|
39
|
+
v = v.substring(1, v.length - 1);
|
|
40
|
+
}
|
|
41
|
+
else if (v[0] === '"' && v[v.length - 1] === '"') {
|
|
42
|
+
v = v.substring(1, v.length - 1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return v;
|
|
46
|
+
});
|
|
47
|
+
if (keys.length !== values.length)
|
|
48
|
+
throw new Error("Number of columns and values does not match");
|
|
49
|
+
const data = Object.fromEntries(keys.map((k, i) => [k, isNaN(values[i]) ? values[i] : Number(values[i])]));
|
|
50
|
+
return parseReturn("add", [collection, data]);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NxbC9oYW5kbGUvaW5zZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekMsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3RDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUN6RixJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNyRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2QyxTQUFTLDBCQUEwQixDQUFDLEdBQVc7UUFDM0MsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkMsYUFBYSxHQUFHLENBQUMsYUFBYSxDQUFDO2dCQUMvQixPQUFPLElBQUksSUFBSSxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hDLGFBQWEsR0FBRyxDQUFDLGFBQWEsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLElBQUksQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQixPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLElBQUksSUFBSSxDQUFDO1lBQ3BCLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQztpQkFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2pELENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNsRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Opts } from "../../types.js";
|
|
2
|
+
export declare function handleSelect(query: string, opts?: Opts): import("../../types.js").ValtheraQuery;
|
|
3
|
+
export declare function parseJoinClauses(joinPart: string): Record<string, string>;
|
|
4
|
+
export declare function parseSelectClause(selectClause: string): {
|
|
5
|
+
select?: string[];
|
|
6
|
+
exclude?: string[];
|
|
7
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { parseReturn } from "../../sql/utils.js";
|
|
2
|
+
import { parseWhere } from "../../sql/where.js";
|
|
3
|
+
import { JoinToRelationsEngine } from "../utils/join.util.js";
|
|
4
|
+
export function handleSelect(query, opts) {
|
|
5
|
+
let whereClauseStr;
|
|
6
|
+
let mainQueryPart = query;
|
|
7
|
+
const whereIndex = query.toUpperCase().lastIndexOf(" WHERE ");
|
|
8
|
+
if (whereIndex !== -1) {
|
|
9
|
+
whereClauseStr = query.substring(whereIndex + 7).trim();
|
|
10
|
+
mainQueryPart = query.substring(0, whereIndex);
|
|
11
|
+
}
|
|
12
|
+
const match = mainQueryPart.match(/SELECT\s+(.+?)\s+FROM\s+([\w\/]+)((?:\s+JOIN\s+.+)*)?/i);
|
|
13
|
+
if (!match)
|
|
14
|
+
throw new Error("Invalid SELECT syntax");
|
|
15
|
+
const columnsPart = match[1].trim();
|
|
16
|
+
const collection = match[2];
|
|
17
|
+
const joinPart = match[3] || "";
|
|
18
|
+
const whereClause = whereClauseStr ? parseWhere(whereClauseStr) : {};
|
|
19
|
+
const findOpts = parseSelectClause(columnsPart);
|
|
20
|
+
if (joinPart && opts?.defaultDbKey) {
|
|
21
|
+
const joinClauses = parseJoinClauses(joinPart);
|
|
22
|
+
const relationsEngine = new JoinToRelationsEngine(opts.defaultDbKey, opts.tableDbMap);
|
|
23
|
+
const relations = relationsEngine.buildRelations(joinClauses, collection);
|
|
24
|
+
const path = [opts.defaultDbKey, collection];
|
|
25
|
+
return parseReturn("relation-find", [path, whereClause, relations, findOpts]);
|
|
26
|
+
}
|
|
27
|
+
return parseReturn("find", [collection, whereClause, {}, findOpts]);
|
|
28
|
+
}
|
|
29
|
+
export function parseJoinClauses(joinPart) {
|
|
30
|
+
const joinClauses = {};
|
|
31
|
+
const joinRegex = /\s+JOIN\s+([\w\/]+)(?:\s+AS\s+)?([\w\/]+)?\s+ON\s+([^\s]+)\s*=\s*([^\s]+)/gi;
|
|
32
|
+
let match;
|
|
33
|
+
while ((match = joinRegex.exec(joinPart)) !== null) {
|
|
34
|
+
const table = match[1];
|
|
35
|
+
const alias = match[2] || table;
|
|
36
|
+
const condition = `${match[3]} = ${match[4]}`;
|
|
37
|
+
joinClauses[alias] = condition;
|
|
38
|
+
}
|
|
39
|
+
return joinClauses;
|
|
40
|
+
}
|
|
41
|
+
export function parseSelectClause(selectClause) {
|
|
42
|
+
selectClause = selectClause.trim();
|
|
43
|
+
if (selectClause === "*")
|
|
44
|
+
return {};
|
|
45
|
+
const excludeMatch = selectClause.match(/\*\s+EXCLUDE\s+(.+)/i);
|
|
46
|
+
if (excludeMatch) {
|
|
47
|
+
return {
|
|
48
|
+
exclude: excludeMatch[1].split(/\s*,\s*/),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
select: selectClause.split(/\s*,\s*/),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NxbC9oYW5kbGUvc2VsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLFVBQVUsWUFBWSxDQUN4QixLQUFhLEVBQ2IsSUFBVztJQUVYLElBQUksY0FBa0MsQ0FBQztJQUN2QyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFMUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BCLGNBQWMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4RCxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RixJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUVyRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVyRSxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVoRCxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0MsT0FBTyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQzdDLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7SUFDL0MsTUFBTSxTQUFTLEdBQUcsNkVBQTZFLENBQUM7SUFDaEcsSUFBSSxLQUFLLENBQUM7SUFDVixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFlBQW9CO0lBQ2xELFlBQVksR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbkMsSUFBSSxZQUFZLEtBQUssR0FBRztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXBDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNoRSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2YsT0FBTztZQUNILE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUM1QyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU87UUFDSCxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7S0FDeEMsQ0FBQztBQUNOLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function handleUpdate(query: string): import("../../types.js").ValtheraQuery;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { parseReturn, parseSet } from "../../sql/utils.js";
|
|
2
|
+
import { parseWhere } from "../../sql/where.js";
|
|
3
|
+
export function handleUpdate(query) {
|
|
4
|
+
const match = query.match(/UPDATE\s+([\w\/]+)\s+SET\s+(.+)\s+WHERE\s+(.+)/i);
|
|
5
|
+
if (!match)
|
|
6
|
+
throw new Error("Invalid UPDATE syntax");
|
|
7
|
+
const collection = match[1];
|
|
8
|
+
const setClause = parseSet(match[2]);
|
|
9
|
+
const whereClause = parseWhere(match[3]);
|
|
10
|
+
return parseReturn("update", [collection, whereClause, setClause]);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NxbC9oYW5kbGUvdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3RDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUM3RSxJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUVyRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QyxPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQyJ9
|
package/dist/sql/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ValtheraParser } from "../types.js";
|
|
1
|
+
import { Opts, ValtheraParser } from "../types.js";
|
|
2
2
|
declare class SQLParser implements ValtheraParser {
|
|
3
|
-
parse(query: string): import("../types.js").ValtheraQuery;
|
|
3
|
+
parse(query: string, opts?: Opts): import("../types.js").ValtheraQuery;
|
|
4
4
|
}
|
|
5
5
|
export default SQLParser;
|
package/dist/sql/index.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import { handleCreate,
|
|
1
|
+
import { handleCreate, handleDrop, handleExists, handleGet } from "./handle/collection.js";
|
|
2
|
+
import { handleDelete } from "./handle/delete.js";
|
|
3
|
+
import { handleInsert } from "./handle/insert.js";
|
|
4
|
+
import { handleSelect } from "./handle/select.js";
|
|
5
|
+
import { handleUpdate } from "./handle/update.js";
|
|
2
6
|
class SQLParser {
|
|
3
|
-
parse(query) {
|
|
7
|
+
parse(query, opts) {
|
|
4
8
|
query = query.replace(/\s+/g, " ").trim();
|
|
9
|
+
if (query.endsWith(";"))
|
|
10
|
+
query = query.slice(0, -1);
|
|
5
11
|
const tokens = query.split(/\s+/);
|
|
6
12
|
const method = tokens[0].toUpperCase();
|
|
7
13
|
if (method === "SELECT") {
|
|
8
|
-
return handleSelect(query);
|
|
14
|
+
return handleSelect(query, opts);
|
|
9
15
|
}
|
|
10
16
|
else if (method === "INSERT") {
|
|
11
17
|
return handleInsert(query);
|
|
@@ -35,4 +41,4 @@ class SQLParser {
|
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
export default SQLParser;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3FsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsTUFBTSxTQUFTO0lBQ1gsS0FBSyxDQUNELEtBQWEsRUFDYixJQUFXO1FBRVgsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2QyxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELGFBQWE7YUFDUixJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQUVELGVBQWUsU0FBUyxDQUFDIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RelationTypes } from "@wxn0brp/db-core";
|
|
2
|
+
export type JoinClause = Record<string, string>;
|
|
3
|
+
export declare class JoinToRelationsEngine {
|
|
4
|
+
private defaultDbKey;
|
|
5
|
+
private tableDbMap?;
|
|
6
|
+
private knownForeignKeys;
|
|
7
|
+
constructor(defaultDbKey: string, tableDbMap?: Record<string, string>);
|
|
8
|
+
private identifyPkFk;
|
|
9
|
+
buildRelations(joinClauses: JoinClause, mainTable: string): RelationTypes.Relation;
|
|
10
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export class JoinToRelationsEngine {
|
|
2
|
+
defaultDbKey;
|
|
3
|
+
tableDbMap;
|
|
4
|
+
knownForeignKeys = new Set();
|
|
5
|
+
constructor(defaultDbKey, tableDbMap) {
|
|
6
|
+
this.defaultDbKey = defaultDbKey;
|
|
7
|
+
this.tableDbMap = tableDbMap;
|
|
8
|
+
}
|
|
9
|
+
identifyPkFk(left, right, mainTable, knownFks) {
|
|
10
|
+
const [leftTable, leftField] = left.split(".");
|
|
11
|
+
const [rightTable, rightField] = right.split(".");
|
|
12
|
+
// Check if one of the fields is already known as a foreign key
|
|
13
|
+
const leftFull = `${leftTable}.${leftField}`;
|
|
14
|
+
const rightFull = `${rightTable}.${rightField}`;
|
|
15
|
+
if (knownFks.has(leftFull))
|
|
16
|
+
return { pk: right, fk: left };
|
|
17
|
+
else if (knownFks.has(rightFull))
|
|
18
|
+
return { pk: left, fk: right };
|
|
19
|
+
// If either of the above conditions are met, use a heuristic: set pk to the field named "id" or "_id"
|
|
20
|
+
if (leftField === "id" || leftField === "_id") {
|
|
21
|
+
return { pk: left, fk: right };
|
|
22
|
+
}
|
|
23
|
+
else if (rightField === "id" || rightField === "_id") {
|
|
24
|
+
return { pk: right, fk: left };
|
|
25
|
+
}
|
|
26
|
+
if (leftTable === mainTable)
|
|
27
|
+
return { pk: left, fk: right };
|
|
28
|
+
else if (rightTable === mainTable)
|
|
29
|
+
return { pk: right, fk: left };
|
|
30
|
+
// If still unsure, throw an error
|
|
31
|
+
throw new Error(`Cannot determine pk/fk from condition: "${left} = ${right}"`);
|
|
32
|
+
}
|
|
33
|
+
buildRelations(joinClauses, mainTable) {
|
|
34
|
+
const relations = {};
|
|
35
|
+
const knownFks = new Set(this.knownForeignKeys);
|
|
36
|
+
for (const [alias, condition] of Object.entries(joinClauses)) {
|
|
37
|
+
const [left, right] = condition.split(/\s*=\s*/);
|
|
38
|
+
const { pk, fk } = this.identifyPkFk(left, right, mainTable, knownFks);
|
|
39
|
+
const [pkTable, pkField] = pk.split(".");
|
|
40
|
+
const [fkTable, fkField] = fk.split(".");
|
|
41
|
+
knownFks.add(`${fkTable}.${fkField}`);
|
|
42
|
+
const dbKey = this.tableDbMap?.[fkTable] || this.defaultDbKey;
|
|
43
|
+
relations[alias] = {
|
|
44
|
+
type: "1n",
|
|
45
|
+
path: [dbKey, fkTable],
|
|
46
|
+
pk: pkField,
|
|
47
|
+
fk: fkField,
|
|
48
|
+
as: alias,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
this.knownForeignKeys = knownFks;
|
|
52
|
+
return relations;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pbi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NxbC91dGlscy9qb2luLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLHFCQUFxQjtJQUlsQjtJQUNBO0lBSkosZ0JBQWdCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbEQsWUFDWSxZQUFvQixFQUNwQixVQUFtQztRQURuQyxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtJQUMzQyxDQUFDO0lBRUcsWUFBWSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsU0FBaUIsRUFBRSxRQUFxQjtRQUN0RixNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxELCtEQUErRDtRQUMvRCxNQUFNLFFBQVEsR0FBRyxHQUFHLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyxHQUFHLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUVoRCxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM5QixJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUVuQyxzR0FBc0c7UUFDdEcsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLFNBQVMsS0FBSyxTQUFTO1lBQ3ZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUM5QixJQUFJLFVBQVUsS0FBSyxTQUFTO1lBQzdCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUVuQyxrQ0FBa0M7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVNLGNBQWMsQ0FDakIsV0FBdUIsRUFDdkIsU0FBaUI7UUFFakIsTUFBTSxTQUFTLEdBQTJCLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVoRCxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVqRCxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFdkUsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV6QyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7WUFFOUQsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHO2dCQUNmLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7Z0JBQ3RCLEVBQUUsRUFBRSxPQUFPO2dCQUNYLEVBQUUsRUFBRSxPQUFPO2dCQUNYLEVBQUUsRUFBRSxLQUFLO2FBQ1osQ0FBQztRQUNOLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1FBRWpDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSiJ9
|