@nicia-ai/typegraph 0.38.0 → 0.40.0
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/backend/drizzle/indexes.cjs +8 -10
- package/dist/backend/drizzle/indexes.d.cts +2 -2
- package/dist/backend/drizzle/indexes.d.ts +2 -2
- package/dist/backend/drizzle/indexes.js +4 -6
- package/dist/backend/index.cjs +60 -39
- package/dist/backend/index.d.cts +60 -1
- package/dist/backend/index.d.ts +60 -1
- package/dist/backend/index.js +12 -3
- package/dist/backend/postgres/index.cjs +25 -27
- package/dist/backend/postgres/index.d.cts +6 -6
- package/dist/backend/postgres/index.d.ts +6 -6
- package/dist/backend/postgres/index.js +12 -14
- package/dist/backend/postgres/pglite-store.cjs +26 -27
- package/dist/backend/postgres/pglite-store.cjs.map +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +6 -5
- package/dist/backend/postgres/pglite-store.d.ts +6 -5
- package/dist/backend/postgres/pglite-store.js +22 -23
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +14 -16
- package/dist/backend/postgres/pglite.d.cts +3 -3
- package/dist/backend/postgres/pglite.d.ts +3 -3
- package/dist/backend/postgres/pglite.js +13 -15
- package/dist/backend/sqlite/index.cjs +26 -28
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +10 -12
- package/dist/backend/sqlite/libsql.cjs +16 -18
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +3 -3
- package/dist/backend/sqlite/libsql.d.ts +3 -3
- package/dist/backend/sqlite/libsql.js +15 -17
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +27 -28
- package/dist/backend/sqlite/local-store.cjs.map +1 -1
- package/dist/backend/sqlite/local-store.d.cts +6 -5
- package/dist/backend/sqlite/local-store.d.ts +6 -5
- package/dist/backend/sqlite/local-store.js +23 -24
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +15 -17
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +13 -15
- package/dist/{chunk-U4JDJKPD.js → chunk-2I3DNNBU.js} +4 -4
- package/dist/{chunk-U4JDJKPD.js.map → chunk-2I3DNNBU.js.map} +1 -1
- package/dist/{chunk-NPWACFQJ.cjs → chunk-2J5NMMVR.cjs} +43 -43
- package/dist/{chunk-NPWACFQJ.cjs.map → chunk-2J5NMMVR.cjs.map} +1 -1
- package/dist/{chunk-NU23DUSJ.cjs → chunk-2X73QTIC.cjs} +12 -13
- package/dist/chunk-2X73QTIC.cjs.map +1 -0
- package/dist/{chunk-A2FGSWMQ.js → chunk-3BL3JFHL.js} +202 -52
- package/dist/chunk-3BL3JFHL.js.map +1 -0
- package/dist/chunk-3SHAUJRB.js +79 -0
- package/dist/chunk-3SHAUJRB.js.map +1 -0
- package/dist/{chunk-UPXDVI3T.js → chunk-53BSOG3O.js} +8 -7
- package/dist/chunk-53BSOG3O.js.map +1 -0
- package/dist/chunk-5J4VNCUD.js +856 -0
- package/dist/chunk-5J4VNCUD.js.map +1 -0
- package/dist/chunk-5YBDB7UG.cjs +12 -0
- package/dist/{chunk-FMNUSGZ4.cjs.map → chunk-5YBDB7UG.cjs.map} +1 -1
- package/dist/{chunk-6XDBRDZE.js → chunk-6N7QBIWN.js} +7 -3
- package/dist/chunk-6N7QBIWN.js.map +1 -0
- package/dist/{chunk-EZH7FNUS.js → chunk-6QP4QXBR.js} +3 -3
- package/dist/{chunk-EZH7FNUS.js.map → chunk-6QP4QXBR.js.map} +1 -1
- package/dist/{chunk-E6TXEISH.cjs → chunk-7UTUKH4E.cjs} +4 -4
- package/dist/{chunk-E6TXEISH.cjs.map → chunk-7UTUKH4E.cjs.map} +1 -1
- package/dist/chunk-7WLEQIHA.cjs +605 -0
- package/dist/chunk-7WLEQIHA.cjs.map +1 -0
- package/dist/{chunk-BQITNFQJ.js → chunk-AQVDAKXH.js} +3 -3
- package/dist/{chunk-BQITNFQJ.js.map → chunk-AQVDAKXH.js.map} +1 -1
- package/dist/{chunk-X6CNEA32.js → chunk-BUZWMDNL.js} +5 -5
- package/dist/{chunk-X6CNEA32.js.map → chunk-BUZWMDNL.js.map} +1 -1
- package/dist/{chunk-7M3NACL3.cjs → chunk-CKFBZ4LV.cjs} +4 -4
- package/dist/{chunk-7M3NACL3.cjs.map → chunk-CKFBZ4LV.cjs.map} +1 -1
- package/dist/{chunk-VBH7ZXSZ.js → chunk-CU3LPYNB.js} +5 -5
- package/dist/{chunk-VBH7ZXSZ.js.map → chunk-CU3LPYNB.js.map} +1 -1
- package/dist/{chunk-YJDSPA5E.js → chunk-EFZ4S22A.js} +11 -10
- package/dist/chunk-EFZ4S22A.js.map +1 -0
- package/dist/chunk-ELA3V6UN.js +601 -0
- package/dist/chunk-ELA3V6UN.js.map +1 -0
- package/dist/{chunk-2SL7OGPR.cjs → chunk-H6I36MGT.cjs} +1037 -887
- package/dist/chunk-H6I36MGT.cjs.map +1 -0
- package/dist/chunk-HAQVISUF.cjs +1098 -0
- package/dist/chunk-HAQVISUF.cjs.map +1 -0
- package/dist/{chunk-O5H62ZWJ.cjs → chunk-HP6LWBLB.cjs} +14 -2
- package/dist/chunk-HP6LWBLB.cjs.map +1 -0
- package/dist/{chunk-BKAKAVRW.cjs → chunk-HQRZEYYB.cjs} +44 -44
- package/dist/{chunk-BKAKAVRW.cjs.map → chunk-HQRZEYYB.cjs.map} +1 -1
- package/dist/{chunk-XD6X7O5R.js → chunk-I5CRUPKO.js} +9 -10
- package/dist/{chunk-XD6X7O5R.js.map → chunk-I5CRUPKO.js.map} +1 -1
- package/dist/{chunk-RQPRCEIO.js → chunk-JHK6NPFV.js} +218 -306
- package/dist/chunk-JHK6NPFV.js.map +1 -0
- package/dist/chunk-JZYMOHHM.cjs +226 -0
- package/dist/chunk-JZYMOHHM.cjs.map +1 -0
- package/dist/{chunk-CQC6VBAF.cjs → chunk-K4FB2RMO.cjs} +10 -10
- package/dist/{chunk-CQC6VBAF.cjs.map → chunk-K4FB2RMO.cjs.map} +1 -1
- package/dist/{chunk-ERZ4QPQX.js → chunk-K6CD6W5J.js} +5 -5
- package/dist/{chunk-ERZ4QPQX.js.map → chunk-K6CD6W5J.js.map} +1 -1
- package/dist/{chunk-LZ3TVJY4.cjs → chunk-KHNKYSGP.cjs} +34 -34
- package/dist/{chunk-LZ3TVJY4.cjs.map → chunk-KHNKYSGP.cjs.map} +1 -1
- package/dist/{chunk-CWX77JB4.cjs → chunk-KLR77R5A.cjs} +13 -13
- package/dist/{chunk-CWX77JB4.cjs.map → chunk-KLR77R5A.cjs.map} +1 -1
- package/dist/{chunk-AOL64O4Z.js → chunk-L3DDZUZP.js} +3 -3
- package/dist/{chunk-AOL64O4Z.js.map → chunk-L3DDZUZP.js.map} +1 -1
- package/dist/{chunk-PZHC5GCD.js → chunk-L5ET7FYQ.js} +3 -3
- package/dist/{chunk-PZHC5GCD.js.map → chunk-L5ET7FYQ.js.map} +1 -1
- package/dist/{chunk-B63IFHXR.cjs → chunk-LFFVD5ZR.cjs} +41 -41
- package/dist/{chunk-B63IFHXR.cjs.map → chunk-LFFVD5ZR.cjs.map} +1 -1
- package/dist/chunk-LL5D5T5W.cjs +157 -0
- package/dist/chunk-LL5D5T5W.cjs.map +1 -0
- package/dist/{chunk-GUUWKPTK.cjs → chunk-LLE25NRD.cjs} +7 -7
- package/dist/{chunk-GUUWKPTK.cjs.map → chunk-LLE25NRD.cjs.map} +1 -1
- package/dist/chunk-LLHMAHG4.cjs +886 -0
- package/dist/chunk-LLHMAHG4.cjs.map +1 -0
- package/dist/{chunk-ZHX4KEM7.cjs → chunk-M2RPZS7J.cjs} +10 -10
- package/dist/{chunk-ZHX4KEM7.cjs.map → chunk-M2RPZS7J.cjs.map} +1 -1
- package/dist/chunk-MNURF4RF.cjs +85 -0
- package/dist/chunk-MNURF4RF.cjs.map +1 -0
- package/dist/chunk-QOHTVDHU.js +144 -0
- package/dist/chunk-QOHTVDHU.js.map +1 -0
- package/dist/{chunk-7VLCN3JB.cjs → chunk-QXKVUJLI.cjs} +113 -112
- package/dist/chunk-QXKVUJLI.cjs.map +1 -0
- package/dist/{chunk-GNPGGLAE.cjs → chunk-QYDUCWD2.cjs} +4 -4
- package/dist/{chunk-GNPGGLAE.cjs.map → chunk-QYDUCWD2.cjs.map} +1 -1
- package/dist/{chunk-TE5ZA4VX.js → chunk-QZYGZVUI.js} +45 -41
- package/dist/chunk-QZYGZVUI.js.map +1 -0
- package/dist/{chunk-YLINFV7Z.cjs → chunk-SAMJLDGG.cjs} +114 -110
- package/dist/chunk-SAMJLDGG.cjs.map +1 -0
- package/dist/{chunk-DOVMTPKE.cjs → chunk-SE422RES.cjs} +27 -27
- package/dist/{chunk-DOVMTPKE.cjs.map → chunk-SE422RES.cjs.map} +1 -1
- package/dist/{chunk-NWYCOFEZ.cjs → chunk-UCHW2MGP.cjs} +332 -433
- package/dist/chunk-UCHW2MGP.cjs.map +1 -0
- package/dist/{chunk-XFY73JWD.cjs → chunk-UDS5DZNY.cjs} +498 -1098
- package/dist/chunk-UDS5DZNY.cjs.map +1 -0
- package/dist/{chunk-KFLXWVUJ.js → chunk-UUIBACKJ.js} +14 -3
- package/dist/chunk-UUIBACKJ.js.map +1 -0
- package/dist/{chunk-VDYA2HMS.js → chunk-VWEFXG73.js} +3 -3
- package/dist/{chunk-VDYA2HMS.js.map → chunk-VWEFXG73.js.map} +1 -1
- package/dist/{chunk-G32AO634.js → chunk-W66YCXWT.js} +464 -1048
- package/dist/chunk-W66YCXWT.js.map +1 -0
- package/dist/{chunk-E6YZRKMM.js → chunk-XMEYZYGE.js} +6 -6
- package/dist/{chunk-E6YZRKMM.js.map → chunk-XMEYZYGE.js.map} +1 -1
- package/dist/{chunk-G3CSQLLT.js → chunk-Y5UC3IXF.js} +461 -6
- package/dist/chunk-Y5UC3IXF.js.map +1 -0
- package/dist/{chunk-SDHV2MWU.js → chunk-YGX4PMG6.js} +5 -5
- package/dist/{chunk-SDHV2MWU.js.map → chunk-YGX4PMG6.js.map} +1 -1
- package/dist/{chunk-KCLZHYPU.cjs → chunk-YIX3BEBR.cjs} +86 -85
- package/dist/chunk-YIX3BEBR.cjs.map +1 -0
- package/dist/{chunk-X6RDQ5NB.cjs → chunk-YX3H63VV.cjs} +8 -2
- package/dist/chunk-YX3H63VV.cjs.map +1 -0
- package/dist/chunk-YYLMXERH.js +211 -0
- package/dist/chunk-YYLMXERH.js.map +1 -0
- package/dist/{chunk-6G5CQ6JX.js → chunk-ZE7E46IZ.js} +5 -5
- package/dist/{chunk-6G5CQ6JX.js.map → chunk-ZE7E46IZ.js.map} +1 -1
- package/dist/{chunk-Z2PPIVOO.js → chunk-ZVME6OSV.js} +5 -5
- package/dist/{chunk-Z2PPIVOO.js.map → chunk-ZVME6OSV.js.map} +1 -1
- package/dist/core/index.cjs +15 -3
- package/dist/core/index.d.cts +4 -3
- package/dist/core/index.d.ts +4 -3
- package/dist/core/index.js +2 -2
- package/dist/{ddl-Dx3Z0_WC.d.ts → ddl-BLEzHw6j.d.ts} +3 -3
- package/dist/{ddl-J6sDyABg.d.cts → ddl-KnCdF_le.d.cts} +3 -3
- package/dist/{define-graph-CzEvA_8F.d.cts → define-graph-Cv3CFwKm.d.cts} +1 -1
- package/dist/{define-graph-DRo9xpYN.d.ts → define-graph-DQnj3fNH.d.ts} +1 -1
- package/dist/graph-merge/index.cjs +40 -43
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +15 -9
- package/dist/graph-merge/index.d.ts +15 -9
- package/dist/graph-merge/index.js +19 -22
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/index.cjs +143 -119
- package/dist/index.d.cts +12 -10
- package/dist/index.d.ts +12 -10
- package/dist/index.js +23 -23
- package/dist/indexes/index.cjs +12 -14
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- package/dist/indexes/index.js +5 -7
- package/dist/interchange/index.cjs +29 -30
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +6 -5
- package/dist/interchange/index.d.ts +6 -5
- package/dist/interchange/index.js +10 -11
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-CASfhmzV.d.ts → manager-DjE6Mhag.d.ts} +2 -2
- package/dist/{manager-nCEJiYBb.d.cts → manager-mqee5MVB.d.cts} +2 -2
- package/dist/{postgres-DMgIKQU-.d.cts → postgres-Bm4DyFQU.d.cts} +100 -49
- package/dist/{postgres-Cl1ZAN1G.d.ts → postgres-DtaVALOZ.d.ts} +100 -49
- package/dist/profiler/index.d.cts +8 -7
- package/dist/profiler/index.d.ts +8 -7
- package/dist/provenance/index.cjs +20 -20
- package/dist/provenance/index.d.cts +6 -5
- package/dist/provenance/index.d.ts +6 -5
- package/dist/provenance/index.js +7 -7
- package/dist/schema/index.cjs +26 -28
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +5 -5
- package/dist/schema/index.d.ts +5 -5
- package/dist/schema/index.js +7 -9
- package/dist/schema/index.js.map +1 -1
- package/dist/{temporal-DqtOEo_B.d.ts → searchable-BxlJQVFw.d.cts} +3 -58
- package/dist/{temporal-BC_NQV5Y.d.cts → searchable-ChJ29MCd.d.ts} +3 -58
- package/dist/{sqlite-BDkW39aa.d.cts → sqlite-DT6tTHOG.d.cts} +124 -97
- package/dist/{sqlite-CYfhvESj.d.ts → sqlite-m9Izphk_.d.ts} +124 -97
- package/dist/{store-view-BoHqdHjB.d.cts → store-view-C-buB8Q8.d.cts} +46 -31
- package/dist/{store-view-Ctq-3OHy.d.ts → store-view-CagdeyNn.d.ts} +46 -31
- package/dist/temporal-CyFsSPe8.d.ts +73 -0
- package/dist/temporal-Dn_JADWY.d.cts +73 -0
- package/dist/{types-CUevi_D1.d.ts → types-CYdXzZef.d.ts} +1 -1
- package/dist/{types-COq3-vMC.d.cts → types-CqSfMRW3.d.cts} +1 -1
- package/dist/{where-C92TXCzT.d.cts → where-C3-HRgUq.d.cts} +1 -1
- package/dist/{where-BdE_cYtx.d.ts → where-sQL4u5h-.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-2SL7OGPR.cjs.map +0 -1
- package/dist/chunk-6XDBRDZE.js.map +0 -1
- package/dist/chunk-7VLCN3JB.cjs.map +0 -1
- package/dist/chunk-A2FGSWMQ.js.map +0 -1
- package/dist/chunk-DDCIXXOO.js +0 -9
- package/dist/chunk-DDCIXXOO.js.map +0 -1
- package/dist/chunk-DDCYVIVV.cjs +0 -44
- package/dist/chunk-DDCYVIVV.cjs.map +0 -1
- package/dist/chunk-EOJFGECD.cjs +0 -284
- package/dist/chunk-EOJFGECD.cjs.map +0 -1
- package/dist/chunk-FMNUSGZ4.cjs +0 -12
- package/dist/chunk-G32AO634.js.map +0 -1
- package/dist/chunk-G3CSQLLT.js.map +0 -1
- package/dist/chunk-I6FX7AAG.js +0 -39
- package/dist/chunk-I6FX7AAG.js.map +0 -1
- package/dist/chunk-J6IJARLG.js +0 -94
- package/dist/chunk-J6IJARLG.js.map +0 -1
- package/dist/chunk-KCLZHYPU.cjs.map +0 -1
- package/dist/chunk-KFLXWVUJ.js.map +0 -1
- package/dist/chunk-MTNEGGM2.js +0 -273
- package/dist/chunk-MTNEGGM2.js.map +0 -1
- package/dist/chunk-NU23DUSJ.cjs.map +0 -1
- package/dist/chunk-NWYCOFEZ.cjs.map +0 -1
- package/dist/chunk-O5H62ZWJ.cjs.map +0 -1
- package/dist/chunk-RQPRCEIO.js.map +0 -1
- package/dist/chunk-SVUKGWSN.cjs +0 -102
- package/dist/chunk-SVUKGWSN.cjs.map +0 -1
- package/dist/chunk-TE5ZA4VX.js.map +0 -1
- package/dist/chunk-UH2USOMG.cjs +0 -627
- package/dist/chunk-UH2USOMG.cjs.map +0 -1
- package/dist/chunk-UPXDVI3T.js.map +0 -1
- package/dist/chunk-X6RDQ5NB.cjs.map +0 -1
- package/dist/chunk-XFY73JWD.cjs.map +0 -1
- package/dist/chunk-Y7M44XEK.js +0 -462
- package/dist/chunk-Y7M44XEK.js.map +0 -1
- package/dist/chunk-YJDSPA5E.js.map +0 -1
- package/dist/chunk-YLINFV7Z.cjs.map +0 -1
- package/dist/chunk-Z5QHVL5U.cjs +0 -12
- package/dist/chunk-Z5QHVL5U.cjs.map +0 -1
- package/dist/chunk-ZKZAIX42.cjs +0 -479
- package/dist/chunk-ZKZAIX42.cjs.map +0 -1
- package/dist/{index-CrFL_ENI.d.cts → types-C5pZeKTl.d.cts} +1 -1
- package/dist/{index-Bq7vSPHy.d.ts → types-D8szWDUo.d.ts} +1 -1
|
@@ -0,0 +1,1098 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkYX3H63VV_cjs = require('./chunk-YX3H63VV.cjs');
|
|
4
|
+
var chunk764JHTLT_cjs = require('./chunk-764JHTLT.cjs');
|
|
5
|
+
var chunkTDXIBCGY_cjs = require('./chunk-TDXIBCGY.cjs');
|
|
6
|
+
|
|
7
|
+
// src/backend/table-contribution.ts
|
|
8
|
+
var FULLTEXT_CONTRIBUTION_NAME = "fulltext";
|
|
9
|
+
var BASE_CONTRIBUTION_OWNER = "base";
|
|
10
|
+
|
|
11
|
+
// src/query/dialect/fulltext-strategy.ts
|
|
12
|
+
var ALL_FULLTEXT_MODES = [
|
|
13
|
+
"websearch",
|
|
14
|
+
"phrase",
|
|
15
|
+
"plain",
|
|
16
|
+
"raw"
|
|
17
|
+
];
|
|
18
|
+
function buildFulltextCapabilities(strategy) {
|
|
19
|
+
return {
|
|
20
|
+
supported: true,
|
|
21
|
+
languages: strategy.languages,
|
|
22
|
+
phraseQueries: strategy.supportedModes.includes("phrase"),
|
|
23
|
+
prefixQueries: strategy.supportsPrefix,
|
|
24
|
+
highlighting: strategy.supportsSnippets
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function quoteIdentifier(name) {
|
|
28
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
29
|
+
}
|
|
30
|
+
function tsvectorColumn(tableName) {
|
|
31
|
+
return chunkYX3H63VV_cjs.sql`${chunkYX3H63VV_cjs.sql.identifier(tableName)}."tsv"`;
|
|
32
|
+
}
|
|
33
|
+
function dedupeFulltextBatchRows(rows) {
|
|
34
|
+
const seen = /* @__PURE__ */ new Map();
|
|
35
|
+
for (const row of rows) seen.set(row.nodeId, row);
|
|
36
|
+
return [...seen.values()];
|
|
37
|
+
}
|
|
38
|
+
function buildPkScopedDelete(tableName, params) {
|
|
39
|
+
const table = chunkYX3H63VV_cjs.sql.identifier(tableName);
|
|
40
|
+
return chunkYX3H63VV_cjs.sql`
|
|
41
|
+
DELETE FROM ${table}
|
|
42
|
+
WHERE "graph_id" = ${params.graphId}
|
|
43
|
+
AND "node_kind" = ${params.nodeKind}
|
|
44
|
+
AND "node_id" = ${params.nodeId}
|
|
45
|
+
`;
|
|
46
|
+
}
|
|
47
|
+
function buildPkScopedBatchDelete(tableName, params) {
|
|
48
|
+
if (params.nodeIds.length === 0) return void 0;
|
|
49
|
+
const unique = [...new Set(params.nodeIds)];
|
|
50
|
+
const table = chunkYX3H63VV_cjs.sql.identifier(tableName);
|
|
51
|
+
return chunkYX3H63VV_cjs.sql`
|
|
52
|
+
DELETE FROM ${table}
|
|
53
|
+
WHERE "graph_id" = ${params.graphId}
|
|
54
|
+
AND "node_kind" = ${params.nodeKind}
|
|
55
|
+
AND "node_id" IN (${chunkYX3H63VV_cjs.sql.join(
|
|
56
|
+
unique.map((id) => chunkYX3H63VV_cjs.sql`${id}`),
|
|
57
|
+
chunkYX3H63VV_cjs.sql`, `
|
|
58
|
+
)})
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
function postgresTsquery(mode, query, language) {
|
|
62
|
+
const langExpr = language === void 0 ? chunkYX3H63VV_cjs.sql`"language"` : chunkYX3H63VV_cjs.sql`${language}::regconfig`;
|
|
63
|
+
switch (mode) {
|
|
64
|
+
case "websearch": {
|
|
65
|
+
return chunkYX3H63VV_cjs.sql`websearch_to_tsquery(${langExpr}, ${query})`;
|
|
66
|
+
}
|
|
67
|
+
case "phrase": {
|
|
68
|
+
return chunkYX3H63VV_cjs.sql`phraseto_tsquery(${langExpr}, ${query})`;
|
|
69
|
+
}
|
|
70
|
+
case "plain": {
|
|
71
|
+
return chunkYX3H63VV_cjs.sql`plainto_tsquery(${langExpr}, ${query})`;
|
|
72
|
+
}
|
|
73
|
+
case "raw": {
|
|
74
|
+
return chunkYX3H63VV_cjs.sql`to_tsquery(${langExpr}, ${query})`;
|
|
75
|
+
}
|
|
76
|
+
default: {
|
|
77
|
+
const _exhaustive = mode;
|
|
78
|
+
throw new Error(`Unsupported fulltext mode: ${String(_exhaustive)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
var tsvectorStrategy = {
|
|
83
|
+
name: "tsvector",
|
|
84
|
+
supportedModes: ALL_FULLTEXT_MODES,
|
|
85
|
+
supportsSnippets: true,
|
|
86
|
+
// `raw` mode exposes `foo:*` prefix-match syntax to callers.
|
|
87
|
+
supportsPrefix: true,
|
|
88
|
+
supportsLanguageOverride: true,
|
|
89
|
+
// Canonical Postgres stemmers; every stock install ships these plus a
|
|
90
|
+
// few others. Runtime `to_tsvector` accepts any installed regconfig
|
|
91
|
+
// name — this list is advisory for capability discovery.
|
|
92
|
+
languages: [
|
|
93
|
+
"simple",
|
|
94
|
+
"english",
|
|
95
|
+
"french",
|
|
96
|
+
"german",
|
|
97
|
+
"italian",
|
|
98
|
+
"portuguese",
|
|
99
|
+
"russian",
|
|
100
|
+
"spanish",
|
|
101
|
+
"swedish"
|
|
102
|
+
],
|
|
103
|
+
matchCondition(tableName, query, mode, language) {
|
|
104
|
+
const q = postgresTsquery(mode, query, language);
|
|
105
|
+
return chunkYX3H63VV_cjs.sql`${tsvectorColumn(tableName)} @@ ${q}`;
|
|
106
|
+
},
|
|
107
|
+
rankExpression(tableName, query, mode, language) {
|
|
108
|
+
const q = postgresTsquery(mode, query, language);
|
|
109
|
+
return chunkYX3H63VV_cjs.sql`ts_rank_cd(${tsvectorColumn(tableName)}, ${q})`;
|
|
110
|
+
},
|
|
111
|
+
snippetExpression(_tableName, query, mode, language) {
|
|
112
|
+
const langExpr = language === void 0 ? chunkYX3H63VV_cjs.sql`"language"` : chunkYX3H63VV_cjs.sql`${language}::regconfig`;
|
|
113
|
+
const q = postgresTsquery(mode, query, language);
|
|
114
|
+
return chunkYX3H63VV_cjs.sql`ts_headline(${langExpr}, "content", ${q}, 'StartSel=<mark>,StopSel=</mark>,MaxFragments=1,MinWords=5,MaxWords=30,ShortWord=3')`;
|
|
115
|
+
},
|
|
116
|
+
ownedTables(primaryTableName) {
|
|
117
|
+
const name = quoteIdentifier(primaryTableName);
|
|
118
|
+
const gin = quoteIdentifier(`${primaryTableName}_tsv_idx`);
|
|
119
|
+
const kind = quoteIdentifier(`${primaryTableName}_kind_idx`);
|
|
120
|
+
const createDdl = [
|
|
121
|
+
`CREATE TABLE IF NOT EXISTS ${name} (
|
|
122
|
+
"graph_id" TEXT NOT NULL,
|
|
123
|
+
"node_kind" TEXT NOT NULL,
|
|
124
|
+
"node_id" TEXT NOT NULL,
|
|
125
|
+
"content" TEXT NOT NULL,
|
|
126
|
+
"language" regconfig NOT NULL,
|
|
127
|
+
"tsv" tsvector NOT NULL
|
|
128
|
+
GENERATED ALWAYS AS (to_tsvector("language", "content")) STORED,
|
|
129
|
+
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
130
|
+
PRIMARY KEY ("graph_id", "node_kind", "node_id")
|
|
131
|
+
);`,
|
|
132
|
+
`CREATE INDEX IF NOT EXISTS ${gin} ON ${name} USING GIN ("tsv");`,
|
|
133
|
+
`CREATE INDEX IF NOT EXISTS ${kind} ON ${name} ("graph_id", "node_kind");`
|
|
134
|
+
];
|
|
135
|
+
return [
|
|
136
|
+
{
|
|
137
|
+
logicalName: FULLTEXT_CONTRIBUTION_NAME,
|
|
138
|
+
owner: "tsvector",
|
|
139
|
+
tableName: primaryTableName,
|
|
140
|
+
createDdl,
|
|
141
|
+
runtimeEnsure: true
|
|
142
|
+
}
|
|
143
|
+
];
|
|
144
|
+
},
|
|
145
|
+
buildUpsert(tableName, params, timestamp) {
|
|
146
|
+
const table = chunkYX3H63VV_cjs.sql.identifier(tableName);
|
|
147
|
+
return [
|
|
148
|
+
chunkYX3H63VV_cjs.sql`
|
|
149
|
+
INSERT INTO ${table} ("graph_id", "node_kind", "node_id", "content", "language", "updated_at")
|
|
150
|
+
VALUES (
|
|
151
|
+
${params.graphId}, ${params.nodeKind}, ${params.nodeId},
|
|
152
|
+
${params.content}, ${params.language}::regconfig,
|
|
153
|
+
${timestamp}
|
|
154
|
+
)
|
|
155
|
+
ON CONFLICT ("graph_id", "node_kind", "node_id")
|
|
156
|
+
DO UPDATE SET
|
|
157
|
+
"content" = EXCLUDED."content",
|
|
158
|
+
"language" = EXCLUDED."language",
|
|
159
|
+
"updated_at" = EXCLUDED."updated_at"
|
|
160
|
+
`
|
|
161
|
+
];
|
|
162
|
+
},
|
|
163
|
+
buildBatchUpsert(tableName, params, timestamp) {
|
|
164
|
+
const rows = dedupeFulltextBatchRows(params.rows);
|
|
165
|
+
if (rows.length === 0) return [];
|
|
166
|
+
const table = chunkYX3H63VV_cjs.sql.identifier(tableName);
|
|
167
|
+
const valueTuples = rows.map(
|
|
168
|
+
(row) => chunkYX3H63VV_cjs.sql`
|
|
169
|
+
(
|
|
170
|
+
${params.graphId}, ${params.nodeKind}, ${row.nodeId},
|
|
171
|
+
${row.content}, ${row.language}::regconfig,
|
|
172
|
+
${timestamp}
|
|
173
|
+
)
|
|
174
|
+
`
|
|
175
|
+
);
|
|
176
|
+
return [
|
|
177
|
+
chunkYX3H63VV_cjs.sql`
|
|
178
|
+
INSERT INTO ${table} ("graph_id", "node_kind", "node_id", "content", "language", "updated_at")
|
|
179
|
+
VALUES ${chunkYX3H63VV_cjs.sql.join(valueTuples, chunkYX3H63VV_cjs.sql`, `)}
|
|
180
|
+
ON CONFLICT ("graph_id", "node_kind", "node_id")
|
|
181
|
+
DO UPDATE SET
|
|
182
|
+
"content" = EXCLUDED."content",
|
|
183
|
+
"language" = EXCLUDED."language",
|
|
184
|
+
"updated_at" = EXCLUDED."updated_at"
|
|
185
|
+
`
|
|
186
|
+
];
|
|
187
|
+
},
|
|
188
|
+
buildDelete(tableName, params) {
|
|
189
|
+
return [buildPkScopedDelete(tableName, params)];
|
|
190
|
+
},
|
|
191
|
+
buildBatchDelete(tableName, params) {
|
|
192
|
+
const stmt = buildPkScopedBatchDelete(tableName, params);
|
|
193
|
+
return stmt === void 0 ? [] : [stmt];
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
function translateToFts5Query(query, mode) {
|
|
197
|
+
switch (mode) {
|
|
198
|
+
case "phrase": {
|
|
199
|
+
return `"${query.replaceAll('"', '""')}"`;
|
|
200
|
+
}
|
|
201
|
+
case "plain": {
|
|
202
|
+
return query.trim().split(/\s+/u).filter((token) => token.length > 0).map((token) => `"${token.replaceAll('"', '""')}"`).join(" ");
|
|
203
|
+
}
|
|
204
|
+
case "websearch": {
|
|
205
|
+
return translateWebsearchToFts5(query);
|
|
206
|
+
}
|
|
207
|
+
case "raw": {
|
|
208
|
+
return query;
|
|
209
|
+
}
|
|
210
|
+
default: {
|
|
211
|
+
const _exhaustive = mode;
|
|
212
|
+
throw new Error(`Unsupported fulltext mode: ${String(_exhaustive)}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function translateWebsearchToFts5(query) {
|
|
217
|
+
const tokens = [];
|
|
218
|
+
let index = 0;
|
|
219
|
+
function skipWhitespace() {
|
|
220
|
+
while (index < query.length && /\s/u.test(query[index] ?? "")) {
|
|
221
|
+
index += 1;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function readPhrase() {
|
|
225
|
+
index += 1;
|
|
226
|
+
let content = "";
|
|
227
|
+
while (index < query.length && query[index] !== '"') {
|
|
228
|
+
content += query[index] ?? "";
|
|
229
|
+
index += 1;
|
|
230
|
+
}
|
|
231
|
+
if (query[index] === '"') index += 1;
|
|
232
|
+
return `"${content.replaceAll('"', '""')}"`;
|
|
233
|
+
}
|
|
234
|
+
function readBareTerm() {
|
|
235
|
+
let term = "";
|
|
236
|
+
while (index < query.length && !/\s/u.test(query[index] ?? "")) {
|
|
237
|
+
term += query[index] ?? "";
|
|
238
|
+
index += 1;
|
|
239
|
+
}
|
|
240
|
+
return term;
|
|
241
|
+
}
|
|
242
|
+
while (index < query.length) {
|
|
243
|
+
skipWhitespace();
|
|
244
|
+
if (index >= query.length) break;
|
|
245
|
+
const ch = query[index];
|
|
246
|
+
if (ch === '"') {
|
|
247
|
+
tokens.push(readPhrase());
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
if (ch === "-") {
|
|
251
|
+
index += 1;
|
|
252
|
+
const term = query[index] === '"' ? readPhrase() : `"${readBareTerm().replaceAll('"', '""')}"`;
|
|
253
|
+
tokens.push(`NOT ${term}`);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (ch === "+") {
|
|
257
|
+
index += 1;
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const bare = readBareTerm();
|
|
261
|
+
if (bare.length === 0) continue;
|
|
262
|
+
if (bare.toUpperCase() === "OR") {
|
|
263
|
+
tokens.push("OR");
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
tokens.push(`"${bare.replaceAll('"', '""')}"`);
|
|
267
|
+
}
|
|
268
|
+
if (tokens.length > 0 && tokens[0]?.startsWith("NOT ")) {
|
|
269
|
+
tokens.shift();
|
|
270
|
+
}
|
|
271
|
+
return tokens.join(" ");
|
|
272
|
+
}
|
|
273
|
+
var fts5Strategy = {
|
|
274
|
+
name: "fts5",
|
|
275
|
+
supportedModes: ALL_FULLTEXT_MODES,
|
|
276
|
+
supportsSnippets: true,
|
|
277
|
+
// FTS5 supports `foo*` prefix matching natively.
|
|
278
|
+
supportsPrefix: true,
|
|
279
|
+
// FTS5 tokenizer is fixed at table-create time; per-row / per-query
|
|
280
|
+
// language metadata is stored but not consulted.
|
|
281
|
+
supportsLanguageOverride: false,
|
|
282
|
+
// The built-in tokenizer is `porter unicode61 remove_diacritics 2`; the
|
|
283
|
+
// `language` field on searchable() is recorded for future use but not
|
|
284
|
+
// applied at query time.
|
|
285
|
+
languages: ["porter", "unicode61", "trigram"],
|
|
286
|
+
matchCondition(tableName, query, mode, _language) {
|
|
287
|
+
const matchExpression = translateToFts5Query(query, mode);
|
|
288
|
+
return chunkYX3H63VV_cjs.sql`${chunkYX3H63VV_cjs.sql.identifier(tableName)} MATCH ${matchExpression}`;
|
|
289
|
+
},
|
|
290
|
+
rankExpression(tableName, _query, _mode, _language) {
|
|
291
|
+
return chunkYX3H63VV_cjs.sql`-bm25(${chunkYX3H63VV_cjs.sql.identifier(tableName)})`;
|
|
292
|
+
},
|
|
293
|
+
snippetExpression(tableName, _query, _mode, _language) {
|
|
294
|
+
return chunkYX3H63VV_cjs.sql`snippet(${chunkYX3H63VV_cjs.sql.identifier(tableName)}, -1, '<mark>', '</mark>', '…', 20)`;
|
|
295
|
+
},
|
|
296
|
+
ownedTables(primaryTableName) {
|
|
297
|
+
const name = quoteIdentifier(primaryTableName);
|
|
298
|
+
return [
|
|
299
|
+
{
|
|
300
|
+
logicalName: FULLTEXT_CONTRIBUTION_NAME,
|
|
301
|
+
owner: "fts5",
|
|
302
|
+
tableName: primaryTableName,
|
|
303
|
+
createDdl: [
|
|
304
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS ${name} USING fts5(
|
|
305
|
+
graph_id UNINDEXED,
|
|
306
|
+
node_kind UNINDEXED,
|
|
307
|
+
node_id UNINDEXED,
|
|
308
|
+
language UNINDEXED,
|
|
309
|
+
updated_at UNINDEXED,
|
|
310
|
+
content,
|
|
311
|
+
tokenize='porter unicode61 remove_diacritics 2'
|
|
312
|
+
);`
|
|
313
|
+
],
|
|
314
|
+
runtimeEnsure: true
|
|
315
|
+
}
|
|
316
|
+
];
|
|
317
|
+
},
|
|
318
|
+
buildUpsert(tableName, params, timestamp) {
|
|
319
|
+
const table = chunkYX3H63VV_cjs.sql.identifier(tableName);
|
|
320
|
+
return [
|
|
321
|
+
chunkYX3H63VV_cjs.sql`
|
|
322
|
+
DELETE FROM ${table}
|
|
323
|
+
WHERE "graph_id" = ${params.graphId}
|
|
324
|
+
AND "node_kind" = ${params.nodeKind}
|
|
325
|
+
AND "node_id" = ${params.nodeId}
|
|
326
|
+
`,
|
|
327
|
+
chunkYX3H63VV_cjs.sql`
|
|
328
|
+
INSERT INTO ${table} (graph_id, node_kind, node_id, content, language, updated_at)
|
|
329
|
+
VALUES (${params.graphId}, ${params.nodeKind}, ${params.nodeId}, ${params.content}, ${params.language}, ${timestamp})
|
|
330
|
+
`
|
|
331
|
+
];
|
|
332
|
+
},
|
|
333
|
+
buildBatchUpsert(tableName, params, timestamp) {
|
|
334
|
+
const rows = dedupeFulltextBatchRows(params.rows);
|
|
335
|
+
if (rows.length === 0) return [];
|
|
336
|
+
const table = chunkYX3H63VV_cjs.sql.identifier(tableName);
|
|
337
|
+
const nodeIds = rows.map((row) => row.nodeId);
|
|
338
|
+
const deleteStmt = chunkYX3H63VV_cjs.sql`
|
|
339
|
+
DELETE FROM ${table}
|
|
340
|
+
WHERE "graph_id" = ${params.graphId}
|
|
341
|
+
AND "node_kind" = ${params.nodeKind}
|
|
342
|
+
AND "node_id" IN (${chunkYX3H63VV_cjs.sql.join(
|
|
343
|
+
nodeIds.map((id) => chunkYX3H63VV_cjs.sql`${id}`),
|
|
344
|
+
chunkYX3H63VV_cjs.sql`, `
|
|
345
|
+
)})
|
|
346
|
+
`;
|
|
347
|
+
const valueTuples = rows.map(
|
|
348
|
+
(row) => chunkYX3H63VV_cjs.sql`
|
|
349
|
+
(
|
|
350
|
+
${params.graphId}, ${params.nodeKind}, ${row.nodeId},
|
|
351
|
+
${row.content}, ${row.language}, ${timestamp}
|
|
352
|
+
)
|
|
353
|
+
`
|
|
354
|
+
);
|
|
355
|
+
const insertStmt = chunkYX3H63VV_cjs.sql`
|
|
356
|
+
INSERT INTO ${table} (graph_id, node_kind, node_id, content, language, updated_at)
|
|
357
|
+
VALUES ${chunkYX3H63VV_cjs.sql.join(valueTuples, chunkYX3H63VV_cjs.sql`, `)}
|
|
358
|
+
`;
|
|
359
|
+
return [deleteStmt, insertStmt];
|
|
360
|
+
},
|
|
361
|
+
buildDelete(tableName, params) {
|
|
362
|
+
return [buildPkScopedDelete(tableName, params)];
|
|
363
|
+
},
|
|
364
|
+
buildBatchDelete(tableName, params) {
|
|
365
|
+
const stmt = buildPkScopedBatchDelete(tableName, params);
|
|
366
|
+
return stmt === void 0 ? [] : [stmt];
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
// src/query/dialect/vector-strategy.ts
|
|
371
|
+
var VECTOR_CONTRIBUTION_PREFIX = "vector";
|
|
372
|
+
function buildVectorCapabilities(strategy) {
|
|
373
|
+
return strategy.capabilities;
|
|
374
|
+
}
|
|
375
|
+
function vectorScoreExpression(distanceExpression, metric) {
|
|
376
|
+
switch (metric) {
|
|
377
|
+
case "cosine": {
|
|
378
|
+
return chunkYX3H63VV_cjs.sql`(1 - (${distanceExpression}))`;
|
|
379
|
+
}
|
|
380
|
+
case "l2":
|
|
381
|
+
case "inner_product": {
|
|
382
|
+
return distanceExpression;
|
|
383
|
+
}
|
|
384
|
+
default: {
|
|
385
|
+
const _exhaustive = metric;
|
|
386
|
+
throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function vectorMinScoreCondition(distanceExpression, metric, minScore) {
|
|
391
|
+
assertVectorMinScore(minScore, metric);
|
|
392
|
+
switch (metric) {
|
|
393
|
+
case "cosine": {
|
|
394
|
+
return chunkYX3H63VV_cjs.sql`${distanceExpression} <= ${1 - minScore}`;
|
|
395
|
+
}
|
|
396
|
+
case "l2": {
|
|
397
|
+
return chunkYX3H63VV_cjs.sql`${distanceExpression} <= ${minScore}`;
|
|
398
|
+
}
|
|
399
|
+
case "inner_product": {
|
|
400
|
+
return chunkYX3H63VV_cjs.sql`${distanceExpression} <= ${-minScore}`;
|
|
401
|
+
}
|
|
402
|
+
default: {
|
|
403
|
+
const _exhaustive = metric;
|
|
404
|
+
throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function assertFiniteEmbedding(embedding, name) {
|
|
409
|
+
for (const [index, value] of embedding.entries()) {
|
|
410
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
411
|
+
throw new TypeError(
|
|
412
|
+
`${name}[${index}] must be a finite number, got: ${value}`
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
function assertVectorSearchLimit(limit) {
|
|
418
|
+
if (!Number.isInteger(limit) || limit <= 0) {
|
|
419
|
+
throw new RangeError(
|
|
420
|
+
`vectorSearch limit must be a positive integer, got: ${limit}`
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
function assertVectorMinScore(minScore, metric, label = "minScore") {
|
|
425
|
+
if (!Number.isFinite(minScore)) {
|
|
426
|
+
throw new RangeError(`${label} must be a finite number, got: ${minScore}`);
|
|
427
|
+
}
|
|
428
|
+
if (metric === "cosine" && Math.abs(minScore) > 1) {
|
|
429
|
+
throw new RangeError(
|
|
430
|
+
`${label} for the cosine metric must be between -1 and 1, got: ${minScore}`
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
var MAX_VECTOR_IDENTIFIER_LENGTH = 63;
|
|
435
|
+
function sanitizeIdentifierPart(value) {
|
|
436
|
+
return value.toLowerCase().replaceAll(/[^a-z0-9_]/g, "_");
|
|
437
|
+
}
|
|
438
|
+
function shortHash(input) {
|
|
439
|
+
let h1 = 3735928559;
|
|
440
|
+
let h2 = 1103547991;
|
|
441
|
+
for (let index = 0; index < input.length; index++) {
|
|
442
|
+
const ch = chunk764JHTLT_cjs.requireDefined(input.codePointAt(index));
|
|
443
|
+
h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
444
|
+
h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
445
|
+
}
|
|
446
|
+
h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
|
|
447
|
+
h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
|
|
448
|
+
const hi = (h2 >>> 0).toString(16).padStart(8, "0");
|
|
449
|
+
const lo = (h1 >>> 0).toString(16).padStart(8, "0");
|
|
450
|
+
return `${hi}${lo}`.slice(0, 8);
|
|
451
|
+
}
|
|
452
|
+
function vectorPhysicalName(prefix, graphId, nodeKind, fieldPath) {
|
|
453
|
+
const readable = `${prefix}_${sanitizeIdentifierPart(graphId)}_${sanitizeIdentifierPart(nodeKind)}_${sanitizeIdentifierPart(fieldPath)}`;
|
|
454
|
+
const hash = shortHash(JSON.stringify([graphId, nodeKind, fieldPath]));
|
|
455
|
+
const full = `${readable}_${hash}`;
|
|
456
|
+
if (full.length <= MAX_VECTOR_IDENTIFIER_LENGTH) return full;
|
|
457
|
+
return `${readable.slice(0, MAX_VECTOR_IDENTIFIER_LENGTH - 1 - hash.length)}_${hash}`;
|
|
458
|
+
}
|
|
459
|
+
function quoteIdentifier2(name) {
|
|
460
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// src/query/dialect/postgres.ts
|
|
464
|
+
function toPostgresPath(pointer) {
|
|
465
|
+
if (!pointer || pointer === "" || pointer === "/") {
|
|
466
|
+
return chunkYX3H63VV_cjs.sql.raw("ARRAY[]::text[]");
|
|
467
|
+
}
|
|
468
|
+
const segments = chunkTDXIBCGY_cjs.parseJsonPointer(pointer);
|
|
469
|
+
if (segments.length === 0) {
|
|
470
|
+
return chunkYX3H63VV_cjs.sql.raw("ARRAY[]::text[]");
|
|
471
|
+
}
|
|
472
|
+
const escapedSegments = segments.map((segment) => chunkYX3H63VV_cjs.inlineSqlStringLiteral(segment, "postgres")).join(", ");
|
|
473
|
+
return chunkYX3H63VV_cjs.sql.raw(`ARRAY[${escapedSegments}]`);
|
|
474
|
+
}
|
|
475
|
+
var postgresDialect = {
|
|
476
|
+
name: "postgres",
|
|
477
|
+
capabilities: {
|
|
478
|
+
standardQueryStrategy: "cte_project",
|
|
479
|
+
recursiveQueryStrategy: "recursive_cte",
|
|
480
|
+
materializeIntermediateTraversalCtes: false,
|
|
481
|
+
emitNotMaterializedHint: true,
|
|
482
|
+
forceRecursiveWorktableOuterJoinOrder: false,
|
|
483
|
+
vectorPredicateStrategy: "native",
|
|
484
|
+
vectorMetrics: ["cosine", "l2", "inner_product"],
|
|
485
|
+
supportsFulltext: true
|
|
486
|
+
},
|
|
487
|
+
binaryText(expression) {
|
|
488
|
+
return chunkYX3H63VV_cjs.sql`${expression} COLLATE "C"`;
|
|
489
|
+
},
|
|
490
|
+
analyzeTemporaryTable(table) {
|
|
491
|
+
return chunkYX3H63VV_cjs.sql`ANALYZE ${table}`;
|
|
492
|
+
},
|
|
493
|
+
setTransactionWorkingMemory(workingMemory) {
|
|
494
|
+
return chunkYX3H63VV_cjs.sql`SELECT set_config('work_mem', ${workingMemory}, true)`;
|
|
495
|
+
},
|
|
496
|
+
// ============================================================
|
|
497
|
+
// JSON Path Operations
|
|
498
|
+
// ============================================================
|
|
499
|
+
compilePath(pointer) {
|
|
500
|
+
return toPostgresPath(pointer);
|
|
501
|
+
},
|
|
502
|
+
jsonExtract(column, pointer) {
|
|
503
|
+
const path = toPostgresPath(pointer);
|
|
504
|
+
return chunkYX3H63VV_cjs.sql`${column} #> ${path}`;
|
|
505
|
+
},
|
|
506
|
+
jsonExtractText(column, pointer) {
|
|
507
|
+
const path = toPostgresPath(pointer);
|
|
508
|
+
return chunkYX3H63VV_cjs.sql`${column} #>> ${path}`;
|
|
509
|
+
},
|
|
510
|
+
jsonExtractNumber(column, pointer) {
|
|
511
|
+
const path = toPostgresPath(pointer);
|
|
512
|
+
return chunkYX3H63VV_cjs.sql`(${column} #>> ${path})::numeric`;
|
|
513
|
+
},
|
|
514
|
+
jsonExtractDouble(column, pointer) {
|
|
515
|
+
const path = toPostgresPath(pointer);
|
|
516
|
+
return chunkYX3H63VV_cjs.sql`(${column} #>> ${path})::double precision`;
|
|
517
|
+
},
|
|
518
|
+
jsonExtractBoolean(column, pointer) {
|
|
519
|
+
const path = toPostgresPath(pointer);
|
|
520
|
+
return chunkYX3H63VV_cjs.sql`(${column} #>> ${path})::boolean`;
|
|
521
|
+
},
|
|
522
|
+
jsonExtractDate(column, pointer) {
|
|
523
|
+
const path = toPostgresPath(pointer);
|
|
524
|
+
return chunkYX3H63VV_cjs.sql`(${column} #>> ${path})::timestamptz`;
|
|
525
|
+
},
|
|
526
|
+
// ============================================================
|
|
527
|
+
// JSON Array Operations
|
|
528
|
+
// ============================================================
|
|
529
|
+
jsonArrayLength(column) {
|
|
530
|
+
return chunkYX3H63VV_cjs.sql`jsonb_array_length(${column})`;
|
|
531
|
+
},
|
|
532
|
+
jsonArrayContains(column, value) {
|
|
533
|
+
const jsonValue = JSON.stringify([value]);
|
|
534
|
+
return chunkYX3H63VV_cjs.sql`${column} @> ${jsonValue}::jsonb`;
|
|
535
|
+
},
|
|
536
|
+
jsonArrayContainsAll(column, values) {
|
|
537
|
+
if (values.length === 0) {
|
|
538
|
+
return chunkYX3H63VV_cjs.sql.raw("1=1");
|
|
539
|
+
}
|
|
540
|
+
const jsonValue = JSON.stringify(values);
|
|
541
|
+
return chunkYX3H63VV_cjs.sql`${column} @> ${jsonValue}::jsonb`;
|
|
542
|
+
},
|
|
543
|
+
jsonArrayContainsAny(column, values) {
|
|
544
|
+
if (values.length === 0) {
|
|
545
|
+
return chunkYX3H63VV_cjs.sql.raw("1=0");
|
|
546
|
+
}
|
|
547
|
+
const conditions = values.map((value) => {
|
|
548
|
+
const jsonValue = JSON.stringify([value]);
|
|
549
|
+
return chunkYX3H63VV_cjs.sql`${column} @> ${jsonValue}::jsonb`;
|
|
550
|
+
});
|
|
551
|
+
return chunkYX3H63VV_cjs.sql`(${chunkYX3H63VV_cjs.sql.join(conditions, chunkYX3H63VV_cjs.sql` OR `)})`;
|
|
552
|
+
},
|
|
553
|
+
// ============================================================
|
|
554
|
+
// JSON Object Operations
|
|
555
|
+
// ============================================================
|
|
556
|
+
jsonHasPath(column, pointer) {
|
|
557
|
+
const path = toPostgresPath(pointer);
|
|
558
|
+
return chunkYX3H63VV_cjs.sql`${column} #> ${path} IS NOT NULL`;
|
|
559
|
+
},
|
|
560
|
+
jsonPathIsNull(column, pointer) {
|
|
561
|
+
const path = toPostgresPath(pointer);
|
|
562
|
+
return chunkYX3H63VV_cjs.sql`COALESCE(jsonb_typeof(${column} #> ${path}) = 'null', TRUE)`;
|
|
563
|
+
},
|
|
564
|
+
jsonPathIsNumber(column, pointer) {
|
|
565
|
+
const path = toPostgresPath(pointer);
|
|
566
|
+
return chunkYX3H63VV_cjs.sql`COALESCE(jsonb_typeof(${column} #> ${path}) = 'number', FALSE)`;
|
|
567
|
+
},
|
|
568
|
+
jsonPathIsNotNull(column, pointer) {
|
|
569
|
+
const path = toPostgresPath(pointer);
|
|
570
|
+
return chunkYX3H63VV_cjs.sql`COALESCE(jsonb_typeof(${column} #> ${path}) <> 'null', FALSE)`;
|
|
571
|
+
},
|
|
572
|
+
// ============================================================
|
|
573
|
+
// Comparison Operations
|
|
574
|
+
// ============================================================
|
|
575
|
+
nullSafeEquals(left, right) {
|
|
576
|
+
return chunkYX3H63VV_cjs.sql`${left} IS NOT DISTINCT FROM ${right}`;
|
|
577
|
+
},
|
|
578
|
+
inList(left, values, negated) {
|
|
579
|
+
const operator = negated ? chunkYX3H63VV_cjs.sql.raw("NOT IN") : chunkYX3H63VV_cjs.sql.raw("IN");
|
|
580
|
+
const placeholders = values.map((value) => chunkYX3H63VV_cjs.sql`${value}`);
|
|
581
|
+
return chunkYX3H63VV_cjs.sql`${left} ${operator} (${chunkYX3H63VV_cjs.sql.join(placeholders, chunkYX3H63VV_cjs.sql`, `)})`;
|
|
582
|
+
},
|
|
583
|
+
// ============================================================
|
|
584
|
+
// String Operations
|
|
585
|
+
// ============================================================
|
|
586
|
+
ilike(column, pattern) {
|
|
587
|
+
return chunkYX3H63VV_cjs.sql`${column} ILIKE ${pattern} ${chunkYX3H63VV_cjs.likeEscapeClause}`;
|
|
588
|
+
},
|
|
589
|
+
// ============================================================
|
|
590
|
+
// Set Operations
|
|
591
|
+
// ============================================================
|
|
592
|
+
wrapSetOperationOperand(inner) {
|
|
593
|
+
return chunkYX3H63VV_cjs.sql`(${inner})`;
|
|
594
|
+
},
|
|
595
|
+
// ============================================================
|
|
596
|
+
// Recursive CTE Path Operations
|
|
597
|
+
// ============================================================
|
|
598
|
+
initializePath(nodeId) {
|
|
599
|
+
return chunkYX3H63VV_cjs.sql`ARRAY[${nodeId}]`;
|
|
600
|
+
},
|
|
601
|
+
extendPath(currentPath, nodeId) {
|
|
602
|
+
return chunkYX3H63VV_cjs.sql`${currentPath} || ${nodeId}`;
|
|
603
|
+
},
|
|
604
|
+
cycleCheck(nodeId, path) {
|
|
605
|
+
return chunkYX3H63VV_cjs.sql`${nodeId} != ALL(${path})`;
|
|
606
|
+
},
|
|
607
|
+
// ============================================================
|
|
608
|
+
// Value Binding & Literals
|
|
609
|
+
// ============================================================
|
|
610
|
+
bindValue(value) {
|
|
611
|
+
return chunkYX3H63VV_cjs.getSqlDialectProfile("postgres").bindValue(value);
|
|
612
|
+
},
|
|
613
|
+
booleanLiteral(value) {
|
|
614
|
+
return chunkYX3H63VV_cjs.sql.raw(
|
|
615
|
+
chunkYX3H63VV_cjs.getSqlDialectProfile("postgres").booleanLiteralString(value)
|
|
616
|
+
);
|
|
617
|
+
},
|
|
618
|
+
booleanLiteralString(value) {
|
|
619
|
+
return chunkYX3H63VV_cjs.getSqlDialectProfile("postgres").booleanLiteralString(value);
|
|
620
|
+
},
|
|
621
|
+
quoteIdentifier(name) {
|
|
622
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
623
|
+
},
|
|
624
|
+
// ============================================================
|
|
625
|
+
// Vector Operations
|
|
626
|
+
// ============================================================
|
|
627
|
+
// Compile-time gate for `field.similarTo(...)`; the active
|
|
628
|
+
// `VectorStrategy` (pgvector) owns the distance SQL.
|
|
629
|
+
supportsVectors: true,
|
|
630
|
+
// ============================================================
|
|
631
|
+
// Fulltext Operations
|
|
632
|
+
// ============================================================
|
|
633
|
+
fulltext: tsvectorStrategy
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
// src/query/dialect/sqlite.ts
|
|
637
|
+
function escapeSqliteLiteral(value) {
|
|
638
|
+
return `'${value.replaceAll("'", "''")}'`;
|
|
639
|
+
}
|
|
640
|
+
function toSqlitePath(pointer) {
|
|
641
|
+
if (!pointer || pointer === "" || pointer === "/") {
|
|
642
|
+
return "$";
|
|
643
|
+
}
|
|
644
|
+
const segments = chunkTDXIBCGY_cjs.parseJsonPointer(pointer);
|
|
645
|
+
const parts = ["$"];
|
|
646
|
+
for (const segment of segments) {
|
|
647
|
+
if (isArrayIndex(segment)) {
|
|
648
|
+
parts.push(`[${segment}]`);
|
|
649
|
+
} else {
|
|
650
|
+
parts.push(`.${JSON.stringify(segment)}`);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
return parts.join("");
|
|
654
|
+
}
|
|
655
|
+
function isArrayIndex(segment) {
|
|
656
|
+
return /^\d+$/.test(segment);
|
|
657
|
+
}
|
|
658
|
+
var sqliteDialect = {
|
|
659
|
+
name: "sqlite",
|
|
660
|
+
capabilities: {
|
|
661
|
+
standardQueryStrategy: "cte_project",
|
|
662
|
+
recursiveQueryStrategy: "recursive_cte",
|
|
663
|
+
materializeIntermediateTraversalCtes: true,
|
|
664
|
+
emitNotMaterializedHint: false,
|
|
665
|
+
forceRecursiveWorktableOuterJoinOrder: true,
|
|
666
|
+
vectorPredicateStrategy: "native",
|
|
667
|
+
vectorMetrics: ["cosine", "l2"],
|
|
668
|
+
supportsFulltext: true
|
|
669
|
+
},
|
|
670
|
+
binaryText(expression) {
|
|
671
|
+
return expression;
|
|
672
|
+
},
|
|
673
|
+
analyzeTemporaryTable() {
|
|
674
|
+
return;
|
|
675
|
+
},
|
|
676
|
+
setTransactionWorkingMemory() {
|
|
677
|
+
return;
|
|
678
|
+
},
|
|
679
|
+
// ============================================================
|
|
680
|
+
// JSON Path Operations
|
|
681
|
+
// ============================================================
|
|
682
|
+
compilePath(pointer) {
|
|
683
|
+
return chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(toSqlitePath(pointer)));
|
|
684
|
+
},
|
|
685
|
+
jsonExtract(column, pointer) {
|
|
686
|
+
const path = toSqlitePath(pointer);
|
|
687
|
+
return chunkYX3H63VV_cjs.sql`json_extract(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))})`;
|
|
688
|
+
},
|
|
689
|
+
jsonExtractText(column, pointer) {
|
|
690
|
+
const path = toSqlitePath(pointer);
|
|
691
|
+
return chunkYX3H63VV_cjs.sql`json_extract(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))})`;
|
|
692
|
+
},
|
|
693
|
+
jsonExtractNumber(column, pointer) {
|
|
694
|
+
const path = toSqlitePath(pointer);
|
|
695
|
+
return chunkYX3H63VV_cjs.sql`json_extract(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))})`;
|
|
696
|
+
},
|
|
697
|
+
jsonExtractDouble(column, pointer) {
|
|
698
|
+
const path = toSqlitePath(pointer);
|
|
699
|
+
return chunkYX3H63VV_cjs.sql`json_extract(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))})`;
|
|
700
|
+
},
|
|
701
|
+
jsonExtractBoolean(column, pointer) {
|
|
702
|
+
const path = toSqlitePath(pointer);
|
|
703
|
+
return chunkYX3H63VV_cjs.sql`json_extract(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))})`;
|
|
704
|
+
},
|
|
705
|
+
jsonExtractDate(column, pointer) {
|
|
706
|
+
const path = toSqlitePath(pointer);
|
|
707
|
+
return chunkYX3H63VV_cjs.sql`json_extract(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))})`;
|
|
708
|
+
},
|
|
709
|
+
// ============================================================
|
|
710
|
+
// JSON Array Operations
|
|
711
|
+
// ============================================================
|
|
712
|
+
jsonArrayLength(column) {
|
|
713
|
+
return chunkYX3H63VV_cjs.sql`json_array_length(${column})`;
|
|
714
|
+
},
|
|
715
|
+
jsonArrayContains(column, value) {
|
|
716
|
+
return chunkYX3H63VV_cjs.sql`EXISTS (SELECT 1 FROM json_each(${column}) WHERE json_each.value = ${value})`;
|
|
717
|
+
},
|
|
718
|
+
jsonArrayContainsAll(column, values) {
|
|
719
|
+
if (values.length === 0) {
|
|
720
|
+
return chunkYX3H63VV_cjs.sql.raw("1=1");
|
|
721
|
+
}
|
|
722
|
+
const packedValues = JSON.stringify(values);
|
|
723
|
+
return chunkYX3H63VV_cjs.sql`
|
|
724
|
+
NOT EXISTS (
|
|
725
|
+
SELECT 1 FROM json_each(${packedValues}) AS tg_required
|
|
726
|
+
WHERE NOT EXISTS (
|
|
727
|
+
SELECT 1 FROM json_each(${column}) AS tg_actual
|
|
728
|
+
WHERE tg_actual.value = tg_required.value
|
|
729
|
+
)
|
|
730
|
+
)
|
|
731
|
+
`;
|
|
732
|
+
},
|
|
733
|
+
jsonArrayContainsAny(column, values) {
|
|
734
|
+
if (values.length === 0) {
|
|
735
|
+
return chunkYX3H63VV_cjs.sql.raw("1=0");
|
|
736
|
+
}
|
|
737
|
+
const packedValues = JSON.stringify(values);
|
|
738
|
+
return chunkYX3H63VV_cjs.sql`
|
|
739
|
+
EXISTS (
|
|
740
|
+
SELECT 1
|
|
741
|
+
FROM json_each(${column}) AS tg_actual
|
|
742
|
+
JOIN json_each(${packedValues}) AS tg_wanted
|
|
743
|
+
ON tg_actual.value = tg_wanted.value
|
|
744
|
+
)
|
|
745
|
+
`;
|
|
746
|
+
},
|
|
747
|
+
// ============================================================
|
|
748
|
+
// JSON Object Operations
|
|
749
|
+
// ============================================================
|
|
750
|
+
jsonHasPath(column, pointer) {
|
|
751
|
+
const path = toSqlitePath(pointer);
|
|
752
|
+
return chunkYX3H63VV_cjs.sql`json_type(${column}, ${chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path))}) IS NOT NULL`;
|
|
753
|
+
},
|
|
754
|
+
jsonPathIsNull(column, pointer) {
|
|
755
|
+
const path = toSqlitePath(pointer);
|
|
756
|
+
const pathSql = chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path));
|
|
757
|
+
return chunkYX3H63VV_cjs.sql`COALESCE(json_type(${column}, ${pathSql}) = 'null', 1)`;
|
|
758
|
+
},
|
|
759
|
+
jsonPathIsNumber(column, pointer) {
|
|
760
|
+
const path = toSqlitePath(pointer);
|
|
761
|
+
const pathSql = chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path));
|
|
762
|
+
return chunkYX3H63VV_cjs.sql`COALESCE(json_type(${column}, ${pathSql}) IN ('integer', 'real'), 0)`;
|
|
763
|
+
},
|
|
764
|
+
jsonPathIsNotNull(column, pointer) {
|
|
765
|
+
const path = toSqlitePath(pointer);
|
|
766
|
+
const pathSql = chunkYX3H63VV_cjs.sql.raw(escapeSqliteLiteral(path));
|
|
767
|
+
return chunkYX3H63VV_cjs.sql`COALESCE(json_type(${column}, ${pathSql}) <> 'null', 0)`;
|
|
768
|
+
},
|
|
769
|
+
// ============================================================
|
|
770
|
+
// Comparison Operations
|
|
771
|
+
// ============================================================
|
|
772
|
+
nullSafeEquals(left, right) {
|
|
773
|
+
return chunkYX3H63VV_cjs.sql`${left} IS ${right}`;
|
|
774
|
+
},
|
|
775
|
+
inList(left, values, negated) {
|
|
776
|
+
const operator = negated ? chunkYX3H63VV_cjs.sql.raw("NOT IN") : chunkYX3H63VV_cjs.sql.raw("IN");
|
|
777
|
+
const packedValues = JSON.stringify(values);
|
|
778
|
+
return chunkYX3H63VV_cjs.sql`${left} ${operator} (SELECT value FROM json_each(${packedValues}))`;
|
|
779
|
+
},
|
|
780
|
+
// ============================================================
|
|
781
|
+
// String Operations
|
|
782
|
+
// ============================================================
|
|
783
|
+
ilike(column, pattern) {
|
|
784
|
+
return chunkYX3H63VV_cjs.sql`LOWER(${column}) LIKE LOWER(${pattern}) ${chunkYX3H63VV_cjs.likeEscapeClause}`;
|
|
785
|
+
},
|
|
786
|
+
// ============================================================
|
|
787
|
+
// Set Operations
|
|
788
|
+
// ============================================================
|
|
789
|
+
wrapSetOperationOperand(inner) {
|
|
790
|
+
return chunkYX3H63VV_cjs.sql`SELECT * FROM (${inner})`;
|
|
791
|
+
},
|
|
792
|
+
// ============================================================
|
|
793
|
+
// Recursive CTE Path Operations
|
|
794
|
+
// ============================================================
|
|
795
|
+
initializePath(nodeId) {
|
|
796
|
+
return chunkYX3H63VV_cjs.sql`'|' || ${nodeId} || '|'`;
|
|
797
|
+
},
|
|
798
|
+
extendPath(currentPath, nodeId) {
|
|
799
|
+
return chunkYX3H63VV_cjs.sql`${currentPath} || ${nodeId} || '|'`;
|
|
800
|
+
},
|
|
801
|
+
cycleCheck(nodeId, path) {
|
|
802
|
+
return chunkYX3H63VV_cjs.sql`INSTR(${path}, '|' || ${nodeId} || '|') = 0`;
|
|
803
|
+
},
|
|
804
|
+
// ============================================================
|
|
805
|
+
// Value Binding & Literals
|
|
806
|
+
// ============================================================
|
|
807
|
+
bindValue(value) {
|
|
808
|
+
return chunkYX3H63VV_cjs.getSqlDialectProfile("sqlite").bindValue(value);
|
|
809
|
+
},
|
|
810
|
+
booleanLiteral(value) {
|
|
811
|
+
return chunkYX3H63VV_cjs.sql.raw(chunkYX3H63VV_cjs.getSqlDialectProfile("sqlite").booleanLiteralString(value));
|
|
812
|
+
},
|
|
813
|
+
booleanLiteralString(value) {
|
|
814
|
+
return chunkYX3H63VV_cjs.getSqlDialectProfile("sqlite").booleanLiteralString(value);
|
|
815
|
+
},
|
|
816
|
+
quoteIdentifier(name) {
|
|
817
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
818
|
+
},
|
|
819
|
+
// ============================================================
|
|
820
|
+
// Vector Operations
|
|
821
|
+
// ============================================================
|
|
822
|
+
// Compile-time gate for `field.similarTo(...)`; the active
|
|
823
|
+
// `VectorStrategy` (sqlite-vec / libSQL-native) owns the distance SQL.
|
|
824
|
+
supportsVectors: true,
|
|
825
|
+
// ============================================================
|
|
826
|
+
// Fulltext Operations
|
|
827
|
+
// ============================================================
|
|
828
|
+
fulltext: fts5Strategy
|
|
829
|
+
};
|
|
830
|
+
|
|
831
|
+
// src/query/dialect/index.ts
|
|
832
|
+
var DIALECT_ADAPTERS = {
|
|
833
|
+
sqlite: sqliteDialect,
|
|
834
|
+
postgres: postgresDialect
|
|
835
|
+
};
|
|
836
|
+
function getDialect(dialect) {
|
|
837
|
+
return DIALECT_ADAPTERS[dialect];
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
// src/indexes/compiler.ts
|
|
841
|
+
function compileNodeIndexKeys(index, dialect, propsColumn, systemColumn) {
|
|
842
|
+
const adapter = getDialect(dialect);
|
|
843
|
+
const keys = [];
|
|
844
|
+
const systemColumns = [
|
|
845
|
+
...getNodeScopeColumns(index.scope),
|
|
846
|
+
...index.keySystemColumns ?? []
|
|
847
|
+
];
|
|
848
|
+
for (const column of systemColumns) {
|
|
849
|
+
keys.push(systemColumn(column));
|
|
850
|
+
}
|
|
851
|
+
const allPointers = [...index.fields, ...index.coveringFields];
|
|
852
|
+
const allValueTypes = [
|
|
853
|
+
...index.fieldValueTypes,
|
|
854
|
+
...index.coveringFieldValueTypes
|
|
855
|
+
];
|
|
856
|
+
for (const [pointerIndex, pointer] of allPointers.entries()) {
|
|
857
|
+
const valueType = allValueTypes[pointerIndex];
|
|
858
|
+
const extracted = compileIndexKeyValue(
|
|
859
|
+
adapter,
|
|
860
|
+
propsColumn,
|
|
861
|
+
pointer,
|
|
862
|
+
valueType
|
|
863
|
+
);
|
|
864
|
+
keys.push(chunkYX3H63VV_cjs.sql`(${extracted})`);
|
|
865
|
+
}
|
|
866
|
+
return { keys };
|
|
867
|
+
}
|
|
868
|
+
function compileEdgeIndexKeys(index, dialect, propsColumn, systemColumn) {
|
|
869
|
+
const adapter = getDialect(dialect);
|
|
870
|
+
const keys = [];
|
|
871
|
+
for (const column of getEdgeScopeColumns(index.scope, index.direction)) {
|
|
872
|
+
keys.push(systemColumn(column));
|
|
873
|
+
}
|
|
874
|
+
const allPointers = [...index.fields, ...index.coveringFields];
|
|
875
|
+
const allValueTypes = [
|
|
876
|
+
...index.fieldValueTypes,
|
|
877
|
+
...index.coveringFieldValueTypes
|
|
878
|
+
];
|
|
879
|
+
for (const [pointerIndex, pointer] of allPointers.entries()) {
|
|
880
|
+
const valueType = allValueTypes[pointerIndex];
|
|
881
|
+
const extracted = compileIndexKeyValue(
|
|
882
|
+
adapter,
|
|
883
|
+
propsColumn,
|
|
884
|
+
pointer,
|
|
885
|
+
valueType
|
|
886
|
+
);
|
|
887
|
+
keys.push(chunkYX3H63VV_cjs.sql`(${extracted})`);
|
|
888
|
+
}
|
|
889
|
+
return { keys };
|
|
890
|
+
}
|
|
891
|
+
function compileNodeIndexFieldKeys(index, ctx) {
|
|
892
|
+
const adapter = getDialect(ctx.dialect);
|
|
893
|
+
const keys = [];
|
|
894
|
+
for (const [position, pointer] of index.fields.entries()) {
|
|
895
|
+
const extracted = compileIndexKeyValue(
|
|
896
|
+
adapter,
|
|
897
|
+
ctx.propsColumn,
|
|
898
|
+
pointer,
|
|
899
|
+
index.fieldValueTypes[position]
|
|
900
|
+
);
|
|
901
|
+
keys.push(chunkYX3H63VV_cjs.sql`(${extracted})`);
|
|
902
|
+
}
|
|
903
|
+
return keys;
|
|
904
|
+
}
|
|
905
|
+
function compileIndexKeyValue(dialect, propsColumn, pointer, valueType) {
|
|
906
|
+
switch (valueType) {
|
|
907
|
+
case "number": {
|
|
908
|
+
return dialect.jsonExtractNumber(propsColumn, pointer);
|
|
909
|
+
}
|
|
910
|
+
case "boolean": {
|
|
911
|
+
return dialect.jsonExtractBoolean(propsColumn, pointer);
|
|
912
|
+
}
|
|
913
|
+
case "date": {
|
|
914
|
+
return dialect.jsonExtractDate(propsColumn, pointer);
|
|
915
|
+
}
|
|
916
|
+
case "string":
|
|
917
|
+
case "unknown":
|
|
918
|
+
case void 0: {
|
|
919
|
+
return dialect.jsonExtractText(propsColumn, pointer);
|
|
920
|
+
}
|
|
921
|
+
case "array":
|
|
922
|
+
case "object":
|
|
923
|
+
case "embedding": {
|
|
924
|
+
return dialect.jsonExtract(propsColumn, pointer);
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
function getNodeScopeColumns(scope) {
|
|
929
|
+
switch (scope) {
|
|
930
|
+
case "graphAndKind": {
|
|
931
|
+
return ["graph_id", "kind"];
|
|
932
|
+
}
|
|
933
|
+
case "graph": {
|
|
934
|
+
return ["graph_id"];
|
|
935
|
+
}
|
|
936
|
+
case "none": {
|
|
937
|
+
return [];
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
function getEdgeScopeColumns(scope, direction) {
|
|
942
|
+
const base = scope === "graphAndKind" ? ["graph_id", "kind"] : scope === "graph" ? ["graph_id"] : [];
|
|
943
|
+
if (direction === "out") {
|
|
944
|
+
return [...base, "from_id"];
|
|
945
|
+
}
|
|
946
|
+
if (direction === "in") {
|
|
947
|
+
return [...base, "to_id"];
|
|
948
|
+
}
|
|
949
|
+
return [...base];
|
|
950
|
+
}
|
|
951
|
+
function isIndexWhereLiteralList(value) {
|
|
952
|
+
return Array.isArray(value);
|
|
953
|
+
}
|
|
954
|
+
function compileIndexWhere(ctx, expression) {
|
|
955
|
+
switch (expression.__type) {
|
|
956
|
+
case "index_where_and": {
|
|
957
|
+
return chunkYX3H63VV_cjs.sql`(${chunkYX3H63VV_cjs.sql.join(
|
|
958
|
+
expression.predicates.map((p) => compileIndexWhere(ctx, p)),
|
|
959
|
+
chunkYX3H63VV_cjs.sql` AND `
|
|
960
|
+
)})`;
|
|
961
|
+
}
|
|
962
|
+
case "index_where_or": {
|
|
963
|
+
return chunkYX3H63VV_cjs.sql`(${chunkYX3H63VV_cjs.sql.join(
|
|
964
|
+
expression.predicates.map((p) => compileIndexWhere(ctx, p)),
|
|
965
|
+
chunkYX3H63VV_cjs.sql` OR `
|
|
966
|
+
)})`;
|
|
967
|
+
}
|
|
968
|
+
case "index_where_not": {
|
|
969
|
+
return chunkYX3H63VV_cjs.sql`(NOT ${compileIndexWhere(ctx, expression.predicate)})`;
|
|
970
|
+
}
|
|
971
|
+
case "index_where_null_check": {
|
|
972
|
+
const operand = compileIndexWhereOperand(ctx, expression.operand);
|
|
973
|
+
return expression.op === "isNull" ? chunkYX3H63VV_cjs.sql`${operand} IS NULL` : chunkYX3H63VV_cjs.sql`${operand} IS NOT NULL`;
|
|
974
|
+
}
|
|
975
|
+
case "index_where_comparison": {
|
|
976
|
+
const left = compileIndexWhereOperand(ctx, expression.left);
|
|
977
|
+
const right = expression.right;
|
|
978
|
+
if (isIndexWhereLiteralList(right)) {
|
|
979
|
+
if (expression.op !== "in" && expression.op !== "notIn") {
|
|
980
|
+
throw new Error(
|
|
981
|
+
`Operator "${expression.op}" does not support list comparison in index WHERE clause`
|
|
982
|
+
);
|
|
983
|
+
}
|
|
984
|
+
const values = right.map(
|
|
985
|
+
(literal) => compileIndexWhereLiteral(ctx.dialect, literal)
|
|
986
|
+
);
|
|
987
|
+
const operator = expression.op === "in" ? chunkYX3H63VV_cjs.sql`IN` : chunkYX3H63VV_cjs.sql`NOT IN`;
|
|
988
|
+
return chunkYX3H63VV_cjs.sql`${left} ${operator} (${chunkYX3H63VV_cjs.sql.join(values, chunkYX3H63VV_cjs.sql`, `)})`;
|
|
989
|
+
}
|
|
990
|
+
if (expression.op === "in" || expression.op === "notIn") {
|
|
991
|
+
throw new Error(
|
|
992
|
+
`Operator "${expression.op}" requires a list of values in index WHERE clause`
|
|
993
|
+
);
|
|
994
|
+
}
|
|
995
|
+
const rightLiteral = compileIndexWhereLiteral(ctx.dialect, right);
|
|
996
|
+
const opSql = compileComparisonOperator(expression.op);
|
|
997
|
+
return chunkYX3H63VV_cjs.sql`${left} ${opSql} ${rightLiteral}`;
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
function compileIndexWhereOperand(ctx, operand) {
|
|
1002
|
+
if (operand.__type === "index_operand_system") {
|
|
1003
|
+
return ctx.systemColumn(operand.column);
|
|
1004
|
+
}
|
|
1005
|
+
const adapter = getDialect(ctx.dialect);
|
|
1006
|
+
const pointer = chunkTDXIBCGY_cjs.jsonPointer([operand.field]);
|
|
1007
|
+
switch (operand.valueType) {
|
|
1008
|
+
case "number": {
|
|
1009
|
+
return adapter.jsonExtractNumber(ctx.propsColumn, pointer);
|
|
1010
|
+
}
|
|
1011
|
+
case "boolean": {
|
|
1012
|
+
return adapter.jsonExtractBoolean(ctx.propsColumn, pointer);
|
|
1013
|
+
}
|
|
1014
|
+
case "date": {
|
|
1015
|
+
return adapter.jsonExtractDate(ctx.propsColumn, pointer);
|
|
1016
|
+
}
|
|
1017
|
+
case "array":
|
|
1018
|
+
case "object":
|
|
1019
|
+
case "embedding": {
|
|
1020
|
+
return adapter.jsonExtract(ctx.propsColumn, pointer);
|
|
1021
|
+
}
|
|
1022
|
+
case "string":
|
|
1023
|
+
case "unknown":
|
|
1024
|
+
case void 0: {
|
|
1025
|
+
return adapter.jsonExtractText(ctx.propsColumn, pointer);
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
function compileIndexWhereLiteral(dialect, literal) {
|
|
1030
|
+
switch (literal.valueType) {
|
|
1031
|
+
case "string":
|
|
1032
|
+
case "date": {
|
|
1033
|
+
return chunkYX3H63VV_cjs.sql.raw(escapeStringLiteral(literal.value.toString()));
|
|
1034
|
+
}
|
|
1035
|
+
case "number": {
|
|
1036
|
+
return chunkYX3H63VV_cjs.sql.raw(literal.value.toString());
|
|
1037
|
+
}
|
|
1038
|
+
case "boolean": {
|
|
1039
|
+
return getDialect(dialect).booleanLiteral(literal.value);
|
|
1040
|
+
}
|
|
1041
|
+
case "array":
|
|
1042
|
+
case "object":
|
|
1043
|
+
case "embedding":
|
|
1044
|
+
case "unknown": {
|
|
1045
|
+
return chunkYX3H63VV_cjs.sql.raw(escapeStringLiteral(literal.value.toString()));
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
function compileComparisonOperator(op) {
|
|
1050
|
+
switch (op) {
|
|
1051
|
+
case "eq": {
|
|
1052
|
+
return chunkYX3H63VV_cjs.sql`=`;
|
|
1053
|
+
}
|
|
1054
|
+
case "neq": {
|
|
1055
|
+
return chunkYX3H63VV_cjs.sql`<>`;
|
|
1056
|
+
}
|
|
1057
|
+
case "gt": {
|
|
1058
|
+
return chunkYX3H63VV_cjs.sql`>`;
|
|
1059
|
+
}
|
|
1060
|
+
case "gte": {
|
|
1061
|
+
return chunkYX3H63VV_cjs.sql`>=`;
|
|
1062
|
+
}
|
|
1063
|
+
case "lt": {
|
|
1064
|
+
return chunkYX3H63VV_cjs.sql`<`;
|
|
1065
|
+
}
|
|
1066
|
+
case "lte": {
|
|
1067
|
+
return chunkYX3H63VV_cjs.sql`<=`;
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
function escapeStringLiteral(value) {
|
|
1072
|
+
return `'${value.replaceAll("'", "''")}'`;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
exports.ALL_FULLTEXT_MODES = ALL_FULLTEXT_MODES;
|
|
1076
|
+
exports.BASE_CONTRIBUTION_OWNER = BASE_CONTRIBUTION_OWNER;
|
|
1077
|
+
exports.FULLTEXT_CONTRIBUTION_NAME = FULLTEXT_CONTRIBUTION_NAME;
|
|
1078
|
+
exports.VECTOR_CONTRIBUTION_PREFIX = VECTOR_CONTRIBUTION_PREFIX;
|
|
1079
|
+
exports.assertFiniteEmbedding = assertFiniteEmbedding;
|
|
1080
|
+
exports.assertVectorMinScore = assertVectorMinScore;
|
|
1081
|
+
exports.assertVectorSearchLimit = assertVectorSearchLimit;
|
|
1082
|
+
exports.buildFulltextCapabilities = buildFulltextCapabilities;
|
|
1083
|
+
exports.buildVectorCapabilities = buildVectorCapabilities;
|
|
1084
|
+
exports.compileEdgeIndexKeys = compileEdgeIndexKeys;
|
|
1085
|
+
exports.compileIndexWhere = compileIndexWhere;
|
|
1086
|
+
exports.compileNodeIndexFieldKeys = compileNodeIndexFieldKeys;
|
|
1087
|
+
exports.compileNodeIndexKeys = compileNodeIndexKeys;
|
|
1088
|
+
exports.fts5Strategy = fts5Strategy;
|
|
1089
|
+
exports.getDialect = getDialect;
|
|
1090
|
+
exports.getNodeScopeColumns = getNodeScopeColumns;
|
|
1091
|
+
exports.quoteIdentifier = quoteIdentifier2;
|
|
1092
|
+
exports.shortHash = shortHash;
|
|
1093
|
+
exports.tsvectorStrategy = tsvectorStrategy;
|
|
1094
|
+
exports.vectorMinScoreCondition = vectorMinScoreCondition;
|
|
1095
|
+
exports.vectorPhysicalName = vectorPhysicalName;
|
|
1096
|
+
exports.vectorScoreExpression = vectorScoreExpression;
|
|
1097
|
+
//# sourceMappingURL=chunk-HAQVISUF.cjs.map
|
|
1098
|
+
//# sourceMappingURL=chunk-HAQVISUF.cjs.map
|