@nicia-ai/typegraph 0.37.0 → 0.38.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/README.md +12 -10
- package/dist/backend/drizzle/indexes.cjs +32 -0
- package/dist/backend/drizzle/indexes.cjs.map +1 -0
- package/dist/backend/drizzle/indexes.d.cts +43 -0
- package/dist/backend/drizzle/indexes.d.ts +43 -0
- package/dist/backend/drizzle/indexes.js +11 -0
- package/dist/backend/drizzle/indexes.js.map +1 -0
- package/dist/backend/index.cjs +161 -0
- package/dist/backend/index.cjs.map +1 -0
- package/dist/backend/index.d.cts +3 -0
- package/dist/backend/index.d.ts +3 -0
- package/dist/backend/index.js +8 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/postgres/index.cjs +32 -28
- package/dist/backend/postgres/index.d.cts +13 -12
- package/dist/backend/postgres/index.d.ts +13 -12
- package/dist/backend/postgres/index.js +19 -15
- package/dist/backend/postgres/pglite-store.cjs +67 -0
- package/dist/backend/postgres/pglite-store.cjs.map +1 -0
- package/dist/backend/postgres/pglite-store.d.cts +38 -0
- package/dist/backend/postgres/pglite-store.d.ts +38 -0
- package/dist/backend/postgres/pglite-store.js +65 -0
- package/dist/backend/postgres/pglite-store.js.map +1 -0
- package/dist/backend/postgres/pglite.cjs +25 -50
- package/dist/backend/postgres/pglite.cjs.map +1 -1
- package/dist/backend/postgres/pglite.d.cts +10 -9
- package/dist/backend/postgres/pglite.d.ts +10 -9
- package/dist/backend/postgres/pglite.js +20 -52
- package/dist/backend/postgres/pglite.js.map +1 -1
- package/dist/backend/sqlite/index.cjs +29 -25
- package/dist/backend/sqlite/index.d.cts +11 -11
- package/dist/backend/sqlite/index.d.ts +11 -11
- package/dist/backend/sqlite/index.js +17 -13
- package/dist/backend/sqlite/libsql.cjs +23 -19
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +9 -10
- package/dist/backend/sqlite/libsql.d.ts +9 -10
- package/dist/backend/sqlite/libsql.js +19 -15
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +72 -0
- package/dist/backend/sqlite/local-store.cjs.map +1 -0
- package/dist/backend/sqlite/local-store.d.cts +42 -0
- package/dist/backend/sqlite/local-store.d.ts +42 -0
- package/dist/backend/sqlite/local-store.js +67 -0
- package/dist/backend/sqlite/local-store.js.map +1 -0
- package/dist/backend/sqlite/local.cjs +28 -183
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.d.cts +8 -81
- package/dist/backend/sqlite/local.d.ts +8 -81
- package/dist/backend/sqlite/local.js +20 -180
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/chunk-2EBMPJBO.js +16 -0
- package/dist/chunk-2EBMPJBO.js.map +1 -0
- package/dist/{chunk-NBP2WTJW.cjs → chunk-2SL7OGPR.cjs} +2900 -1597
- package/dist/chunk-2SL7OGPR.cjs.map +1 -0
- package/dist/chunk-35S6P5ZU.js +27 -0
- package/dist/chunk-35S6P5ZU.js.map +1 -0
- package/dist/chunk-3LKL3S6X.js +50 -0
- package/dist/chunk-3LKL3S6X.js.map +1 -0
- package/dist/chunk-6G5CQ6JX.js +47 -0
- package/dist/chunk-6G5CQ6JX.js.map +1 -0
- package/dist/chunk-6XDBRDZE.js +312 -0
- package/dist/chunk-6XDBRDZE.js.map +1 -0
- package/dist/chunk-764JHTLT.cjs +15 -0
- package/dist/chunk-764JHTLT.cjs.map +1 -0
- package/dist/chunk-76HE7DJP.js +68 -0
- package/dist/chunk-76HE7DJP.js.map +1 -0
- package/dist/{chunk-VGDDG3XJ.cjs → chunk-7M3NACL3.cjs} +12 -12
- package/dist/{chunk-VGDDG3XJ.cjs.map → chunk-7M3NACL3.cjs.map} +1 -1
- package/dist/{chunk-NXQFATMF.cjs → chunk-7VLCN3JB.cjs} +153 -123
- package/dist/chunk-7VLCN3JB.cjs.map +1 -0
- package/dist/{chunk-552KNYQJ.js → chunk-A2FGSWMQ.js} +1907 -607
- package/dist/chunk-A2FGSWMQ.js.map +1 -0
- package/dist/chunk-AOL64O4Z.js +165 -0
- package/dist/chunk-AOL64O4Z.js.map +1 -0
- package/dist/{chunk-27SSDCEP.cjs → chunk-B63IFHXR.cjs} +53 -74
- package/dist/chunk-B63IFHXR.cjs.map +1 -0
- package/dist/{chunk-3XXGYU62.cjs → chunk-BKAKAVRW.cjs} +56 -53
- package/dist/chunk-BKAKAVRW.cjs.map +1 -0
- package/dist/{chunk-YTSN73ND.js → chunk-BQITNFQJ.js} +3 -3
- package/dist/{chunk-YTSN73ND.js.map → chunk-BQITNFQJ.js.map} +1 -1
- package/dist/{chunk-NUIG3BCV.cjs → chunk-CQC6VBAF.cjs} +93 -155
- package/dist/chunk-CQC6VBAF.cjs.map +1 -0
- package/dist/{chunk-6EEO3OVU.cjs → chunk-CWX77JB4.cjs} +22 -59
- package/dist/chunk-CWX77JB4.cjs.map +1 -0
- package/dist/{chunk-UGZUAYAR.js → chunk-D7PG5D5K.js} +4 -3
- package/dist/chunk-D7PG5D5K.js.map +1 -0
- package/dist/chunk-DDCIXXOO.js +9 -0
- package/dist/chunk-DDCIXXOO.js.map +1 -0
- package/dist/chunk-DDCYVIVV.cjs +44 -0
- package/dist/chunk-DDCYVIVV.cjs.map +1 -0
- package/dist/{chunk-XPCZADMT.cjs → chunk-DOVMTPKE.cjs} +89 -27
- package/dist/chunk-DOVMTPKE.cjs.map +1 -0
- package/dist/{chunk-5PNMDJ7J.js → chunk-DPNA466P.js} +14 -9
- package/dist/chunk-DPNA466P.js.map +1 -0
- package/dist/{chunk-BYPOGQWK.js → chunk-DRACN6XG.js} +6 -4
- package/dist/chunk-DRACN6XG.js.map +1 -0
- package/dist/chunk-E6TXEISH.cjs +175 -0
- package/dist/chunk-E6TXEISH.cjs.map +1 -0
- package/dist/{chunk-TKT2XHED.js → chunk-E6YZRKMM.js} +13 -12
- package/dist/chunk-E6YZRKMM.js.map +1 -0
- package/dist/{chunk-3C2RYI6L.cjs → chunk-EOJFGECD.cjs} +11 -11
- package/dist/chunk-EOJFGECD.cjs.map +1 -0
- package/dist/{chunk-XWV4JT34.js → chunk-ERZ4QPQX.js} +27 -22
- package/dist/chunk-ERZ4QPQX.js.map +1 -0
- package/dist/{chunk-DFVLCOP6.js → chunk-EZH7FNUS.js} +3 -3
- package/dist/{chunk-DFVLCOP6.js.map → chunk-EZH7FNUS.js.map} +1 -1
- package/dist/{chunk-WWFHO375.cjs → chunk-FJMPR3OH.cjs} +4 -3
- package/dist/chunk-FJMPR3OH.cjs.map +1 -0
- package/dist/chunk-FMNUSGZ4.cjs +12 -0
- package/dist/chunk-FMNUSGZ4.cjs.map +1 -0
- package/dist/{chunk-K3Q3LJY3.js → chunk-G32AO634.js} +201 -100
- package/dist/chunk-G32AO634.js.map +1 -0
- package/dist/{chunk-EXU3RASM.js → chunk-G3CSQLLT.js} +20 -474
- package/dist/chunk-G3CSQLLT.js.map +1 -0
- package/dist/chunk-GNPGGLAE.cjs +212 -0
- package/dist/chunk-GNPGGLAE.cjs.map +1 -0
- package/dist/{chunk-QARBLBXT.cjs → chunk-GUUWKPTK.cjs} +7 -7
- package/dist/{chunk-QARBLBXT.cjs.map → chunk-GUUWKPTK.cjs.map} +1 -1
- package/dist/chunk-GYA4JRP5.js +31 -0
- package/dist/chunk-GYA4JRP5.js.map +1 -0
- package/dist/chunk-I6FX7AAG.js +39 -0
- package/dist/chunk-I6FX7AAG.js.map +1 -0
- package/dist/chunk-IMQKXL4E.cjs +12 -0
- package/dist/{chunk-QSXTWU4U.cjs.map → chunk-IMQKXL4E.cjs.map} +1 -1
- package/dist/chunk-J6IJARLG.js +94 -0
- package/dist/chunk-J6IJARLG.js.map +1 -0
- package/dist/{chunk-W63OVYY4.js → chunk-K34OPSJK.js} +3 -3
- package/dist/{chunk-W63OVYY4.js.map → chunk-K34OPSJK.js.map} +1 -1
- package/dist/{chunk-TGOMW4MB.cjs → chunk-KCLZHYPU.cjs} +110 -109
- package/dist/chunk-KCLZHYPU.cjs.map +1 -0
- package/dist/{chunk-XGPUQ56G.js → chunk-KFLXWVUJ.js} +4 -38
- package/dist/chunk-KFLXWVUJ.js.map +1 -0
- package/dist/{chunk-3DS7Z4T4.cjs → chunk-LZ3TVJY4.cjs} +44 -43
- package/dist/chunk-LZ3TVJY4.cjs.map +1 -0
- package/dist/{chunk-UXLSNRYL.js → chunk-MTNEGGM2.js} +4 -4
- package/dist/chunk-MTNEGGM2.js.map +1 -0
- package/dist/{chunk-IP3CGGPA.cjs → chunk-N2V3HJFV.cjs} +92 -185
- package/dist/chunk-N2V3HJFV.cjs.map +1 -0
- package/dist/chunk-NAUA4PW5.cjs +28 -0
- package/dist/chunk-NAUA4PW5.cjs.map +1 -0
- package/dist/chunk-NMQ6C6TS.cjs +61 -0
- package/dist/chunk-NMQ6C6TS.cjs.map +1 -0
- package/dist/{chunk-2N6EOBTH.cjs → chunk-NPWACFQJ.cjs} +58 -53
- package/dist/chunk-NPWACFQJ.cjs.map +1 -0
- package/dist/{chunk-5KEQ74YU.cjs → chunk-NT6ILURI.cjs} +9 -86
- package/dist/chunk-NT6ILURI.cjs.map +1 -0
- package/dist/chunk-NU23DUSJ.cjs +192 -0
- package/dist/chunk-NU23DUSJ.cjs.map +1 -0
- package/dist/{chunk-WOJMKB3N.cjs → chunk-NWYCOFEZ.cjs} +1677 -308
- package/dist/chunk-NWYCOFEZ.cjs.map +1 -0
- package/dist/{chunk-3GH67G4Z.cjs → chunk-O5H62ZWJ.cjs} +4 -42
- package/dist/chunk-O5H62ZWJ.cjs.map +1 -0
- package/dist/{chunk-3SLPDKHQ.js → chunk-PH4IJ3V5.js} +5 -77
- package/dist/chunk-PH4IJ3V5.js.map +1 -0
- package/dist/chunk-PWXGB77L.cjs +56 -0
- package/dist/chunk-PWXGB77L.cjs.map +1 -0
- package/dist/chunk-PZHC5GCD.js +193 -0
- package/dist/chunk-PZHC5GCD.js.map +1 -0
- package/dist/chunk-QMQLUA66.js +12 -0
- package/dist/chunk-QMQLUA66.js.map +1 -0
- package/dist/{chunk-5WWVZMVX.js → chunk-QZ7A6HBM.js} +2 -2
- package/dist/{chunk-5WWVZMVX.js.map → chunk-QZ7A6HBM.js.map} +1 -1
- package/dist/{chunk-VKGKDOKR.js → chunk-RQPRCEIO.js} +1539 -206
- package/dist/chunk-RQPRCEIO.js.map +1 -0
- package/dist/chunk-RW24SAHI.cjs +74 -0
- package/dist/chunk-RW24SAHI.cjs.map +1 -0
- package/dist/{chunk-BVRDGYXQ.cjs → chunk-SAFZ6JTI.cjs} +14 -9
- package/dist/chunk-SAFZ6JTI.cjs.map +1 -0
- package/dist/{chunk-L7HQ2OSI.js → chunk-SCTZRFW5.js} +87 -166
- package/dist/chunk-SCTZRFW5.js.map +1 -0
- package/dist/{chunk-5KPNWT6X.js → chunk-SDHV2MWU.js} +24 -45
- package/dist/chunk-SDHV2MWU.js.map +1 -0
- package/dist/chunk-SVJ5GEXW.cjs +45 -0
- package/dist/chunk-SVJ5GEXW.cjs.map +1 -0
- package/dist/chunk-SVUKGWSN.cjs +102 -0
- package/dist/chunk-SVUKGWSN.cjs.map +1 -0
- package/dist/chunk-TAUGGLNQ.js +59 -0
- package/dist/chunk-TAUGGLNQ.js.map +1 -0
- package/dist/{chunk-J4IUSYFF.js → chunk-TE5ZA4VX.js} +69 -27
- package/dist/chunk-TE5ZA4VX.js.map +1 -0
- package/dist/{chunk-A42GCBGX.cjs → chunk-TRF4EBJT.cjs} +6 -4
- package/dist/chunk-TRF4EBJT.cjs.map +1 -0
- package/dist/{chunk-KQJ54OG5.js → chunk-U4JDJKPD.js} +19 -56
- package/dist/chunk-U4JDJKPD.js.map +1 -0
- package/dist/chunk-UH2USOMG.cjs +627 -0
- package/dist/chunk-UH2USOMG.cjs.map +1 -0
- package/dist/{chunk-RCVLFTCT.js → chunk-UPXDVI3T.js} +13 -12
- package/dist/chunk-UPXDVI3T.js.map +1 -0
- package/dist/{chunk-5VQM6VWP.cjs → chunk-UWG5GX6E.cjs} +2 -2
- package/dist/{chunk-5VQM6VWP.cjs.map → chunk-UWG5GX6E.cjs.map} +1 -1
- package/dist/{chunk-3RWZPJKV.js → chunk-VBH7ZXSZ.js} +21 -78
- package/dist/chunk-VBH7ZXSZ.js.map +1 -0
- package/dist/{chunk-K5UBVGJN.js → chunk-VDYA2HMS.js} +6 -6
- package/dist/{chunk-K5UBVGJN.js.map → chunk-VDYA2HMS.js.map} +1 -1
- package/dist/chunk-X4PVHAZ6.cjs +83 -0
- package/dist/chunk-X4PVHAZ6.cjs.map +1 -0
- package/dist/{chunk-UYQMBBWJ.js → chunk-X6CNEA32.js} +23 -20
- package/dist/chunk-X6CNEA32.js.map +1 -0
- package/dist/chunk-X6RDQ5NB.cjs +335 -0
- package/dist/chunk-X6RDQ5NB.cjs.map +1 -0
- package/dist/chunk-XD6X7O5R.js +184 -0
- package/dist/chunk-XD6X7O5R.js.map +1 -0
- package/dist/{chunk-DIQ3AV5W.cjs → chunk-XFY73JWD.cjs} +324 -224
- package/dist/chunk-XFY73JWD.cjs.map +1 -0
- package/dist/{chunk-DEFQM7JU.cjs → chunk-XRU7V7FF.cjs} +7 -7
- package/dist/{chunk-DEFQM7JU.cjs.map → chunk-XRU7V7FF.cjs.map} +1 -1
- package/dist/{chunk-TPF25IG6.js → chunk-XZA3Y4YH.js} +3 -3
- package/dist/{chunk-TPF25IG6.js.map → chunk-XZA3Y4YH.js.map} +1 -1
- package/dist/chunk-Y7M44XEK.js +462 -0
- package/dist/chunk-Y7M44XEK.js.map +1 -0
- package/dist/{chunk-RRSNR3TP.js → chunk-YIRLBUNN.js} +3 -3
- package/dist/{chunk-RRSNR3TP.js.map → chunk-YIRLBUNN.js.map} +1 -1
- package/dist/{chunk-IXGYRP2P.js → chunk-YJDSPA5E.js} +79 -49
- package/dist/chunk-YJDSPA5E.js.map +1 -0
- package/dist/{chunk-JBNOGRKW.cjs → chunk-YLINFV7Z.cjs} +157 -115
- package/dist/chunk-YLINFV7Z.cjs.map +1 -0
- package/dist/{chunk-QERAIDRJ.js → chunk-Z2PPIVOO.js} +82 -22
- package/dist/chunk-Z2PPIVOO.js.map +1 -0
- package/dist/chunk-Z5QHVL5U.cjs +12 -0
- package/dist/chunk-Z5QHVL5U.cjs.map +1 -0
- package/dist/chunk-ZDH3DX3C.cjs +30 -0
- package/dist/chunk-ZDH3DX3C.cjs.map +1 -0
- package/dist/chunk-ZE6NVENI.js +77 -0
- package/dist/chunk-ZE6NVENI.js.map +1 -0
- package/dist/chunk-ZHX4KEM7.cjs +49 -0
- package/dist/chunk-ZHX4KEM7.cjs.map +1 -0
- package/dist/chunk-ZKZAIX42.cjs +479 -0
- package/dist/chunk-ZKZAIX42.cjs.map +1 -0
- package/dist/{chunk-TEDRJXOG.cjs → chunk-ZY4GXIVN.cjs} +5 -5
- package/dist/{chunk-TEDRJXOG.cjs.map → chunk-ZY4GXIVN.cjs.map} +1 -1
- package/dist/core/index.cjs +117 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +225 -0
- package/dist/core/index.d.ts +225 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/{ddl-CS0KUVwB.d.ts → ddl-Dx3Z0_WC.d.ts} +3 -3
- package/dist/{ddl-BD-ZfKeX.d.cts → ddl-J6sDyABg.d.cts} +3 -3
- package/dist/define-graph-CzEvA_8F.d.cts +174 -0
- package/dist/define-graph-DRo9xpYN.d.ts +174 -0
- package/dist/{extension-types-BM2ACfYO.d.cts → extension-types-BLEVH4SG.d.cts} +1 -1
- package/dist/{extension-types-BM2ACfYO.d.ts → extension-types-BLEVH4SG.d.ts} +1 -1
- package/dist/graph-extension/index.cjs +21 -19
- package/dist/graph-extension/index.d.cts +4 -4
- package/dist/graph-extension/index.d.ts +4 -4
- package/dist/graph-extension/index.js +6 -4
- package/dist/graph-merge/index.cjs +265 -214
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +8 -89
- package/dist/graph-merge/index.d.ts +8 -89
- package/dist/graph-merge/index.js +141 -90
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-BeacbPoe.d.ts → index-BD_3TCgh.d.ts} +6 -4
- package/dist/{index-BPM59vsg.d.cts → index-BihFPsPu.d.cts} +6 -4
- package/dist/{fulltext-strategy-C27vXaeB.d.cts → index-Bq7vSPHy.d.ts} +3195 -2646
- package/dist/{fulltext-strategy-DebsMrqg.d.ts → index-CrFL_ENI.d.cts} +3195 -2646
- package/dist/index.cjs +326 -315
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +59 -240
- package/dist/index.d.ts +59 -240
- package/dist/index.js +46 -79
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +26 -38
- package/dist/indexes/index.d.cts +6 -41
- package/dist/indexes/index.d.ts +6 -41
- package/dist/indexes/index.js +14 -10
- package/dist/interchange/index.cjs +48 -39
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +7 -8
- package/dist/interchange/index.d.ts +7 -8
- package/dist/interchange/index.js +23 -14
- package/dist/interchange/index.js.map +1 -1
- package/dist/local-options-CZ1BnIoF.d.cts +29 -0
- package/dist/local-options-CZ1BnIoF.d.ts +29 -0
- package/dist/{manager-D00_NXvT.d.ts → manager-CASfhmzV.d.ts} +4 -173
- package/dist/{manager-nU1vTJLy.d.cts → manager-nCEJiYBb.d.cts} +4 -173
- package/dist/{materialize-indexes-zK2J_flP.d.ts → materialize-indexes-D4iei4Kp.d.ts} +1 -1
- package/dist/{materialize-indexes-CuR3gAZb.d.cts → materialize-indexes-ExQ6OrAh.d.cts} +1 -1
- package/dist/{postgres-IaBA4RgE.d.ts → postgres-Cl1ZAN1G.d.ts} +1 -1
- package/dist/{postgres-YrYmPlaU.d.cts → postgres-DMgIKQU-.d.cts} +1 -1
- package/dist/postgres-execution-fKW0qRiN.d.cts +14 -0
- package/dist/postgres-execution-fKW0qRiN.d.ts +14 -0
- package/dist/profiler/index.cjs +9 -8
- package/dist/profiler/index.cjs.map +1 -1
- package/dist/profiler/index.d.cts +9 -17
- package/dist/profiler/index.d.ts +9 -17
- package/dist/profiler/index.js +8 -7
- package/dist/profiler/index.js.map +1 -1
- package/dist/provenance/index.cjs +61 -55
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +7 -8
- package/dist/provenance/index.d.ts +7 -8
- package/dist/provenance/index.js +34 -28
- package/dist/provenance/index.js.map +1 -1
- package/dist/schema/index.cjs +46 -37
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +8 -10
- package/dist/schema/index.d.ts +8 -10
- package/dist/schema/index.js +22 -13
- package/dist/schema/index.js.map +1 -1
- package/dist/{sqlite-BUOHPx7p.d.ts → sqlite-BDkW39aa.d.cts} +1 -1
- package/dist/{sqlite-Pp8O19WE.d.cts → sqlite-CYfhvESj.d.ts} +1 -1
- package/dist/sqlite-execution-DwbE2a9y.d.cts +32 -0
- package/dist/sqlite-execution-DwbE2a9y.d.ts +32 -0
- package/dist/{store-view-X96Rd00T.d.cts → store-view-BoHqdHjB.d.cts} +394 -1393
- package/dist/{store-view-ANL6mTph.d.ts → store-view-Ctq-3OHy.d.ts} +394 -1393
- package/dist/temporal-BC_NQV5Y.d.cts +281 -0
- package/dist/temporal-DqtOEo_B.d.ts +281 -0
- package/dist/{types-r-Zyq2Hz.d.cts → types-COq3-vMC.d.cts} +2 -2
- package/dist/{types-wsvuBgPK.d.ts → types-CUevi_D1.d.ts} +2 -2
- package/dist/{where-CJOpJj3a.d.ts → where-BdE_cYtx.d.ts} +5 -5
- package/dist/{where-K3uBP33l.d.cts → where-C92TXCzT.d.cts} +5 -5
- package/package.json +37 -6
- package/dist/chunk-27SSDCEP.cjs.map +0 -1
- package/dist/chunk-2N6EOBTH.cjs.map +0 -1
- package/dist/chunk-3C2RYI6L.cjs.map +0 -1
- package/dist/chunk-3DS7Z4T4.cjs.map +0 -1
- package/dist/chunk-3GH67G4Z.cjs.map +0 -1
- package/dist/chunk-3RWZPJKV.js.map +0 -1
- package/dist/chunk-3SLPDKHQ.js.map +0 -1
- package/dist/chunk-3XXGYU62.cjs.map +0 -1
- package/dist/chunk-44TA22QT.js +0 -1478
- package/dist/chunk-44TA22QT.js.map +0 -1
- package/dist/chunk-552KNYQJ.js.map +0 -1
- package/dist/chunk-5KEQ74YU.cjs.map +0 -1
- package/dist/chunk-5KPNWT6X.js.map +0 -1
- package/dist/chunk-5PNMDJ7J.js.map +0 -1
- package/dist/chunk-6EEO3OVU.cjs.map +0 -1
- package/dist/chunk-7YSP4V4R.cjs +0 -69
- package/dist/chunk-7YSP4V4R.cjs.map +0 -1
- package/dist/chunk-A42GCBGX.cjs.map +0 -1
- package/dist/chunk-BVRDGYXQ.cjs.map +0 -1
- package/dist/chunk-BYPOGQWK.js.map +0 -1
- package/dist/chunk-CUHM5CWJ.cjs +0 -12
- package/dist/chunk-CUHM5CWJ.cjs.map +0 -1
- package/dist/chunk-DIQ3AV5W.cjs.map +0 -1
- package/dist/chunk-EXU3RASM.js.map +0 -1
- package/dist/chunk-IP3CGGPA.cjs.map +0 -1
- package/dist/chunk-IPSVVTWT.cjs +0 -1540
- package/dist/chunk-IPSVVTWT.cjs.map +0 -1
- package/dist/chunk-IXGYRP2P.js.map +0 -1
- package/dist/chunk-J4IUSYFF.js.map +0 -1
- package/dist/chunk-JBNOGRKW.cjs.map +0 -1
- package/dist/chunk-K3Q3LJY3.js.map +0 -1
- package/dist/chunk-KQJ54OG5.js.map +0 -1
- package/dist/chunk-L7HQ2OSI.js.map +0 -1
- package/dist/chunk-M6VES7V6.js +0 -239
- package/dist/chunk-M6VES7V6.js.map +0 -1
- package/dist/chunk-NBP2WTJW.cjs.map +0 -1
- package/dist/chunk-NUIG3BCV.cjs.map +0 -1
- package/dist/chunk-NXQFATMF.cjs.map +0 -1
- package/dist/chunk-OHMP6N2J.js +0 -47
- package/dist/chunk-OHMP6N2J.js.map +0 -1
- package/dist/chunk-QERAIDRJ.js.map +0 -1
- package/dist/chunk-QSXTWU4U.cjs +0 -12
- package/dist/chunk-RCVLFTCT.js.map +0 -1
- package/dist/chunk-TGOMW4MB.cjs.map +0 -1
- package/dist/chunk-TKT2XHED.js.map +0 -1
- package/dist/chunk-UGZUAYAR.js.map +0 -1
- package/dist/chunk-UXLSNRYL.js.map +0 -1
- package/dist/chunk-UYQMBBWJ.js.map +0 -1
- package/dist/chunk-VKGKDOKR.js.map +0 -1
- package/dist/chunk-VL2V6PEN.cjs +0 -261
- package/dist/chunk-VL2V6PEN.cjs.map +0 -1
- package/dist/chunk-WOJMKB3N.cjs.map +0 -1
- package/dist/chunk-WWFHO375.cjs.map +0 -1
- package/dist/chunk-XGPUQ56G.js.map +0 -1
- package/dist/chunk-XGU7DZDA.cjs +0 -1095
- package/dist/chunk-XGU7DZDA.cjs.map +0 -1
- package/dist/chunk-XPCZADMT.cjs.map +0 -1
- package/dist/chunk-XWV4JT34.js.map +0 -1
|
@@ -1,103 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkZDH3DX3C_cjs = require('./chunk-ZDH3DX3C.cjs');
|
|
4
|
+
var chunkGNPGGLAE_cjs = require('./chunk-GNPGGLAE.cjs');
|
|
5
|
+
var chunkSVUKGWSN_cjs = require('./chunk-SVUKGWSN.cjs');
|
|
6
|
+
var chunkO5H62ZWJ_cjs = require('./chunk-O5H62ZWJ.cjs');
|
|
7
|
+
var chunkDDCYVIVV_cjs = require('./chunk-DDCYVIVV.cjs');
|
|
8
|
+
var chunkNAUA4PW5_cjs = require('./chunk-NAUA4PW5.cjs');
|
|
9
|
+
var chunkZ5QHVL5U_cjs = require('./chunk-Z5QHVL5U.cjs');
|
|
10
|
+
var chunkX6RDQ5NB_cjs = require('./chunk-X6RDQ5NB.cjs');
|
|
11
|
+
var chunkSJDMVITW_cjs = require('./chunk-SJDMVITW.cjs');
|
|
12
|
+
var chunk764JHTLT_cjs = require('./chunk-764JHTLT.cjs');
|
|
6
13
|
var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
|
|
7
|
-
var
|
|
8
|
-
var
|
|
14
|
+
var chunkSAFZ6JTI_cjs = require('./chunk-SAFZ6JTI.cjs');
|
|
15
|
+
var chunkTDXIBCGY_cjs = require('./chunk-TDXIBCGY.cjs');
|
|
9
16
|
var nanoid = require('nanoid');
|
|
10
17
|
|
|
11
|
-
// src/
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
throw new chunkBVRDGYXQ_cjs.ValidationError(
|
|
17
|
-
`${path} must be before the recorded-time open sentinel ${RECORDED_MAX}.`,
|
|
18
|
-
{
|
|
19
|
-
issues: [
|
|
20
|
-
{
|
|
21
|
-
path,
|
|
22
|
-
message: `Expected a timestamp before ${RECORDED_MAX}, got "${value}"`
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
suggestion: "Use a real recorded-time commit instant, not the open-interval sentinel."
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
function asRecordedInstant(value) {
|
|
33
|
-
assertValidRecordedInstant(value, "asRecordedInstant");
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
function resolveReadCoordinate(mode, asOf, suggestion) {
|
|
37
|
-
if (mode !== "asOf" && asOf !== void 0) {
|
|
38
|
-
throw new chunkBVRDGYXQ_cjs.ValidationError(
|
|
39
|
-
`Temporal mode "${mode}" does not take an asOf timestamp.`,
|
|
40
|
-
{
|
|
41
|
-
issues: [
|
|
42
|
-
{
|
|
43
|
-
path: "asOf",
|
|
44
|
-
message: `asOf is only valid with mode "asOf", not "${mode}"`
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
suggestion: 'Pin an instant with store.asOf(timestamp) or store.view({ mode: "asOf", asOf }); drop asOf for other modes.'
|
|
50
|
-
}
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
assertValidAsOf(
|
|
54
|
-
mode,
|
|
55
|
-
asOf,
|
|
56
|
-
suggestion === void 0 ? void 0 : { suggestion }
|
|
57
|
-
);
|
|
58
|
-
return { valid: asOf === void 0 ? { mode } : { mode, asOf } };
|
|
59
|
-
}
|
|
60
|
-
function withRecordedCoordinate(coordinate, recordedAsOf) {
|
|
61
|
-
assertValidRecordedInstant(recordedAsOf, "asOfRecorded");
|
|
62
|
-
return {
|
|
63
|
-
...coordinate,
|
|
64
|
-
recorded: { asOf: recordedAsOf }
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
function assertValidAsOf(mode, asOf, options) {
|
|
68
|
-
if (mode === "asOf" && asOf === void 0) {
|
|
69
|
-
throw new chunkBVRDGYXQ_cjs.ValidationError(
|
|
70
|
-
'Temporal mode "asOf" requires a timestamp',
|
|
71
|
-
{
|
|
72
|
-
issues: [
|
|
73
|
-
{ path: "asOf", message: "Timestamp is required for asOf mode" }
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
suggestion: options?.suggestion ?? 'Provide an ISO-8601 timestamp for asOf mode, e.g. "2026-01-01T00:00:00.000Z".'
|
|
78
|
-
}
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
if (asOf !== void 0) {
|
|
82
|
-
chunk3GH67G4Z_cjs.validateCanonicalIsoDate(asOf, "asOf");
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
function describeCoordinate(coordinate) {
|
|
86
|
-
const { mode, asOf } = coordinate.valid;
|
|
87
|
-
const valid = asOf === void 0 ? `mode "${mode}"` : `mode "${mode}" asOf ${asOf}`;
|
|
88
|
-
return coordinate.recorded === void 0 ? valid : `${valid}, recorded asOf ${coordinate.recorded.asOf}`;
|
|
89
|
-
}
|
|
90
|
-
function coordinateContext(coordinate) {
|
|
91
|
-
const { mode, asOf } = coordinate.valid;
|
|
92
|
-
return {
|
|
93
|
-
temporalMode: mode,
|
|
94
|
-
...asOf !== void 0 && { asOf },
|
|
95
|
-
...coordinate.recorded === void 0 ? {} : { recordedAsOf: coordinate.recorded.asOf }
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
var SqlSchemaDescriptor = class {
|
|
99
|
-
// Private field gives SqlSchema nominal identity; runtime checks use instanceof.
|
|
100
|
-
#brand = true;
|
|
18
|
+
// src/query/compiler/schema.ts
|
|
19
|
+
var SQL_SCHEMA_BRAND = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol("sql-schema-v1");
|
|
20
|
+
var SqlSchema = class {
|
|
21
|
+
};
|
|
22
|
+
var SqlSchemaDescriptor = class extends SqlSchema {
|
|
101
23
|
tables;
|
|
102
24
|
nodesTable;
|
|
103
25
|
edgesTable;
|
|
@@ -107,6 +29,13 @@ var SqlSchemaDescriptor = class {
|
|
|
107
29
|
revisionOriginsTable;
|
|
108
30
|
fulltextTable;
|
|
109
31
|
constructor(fields) {
|
|
32
|
+
super();
|
|
33
|
+
Object.defineProperty(this, SQL_SCHEMA_BRAND, {
|
|
34
|
+
configurable: false,
|
|
35
|
+
enumerable: false,
|
|
36
|
+
value: true,
|
|
37
|
+
writable: false
|
|
38
|
+
});
|
|
110
39
|
this.tables = fields.tables;
|
|
111
40
|
this.nodesTable = fields.nodesTable;
|
|
112
41
|
this.edgesTable = fields.edgesTable;
|
|
@@ -115,7 +44,6 @@ var SqlSchemaDescriptor = class {
|
|
|
115
44
|
this.recordedClockTable = fields.recordedClockTable;
|
|
116
45
|
this.revisionOriginsTable = fields.revisionOriginsTable;
|
|
117
46
|
this.fulltextTable = fields.fulltextTable;
|
|
118
|
-
void this.#brand;
|
|
119
47
|
Object.freeze(this);
|
|
120
48
|
}
|
|
121
49
|
};
|
|
@@ -144,31 +72,30 @@ function resolveTableNames(names) {
|
|
|
144
72
|
var VALID_IDENTIFIER_PATTERN = /^[a-z_][a-z0-9_$]*$/i;
|
|
145
73
|
function validateTableName(name, label) {
|
|
146
74
|
if (!name || name.length === 0) {
|
|
147
|
-
throw new
|
|
75
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(`${label} table name cannot be empty`);
|
|
148
76
|
}
|
|
149
|
-
if (name.length >
|
|
150
|
-
throw new
|
|
151
|
-
`${label} table name exceeds maximum length of ${
|
|
77
|
+
if (name.length > chunkNAUA4PW5_cjs.MAX_PG_IDENTIFIER_LENGTH) {
|
|
78
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
79
|
+
`${label} table name exceeds maximum length of ${chunkNAUA4PW5_cjs.MAX_PG_IDENTIFIER_LENGTH} characters`
|
|
152
80
|
);
|
|
153
81
|
}
|
|
154
82
|
if (!VALID_IDENTIFIER_PATTERN.test(name)) {
|
|
155
|
-
throw new
|
|
83
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
156
84
|
`${label} table name "${name}" is not a valid SQL identifier. Table names must start with a letter or underscore and contain only letters, digits, underscores, or dollar signs.`
|
|
157
85
|
);
|
|
158
86
|
}
|
|
159
87
|
}
|
|
160
|
-
function quoteIdentifier(name) {
|
|
161
|
-
return `"${name.replaceAll('"', '""')}"`;
|
|
162
|
-
}
|
|
163
88
|
function freezeSqlSchema(fields) {
|
|
164
89
|
return new SqlSchemaDescriptor(fields);
|
|
165
90
|
}
|
|
166
91
|
function isSqlSchema(schema) {
|
|
167
|
-
|
|
92
|
+
if (typeof schema !== "object" || schema === null) return false;
|
|
93
|
+
const candidate = schema;
|
|
94
|
+
return candidate[SQL_SCHEMA_BRAND] === true && typeof candidate["tables"] === "object" && candidate["tables"] !== null && Object.isFrozen(candidate["tables"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["nodesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["edgesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["recordedNodesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["recordedEdgesTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["recordedClockTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["revisionOriginsTable"]) && chunkX6RDQ5NB_cjs.isSqlFragment(candidate["fulltextTable"]) && Object.isFrozen(candidate);
|
|
168
95
|
}
|
|
169
96
|
function requireSqlSchema(schema, surface = "SqlSchema") {
|
|
170
97
|
if (isSqlSchema(schema)) return schema;
|
|
171
|
-
throw new
|
|
98
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
172
99
|
`${surface} must be created with createSqlSchema(...).`,
|
|
173
100
|
{ code: "INVALID_SQL_SCHEMA", surface },
|
|
174
101
|
{
|
|
@@ -188,20 +115,20 @@ function createSqlSchema(names = {}) {
|
|
|
188
115
|
validateTableName(tables.uniques, "uniques");
|
|
189
116
|
return freezeSqlSchema({
|
|
190
117
|
tables: Object.freeze(tables),
|
|
191
|
-
nodesTable:
|
|
192
|
-
edgesTable:
|
|
193
|
-
recordedNodesTable:
|
|
194
|
-
recordedEdgesTable:
|
|
195
|
-
recordedClockTable:
|
|
196
|
-
revisionOriginsTable:
|
|
197
|
-
fulltextTable:
|
|
118
|
+
nodesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.nodes),
|
|
119
|
+
edgesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.edges),
|
|
120
|
+
recordedNodesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.recordedNodes),
|
|
121
|
+
recordedEdgesTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.recordedEdges),
|
|
122
|
+
recordedClockTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.recordedClock),
|
|
123
|
+
revisionOriginsTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.revisionOrigins),
|
|
124
|
+
fulltextTable: chunkX6RDQ5NB_cjs.sql.identifier(tables.fulltext)
|
|
198
125
|
});
|
|
199
126
|
}
|
|
200
|
-
var EXTERNAL_RECORDED_READ_SOURCE =
|
|
201
|
-
"
|
|
127
|
+
var EXTERNAL_RECORDED_READ_SOURCE = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol(
|
|
128
|
+
"external-recorded-read-source-v1"
|
|
202
129
|
);
|
|
203
|
-
var TYPEGRAPH_RECORDED_READ_SOURCE =
|
|
204
|
-
"
|
|
130
|
+
var TYPEGRAPH_RECORDED_READ_SOURCE = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol(
|
|
131
|
+
"typegraph-recorded-read-source-v1"
|
|
205
132
|
);
|
|
206
133
|
function recordedRelation(options) {
|
|
207
134
|
const schema = requireSqlSchema(options.schema, "recordedRelation schema");
|
|
@@ -214,7 +141,7 @@ function recordedRelation(options) {
|
|
|
214
141
|
function requireExternalRecordedReadSource(source) {
|
|
215
142
|
if (source === void 0) return void 0;
|
|
216
143
|
if (isExternalRecordedReadSource(source)) return source;
|
|
217
|
-
throw new
|
|
144
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
218
145
|
"recordedRead must be created with recordedRelation({ schema }).",
|
|
219
146
|
{ code: "INVALID_RECORDED_READ_SOURCE" },
|
|
220
147
|
{
|
|
@@ -238,7 +165,7 @@ function createRecordedReadBinding(schema) {
|
|
|
238
165
|
function requireRecordedReadBinding(binding, surface) {
|
|
239
166
|
if (isRecordedReadBinding(binding)) return binding;
|
|
240
167
|
if (binding !== void 0) {
|
|
241
|
-
throw new
|
|
168
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
242
169
|
"Recorded-time reads require a recorded read relation created by TypeGraph.",
|
|
243
170
|
{ code: "INVALID_RECORDED_READ_BINDING", surface },
|
|
244
171
|
{
|
|
@@ -246,7 +173,7 @@ function requireRecordedReadBinding(binding, surface) {
|
|
|
246
173
|
}
|
|
247
174
|
);
|
|
248
175
|
}
|
|
249
|
-
throw new
|
|
176
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
250
177
|
"Recorded-time reads require a recorded read relation.",
|
|
251
178
|
{ code: "RECORDED_READ_REQUIRES_BINDING", surface },
|
|
252
179
|
{
|
|
@@ -291,12 +218,666 @@ var ALIAS_CTE_PREFIX = "cte_";
|
|
|
291
218
|
var EMBEDDINGS_CTE_ALIAS = "cte_embeddings";
|
|
292
219
|
var FULLTEXT_CTE_ALIAS = "cte_fulltext";
|
|
293
220
|
var HYBRID_CANDIDATES_CTE_ALIAS = "cte_relevance_candidates";
|
|
221
|
+
|
|
222
|
+
// src/store/types.ts
|
|
223
|
+
var AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = 1e3;
|
|
224
|
+
var TRANSACTION_RUNTIME = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol(
|
|
225
|
+
"transaction-runtime-v1"
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
// src/store/runtime-port.ts
|
|
229
|
+
var STORE_RUNTIME = chunkX6RDQ5NB_cjs.typeGraphGlobalSymbol("store-runtime-v1");
|
|
230
|
+
function storeRuntime(store) {
|
|
231
|
+
const runtime = store[STORE_RUNTIME];
|
|
232
|
+
if (runtime === void 0) {
|
|
233
|
+
throw new TypeError(
|
|
234
|
+
"Cannot access this Store's runtime port. The Store may come from an incompatible TypeGraph version."
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
return runtime;
|
|
238
|
+
}
|
|
239
|
+
function storeBackend(store) {
|
|
240
|
+
return storeRuntime(store).backend;
|
|
241
|
+
}
|
|
242
|
+
function transactionBackend(transaction) {
|
|
243
|
+
const runtime = transaction[TRANSACTION_RUNTIME];
|
|
244
|
+
if (runtime === void 0) {
|
|
245
|
+
throw new TypeError(
|
|
246
|
+
"Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
return runtime.backend;
|
|
250
|
+
}
|
|
251
|
+
function transactionNodeOperationHookRunner(transaction) {
|
|
252
|
+
const runtime = transaction[TRANSACTION_RUNTIME];
|
|
253
|
+
if (runtime === void 0) {
|
|
254
|
+
throw new TypeError(
|
|
255
|
+
"Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
return runtime.runNodeOperationHooks;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// src/query/compiler/temporal.ts
|
|
262
|
+
var pinnedReadInstant;
|
|
263
|
+
function withPinnedReadInstant(emit) {
|
|
264
|
+
if (pinnedReadInstant !== void 0) return emit();
|
|
265
|
+
pinnedReadInstant = chunkDDCYVIVV_cjs.nowIso();
|
|
266
|
+
try {
|
|
267
|
+
return emit();
|
|
268
|
+
} finally {
|
|
269
|
+
pinnedReadInstant = void 0;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
function currentReadInstant() {
|
|
273
|
+
return chunkX6RDQ5NB_cjs.sql`${pinnedReadInstant ?? chunkDDCYVIVV_cjs.nowIso()}`;
|
|
274
|
+
}
|
|
275
|
+
var CURRENT_READ_INSTANT_PLACEHOLDER = "__typegraph_current_read_instant__";
|
|
276
|
+
function currentReadInstantPlaceholder() {
|
|
277
|
+
return chunkX6RDQ5NB_cjs.sql`${chunkX6RDQ5NB_cjs.sql.placeholder(CURRENT_READ_INSTANT_PLACEHOLDER)}`;
|
|
278
|
+
}
|
|
279
|
+
function currentReadInstantFor(mode) {
|
|
280
|
+
return mode === "placeholder" ? currentReadInstantPlaceholder() : currentReadInstant();
|
|
281
|
+
}
|
|
282
|
+
function compileTemporalFilter(options) {
|
|
283
|
+
const { mode, asOf, tableAlias, currentTimestamp, recordedAsOf } = options;
|
|
284
|
+
const prefix = tableAlias ? chunkX6RDQ5NB_cjs.sql.raw(`${tableAlias}.`) : chunkX6RDQ5NB_cjs.sql.raw("");
|
|
285
|
+
const deletedAt = chunkX6RDQ5NB_cjs.sql`${prefix}deleted_at`;
|
|
286
|
+
const validFrom = chunkX6RDQ5NB_cjs.sql`${prefix}valid_from`;
|
|
287
|
+
const validTo = chunkX6RDQ5NB_cjs.sql`${prefix}valid_to`;
|
|
288
|
+
const validFilter = (() => {
|
|
289
|
+
switch (mode) {
|
|
290
|
+
case "current": {
|
|
291
|
+
const now = recordedAsOf === void 0 ? currentTimestamp ?? currentReadInstant() : chunkX6RDQ5NB_cjs.sql`${recordedAsOf}`;
|
|
292
|
+
return chunkX6RDQ5NB_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${now}) AND (${validTo} IS NULL OR ${validTo} > ${now})`;
|
|
293
|
+
}
|
|
294
|
+
case "asOf": {
|
|
295
|
+
if (asOf === void 0) {
|
|
296
|
+
throw new Error(
|
|
297
|
+
`asOf timestamp is required for temporal mode "asOf"`
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
const timestamp = asOf;
|
|
301
|
+
return chunkX6RDQ5NB_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${timestamp}) AND (${validTo} IS NULL OR ${validTo} > ${timestamp})`;
|
|
302
|
+
}
|
|
303
|
+
case "includeEnded": {
|
|
304
|
+
return chunkX6RDQ5NB_cjs.sql`${deletedAt} IS NULL`;
|
|
305
|
+
}
|
|
306
|
+
case "includeTombstones": {
|
|
307
|
+
return chunkX6RDQ5NB_cjs.sql.raw("1=1");
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
})();
|
|
311
|
+
if (recordedAsOf === void 0) return validFilter;
|
|
312
|
+
const recordedFrom = chunkX6RDQ5NB_cjs.sql`${prefix}recorded_from`;
|
|
313
|
+
const recordedTo = chunkX6RDQ5NB_cjs.sql`${prefix}recorded_to`;
|
|
314
|
+
return chunkX6RDQ5NB_cjs.sql`(${validFilter}) AND ${recordedFrom} <= ${recordedAsOf} AND ${recordedAsOf} < ${recordedTo}`;
|
|
315
|
+
}
|
|
316
|
+
function extractTemporalOptions(ast, tableAlias) {
|
|
317
|
+
return {
|
|
318
|
+
mode: ast.temporalMode.mode,
|
|
319
|
+
asOf: ast.temporalMode.asOf,
|
|
320
|
+
recordedAsOf: ast.recordedAsOf,
|
|
321
|
+
tableAlias
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// src/query/subquery-utils.ts
|
|
326
|
+
function normalizeValueType(valueType) {
|
|
327
|
+
if (valueType === void 0 || valueType === "unknown") {
|
|
328
|
+
return void 0;
|
|
329
|
+
}
|
|
330
|
+
return valueType;
|
|
331
|
+
}
|
|
332
|
+
function isUnsupportedInSubqueryValueType(valueType) {
|
|
333
|
+
const normalized = normalizeValueType(valueType);
|
|
334
|
+
return normalized === "array" || normalized === "object" || normalized === "embedding";
|
|
335
|
+
}
|
|
336
|
+
function isInSubqueryTypeCompatible(left, right) {
|
|
337
|
+
const normalizedLeft = normalizeValueType(left);
|
|
338
|
+
const normalizedRight = normalizeValueType(right);
|
|
339
|
+
if (normalizedLeft === void 0 || normalizedRight === void 0) {
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
return normalizedLeft === normalizedRight;
|
|
343
|
+
}
|
|
344
|
+
function getAggregateValueType(aggregate) {
|
|
345
|
+
switch (aggregate.function) {
|
|
346
|
+
case "count":
|
|
347
|
+
case "countDistinct":
|
|
348
|
+
case "sum":
|
|
349
|
+
case "avg": {
|
|
350
|
+
return "number";
|
|
351
|
+
}
|
|
352
|
+
case "min":
|
|
353
|
+
case "max": {
|
|
354
|
+
return normalizeValueType(aggregate.field.valueType);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
function getProjectedValueTypes(subquery) {
|
|
359
|
+
if (subquery.selectiveFields && subquery.selectiveFields.length > 0) {
|
|
360
|
+
return subquery.selectiveFields.map(
|
|
361
|
+
(field) => normalizeValueType(field.valueType)
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
return subquery.projection.fields.map((field) => {
|
|
365
|
+
if (field.source.__type === "aggregate") {
|
|
366
|
+
return getAggregateValueType(field.source);
|
|
367
|
+
}
|
|
368
|
+
return normalizeValueType(field.source.valueType);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
function getSubqueryColumnCount(subquery) {
|
|
372
|
+
return getProjectedValueTypes(subquery).length;
|
|
373
|
+
}
|
|
374
|
+
function getSingleSubqueryColumnValueType(subquery) {
|
|
375
|
+
const valueTypes = getProjectedValueTypes(subquery);
|
|
376
|
+
if (valueTypes.length !== 1) {
|
|
377
|
+
return void 0;
|
|
378
|
+
}
|
|
379
|
+
return valueTypes[0];
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// src/query/predicates.ts
|
|
383
|
+
function predicate(expr) {
|
|
384
|
+
return {
|
|
385
|
+
__expr: expr,
|
|
386
|
+
and: (other) => predicate({
|
|
387
|
+
__type: "and",
|
|
388
|
+
predicates: [expr, other.__expr]
|
|
389
|
+
}),
|
|
390
|
+
or: (other) => predicate({
|
|
391
|
+
__type: "or",
|
|
392
|
+
predicates: [expr, other.__expr]
|
|
393
|
+
}),
|
|
394
|
+
not: () => predicate({
|
|
395
|
+
__type: "not",
|
|
396
|
+
predicate: expr
|
|
397
|
+
})
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
function param(name) {
|
|
401
|
+
if (name === CURRENT_READ_INSTANT_PLACEHOLDER) {
|
|
402
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
403
|
+
`Parameter name "${name}" is reserved for internal use`,
|
|
404
|
+
{ parameterName: name }
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
return { __type: "parameter", name };
|
|
408
|
+
}
|
|
409
|
+
function isParameterRef(value) {
|
|
410
|
+
if (typeof value !== "object" || value === null) return false;
|
|
411
|
+
return value.__type === "parameter";
|
|
412
|
+
}
|
|
413
|
+
function fieldRef(alias, path, options) {
|
|
414
|
+
return {
|
|
415
|
+
__type: "field_ref",
|
|
416
|
+
alias,
|
|
417
|
+
path,
|
|
418
|
+
...options?.jsonPointer !== void 0 && {
|
|
419
|
+
jsonPointer: options.jsonPointer
|
|
420
|
+
},
|
|
421
|
+
...options?.valueType !== void 0 && { valueType: options.valueType },
|
|
422
|
+
...options?.elementType !== void 0 && {
|
|
423
|
+
elementType: options.elementType
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
function coerceLiteralValue(value) {
|
|
428
|
+
if (value instanceof Date) {
|
|
429
|
+
return value;
|
|
430
|
+
}
|
|
431
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
432
|
+
return value;
|
|
433
|
+
}
|
|
434
|
+
throw new Error(`Unsupported literal value type: ${typeof value}`);
|
|
435
|
+
}
|
|
436
|
+
function inferLiteralValueType(value) {
|
|
437
|
+
if (typeof value === "string") {
|
|
438
|
+
return "string";
|
|
439
|
+
}
|
|
440
|
+
if (typeof value === "number") {
|
|
441
|
+
return "number";
|
|
442
|
+
}
|
|
443
|
+
return "boolean";
|
|
444
|
+
}
|
|
445
|
+
function literal(value) {
|
|
446
|
+
if (value instanceof Date) {
|
|
447
|
+
return { __type: "literal", value: value.toISOString(), valueType: "date" };
|
|
448
|
+
}
|
|
449
|
+
const valueType = inferLiteralValueType(value);
|
|
450
|
+
return {
|
|
451
|
+
__type: "literal",
|
|
452
|
+
value,
|
|
453
|
+
valueType
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
function comparison(op, field, value) {
|
|
457
|
+
if (isParameterRef(value)) {
|
|
458
|
+
const expr2 = {
|
|
459
|
+
__type: "comparison",
|
|
460
|
+
op,
|
|
461
|
+
left: field,
|
|
462
|
+
right: value
|
|
463
|
+
};
|
|
464
|
+
return predicate(expr2);
|
|
465
|
+
}
|
|
466
|
+
const coercedValue = coerceLiteralValue(value);
|
|
467
|
+
const expr = {
|
|
468
|
+
__type: "comparison",
|
|
469
|
+
op,
|
|
470
|
+
left: field,
|
|
471
|
+
right: literal(coercedValue)
|
|
472
|
+
};
|
|
473
|
+
return predicate(expr);
|
|
474
|
+
}
|
|
475
|
+
function inComparison(op, field, values) {
|
|
476
|
+
const literals = values.map((value) => literal(coerceLiteralValue(value)));
|
|
477
|
+
const expr = {
|
|
478
|
+
__type: "comparison",
|
|
479
|
+
op,
|
|
480
|
+
left: field,
|
|
481
|
+
right: literals
|
|
482
|
+
};
|
|
483
|
+
return predicate(expr);
|
|
484
|
+
}
|
|
485
|
+
function stringOp(op, field, pattern) {
|
|
486
|
+
if (isParameterRef(pattern)) {
|
|
487
|
+
const expr2 = {
|
|
488
|
+
__type: "string_op",
|
|
489
|
+
op,
|
|
490
|
+
field,
|
|
491
|
+
pattern
|
|
492
|
+
};
|
|
493
|
+
return predicate(expr2);
|
|
494
|
+
}
|
|
495
|
+
const expr = {
|
|
496
|
+
__type: "string_op",
|
|
497
|
+
op,
|
|
498
|
+
field,
|
|
499
|
+
pattern
|
|
500
|
+
};
|
|
501
|
+
return predicate(expr);
|
|
502
|
+
}
|
|
503
|
+
function nullCheck(op, field) {
|
|
504
|
+
const expr = {
|
|
505
|
+
__type: "null_check",
|
|
506
|
+
op,
|
|
507
|
+
field
|
|
508
|
+
};
|
|
509
|
+
return predicate(expr);
|
|
510
|
+
}
|
|
511
|
+
function between(field, lower, upper) {
|
|
512
|
+
const expr = {
|
|
513
|
+
__type: "between",
|
|
514
|
+
field,
|
|
515
|
+
lower: isParameterRef(lower) ? lower : literal(lower),
|
|
516
|
+
upper: isParameterRef(upper) ? upper : literal(upper)
|
|
517
|
+
};
|
|
518
|
+
return predicate(expr);
|
|
519
|
+
}
|
|
520
|
+
function baseFieldBuilder(field) {
|
|
521
|
+
return {
|
|
522
|
+
eq: (value) => comparison("eq", field, value),
|
|
523
|
+
neq: (value) => comparison("neq", field, value),
|
|
524
|
+
isNull: () => nullCheck("isNull", field),
|
|
525
|
+
isNotNull: () => nullCheck("isNotNull", field),
|
|
526
|
+
in: (values) => inComparison("in", field, values),
|
|
527
|
+
notIn: (values) => inComparison("notIn", field, values)
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
function stringField(field) {
|
|
531
|
+
return {
|
|
532
|
+
...baseFieldBuilder(field),
|
|
533
|
+
gt: (value) => comparison("gt", field, value),
|
|
534
|
+
gte: (value) => comparison("gte", field, value),
|
|
535
|
+
lt: (value) => comparison("lt", field, value),
|
|
536
|
+
lte: (value) => comparison("lte", field, value),
|
|
537
|
+
contains: (pattern) => stringOp("contains", field, pattern),
|
|
538
|
+
startsWith: (pattern) => stringOp("startsWith", field, pattern),
|
|
539
|
+
endsWith: (pattern) => stringOp("endsWith", field, pattern),
|
|
540
|
+
like: (pattern) => stringOp("like", field, pattern),
|
|
541
|
+
ilike: (pattern) => stringOp("ilike", field, pattern)
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
var DEFAULT_FULLTEXT_MATCH_K = 50;
|
|
545
|
+
function createFulltextAccessor(alias, hasSearchableField) {
|
|
546
|
+
return {
|
|
547
|
+
matches: (query, k, options) => {
|
|
548
|
+
if (!hasSearchableField()) {
|
|
549
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
550
|
+
`Cannot call .$fulltext.matches() on alias "${alias}" \u2014 its node kind has no fields declared with searchable(). Add at least one: \`title: searchable({ language: "english" })\`.`
|
|
551
|
+
);
|
|
552
|
+
}
|
|
553
|
+
return fulltextMatch(
|
|
554
|
+
fieldRef(alias, ["$fulltext"]),
|
|
555
|
+
query,
|
|
556
|
+
k ?? DEFAULT_FULLTEXT_MATCH_K,
|
|
557
|
+
options
|
|
558
|
+
);
|
|
559
|
+
}
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
function fulltextMatch(field, query, limit, options) {
|
|
563
|
+
if (!Number.isFinite(limit) || limit <= 0) {
|
|
564
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
565
|
+
`matches() limit must be a positive finite number, got ${String(limit)}`
|
|
566
|
+
);
|
|
567
|
+
}
|
|
568
|
+
const expr = {
|
|
569
|
+
__type: "fulltext_match",
|
|
570
|
+
field,
|
|
571
|
+
query,
|
|
572
|
+
mode: options?.mode ?? "websearch",
|
|
573
|
+
limit,
|
|
574
|
+
...options?.language === void 0 ? {} : { language: options.language },
|
|
575
|
+
...options?.minScore === void 0 ? {} : { minScore: options.minScore }
|
|
576
|
+
};
|
|
577
|
+
return predicate(expr);
|
|
578
|
+
}
|
|
579
|
+
function numberField(field) {
|
|
580
|
+
return {
|
|
581
|
+
...baseFieldBuilder(field),
|
|
582
|
+
gt: (value) => comparison("gt", field, value),
|
|
583
|
+
gte: (value) => comparison("gte", field, value),
|
|
584
|
+
lt: (value) => comparison("lt", field, value),
|
|
585
|
+
lte: (value) => comparison("lte", field, value),
|
|
586
|
+
between: (lower, upper) => between(field, lower, upper)
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
function dateField(field) {
|
|
590
|
+
return {
|
|
591
|
+
...baseFieldBuilder(field),
|
|
592
|
+
gt: (value) => comparison("gt", field, value),
|
|
593
|
+
gte: (value) => comparison("gte", field, value),
|
|
594
|
+
lt: (value) => comparison("lt", field, value),
|
|
595
|
+
lte: (value) => comparison("lte", field, value),
|
|
596
|
+
between: (lower, upper) => between(field, lower, upper)
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
function baseField(field) {
|
|
600
|
+
return baseFieldBuilder(field);
|
|
601
|
+
}
|
|
602
|
+
function arrayOp(op, field, values, length) {
|
|
603
|
+
const expr = {
|
|
604
|
+
__type: "array_op",
|
|
605
|
+
op,
|
|
606
|
+
field,
|
|
607
|
+
...values !== void 0 && {
|
|
608
|
+
values: values.map((value) => literal(coerceLiteralValue(value)))
|
|
609
|
+
},
|
|
610
|
+
...length !== void 0 && { length }
|
|
611
|
+
};
|
|
612
|
+
return predicate(expr);
|
|
613
|
+
}
|
|
614
|
+
function arrayField(field) {
|
|
615
|
+
return {
|
|
616
|
+
...baseFieldBuilder(field),
|
|
617
|
+
contains: (value) => arrayOp("contains", field, [value]),
|
|
618
|
+
containsAll: (values) => arrayOp("containsAll", field, values),
|
|
619
|
+
containsAny: (values) => arrayOp("containsAny", field, values),
|
|
620
|
+
isEmpty: () => arrayOp("isEmpty", field),
|
|
621
|
+
isNotEmpty: () => arrayOp("isNotEmpty", field),
|
|
622
|
+
lengthEq: (length) => arrayOp("lengthEq", field, void 0, length),
|
|
623
|
+
lengthGt: (length) => arrayOp("lengthGt", field, void 0, length),
|
|
624
|
+
lengthGte: (length) => arrayOp("lengthGte", field, void 0, length),
|
|
625
|
+
lengthLt: (length) => arrayOp("lengthLt", field, void 0, length),
|
|
626
|
+
lengthLte: (length) => arrayOp("lengthLte", field, void 0, length)
|
|
627
|
+
};
|
|
628
|
+
}
|
|
629
|
+
function vectorSimilarity(field, queryEmbedding, limit, options) {
|
|
630
|
+
const expr = {
|
|
631
|
+
__type: "vector_similarity",
|
|
632
|
+
field,
|
|
633
|
+
queryEmbedding,
|
|
634
|
+
// Leave metric unset when the caller didn't specify one, so the compiler
|
|
635
|
+
// resolves the field's declared metric per kind. Defaulting to "cosine"
|
|
636
|
+
// here would mis-rank l2/inner_product fields and bypass their ANN index.
|
|
637
|
+
...options?.metric !== void 0 && { metric: options.metric },
|
|
638
|
+
limit,
|
|
639
|
+
...options?.minScore !== void 0 && { minScore: options.minScore },
|
|
640
|
+
...options?.approximate !== void 0 && {
|
|
641
|
+
approximate: options.approximate
|
|
642
|
+
}
|
|
643
|
+
};
|
|
644
|
+
return predicate(expr);
|
|
645
|
+
}
|
|
646
|
+
function embeddingField(field) {
|
|
647
|
+
return {
|
|
648
|
+
...baseFieldBuilder(field),
|
|
649
|
+
similarTo: (queryEmbedding, k, options) => vectorSimilarity(field, queryEmbedding, k, options)
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
function buildFieldBuilderForTypeInfo(field, typeInfo) {
|
|
653
|
+
if (!typeInfo) {
|
|
654
|
+
return baseField(field);
|
|
655
|
+
}
|
|
656
|
+
switch (typeInfo.valueType) {
|
|
657
|
+
case "string": {
|
|
658
|
+
return stringField(field);
|
|
659
|
+
}
|
|
660
|
+
case "number": {
|
|
661
|
+
return numberField(field);
|
|
662
|
+
}
|
|
663
|
+
case "boolean": {
|
|
664
|
+
return baseField(field);
|
|
665
|
+
}
|
|
666
|
+
case "date": {
|
|
667
|
+
return dateField(field);
|
|
668
|
+
}
|
|
669
|
+
case "array": {
|
|
670
|
+
return arrayField(field);
|
|
671
|
+
}
|
|
672
|
+
case "object": {
|
|
673
|
+
return objectField(field, { typeInfo });
|
|
674
|
+
}
|
|
675
|
+
case "embedding": {
|
|
676
|
+
return embeddingField(field);
|
|
677
|
+
}
|
|
678
|
+
case "unknown": {
|
|
679
|
+
return baseField(field);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
function resolvePointerTypeInfo(typeInfo, pointer) {
|
|
684
|
+
return chunkSJDMVITW_cjs.resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer);
|
|
685
|
+
}
|
|
686
|
+
function objectOp(op, field, pointer, value, options) {
|
|
687
|
+
const expr = {
|
|
688
|
+
__type: "object_op",
|
|
689
|
+
op,
|
|
690
|
+
field,
|
|
691
|
+
pointer,
|
|
692
|
+
...value !== void 0 && {
|
|
693
|
+
value: literal(coerceLiteralValue(value))
|
|
694
|
+
},
|
|
695
|
+
...options?.valueType !== void 0 && { valueType: options.valueType },
|
|
696
|
+
...options?.elementType !== void 0 && {
|
|
697
|
+
elementType: options.elementType
|
|
698
|
+
}
|
|
699
|
+
};
|
|
700
|
+
return predicate(expr);
|
|
701
|
+
}
|
|
702
|
+
function objectField(field, options) {
|
|
703
|
+
const basePointer = field.jsonPointer;
|
|
704
|
+
return {
|
|
705
|
+
...baseFieldBuilder(field),
|
|
706
|
+
get: (key) => {
|
|
707
|
+
const pointer = chunkTDXIBCGY_cjs.jsonPointer([key]);
|
|
708
|
+
const nestedPointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, pointer);
|
|
709
|
+
const resolved = resolvePointerTypeInfo(options?.typeInfo, pointer);
|
|
710
|
+
const nestedRef = fieldRef(field.alias, field.path, {
|
|
711
|
+
jsonPointer: nestedPointer,
|
|
712
|
+
...resolved?.valueType !== void 0 && {
|
|
713
|
+
valueType: resolved.valueType
|
|
714
|
+
},
|
|
715
|
+
...resolved?.elementType !== void 0 && {
|
|
716
|
+
elementType: resolved.elementType
|
|
717
|
+
}
|
|
718
|
+
});
|
|
719
|
+
return buildFieldBuilderForTypeInfo(nestedRef, resolved);
|
|
720
|
+
},
|
|
721
|
+
hasKey: (key) => {
|
|
722
|
+
const pointer = chunkTDXIBCGY_cjs.jsonPointer([key]);
|
|
723
|
+
resolvePointerTypeInfo(options?.typeInfo, pointer);
|
|
724
|
+
return objectOp("hasKey", field, pointer);
|
|
725
|
+
},
|
|
726
|
+
hasPath: (pointer) => {
|
|
727
|
+
const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
|
|
728
|
+
resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
729
|
+
return objectOp("hasPath", field, normalized);
|
|
730
|
+
},
|
|
731
|
+
pathEquals: (pointer, value) => {
|
|
732
|
+
const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
|
|
733
|
+
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
734
|
+
if (resolved && (resolved.valueType === "array" || resolved.valueType === "object")) {
|
|
735
|
+
throw new Error("pathEquals is only supported for scalar JSON values");
|
|
736
|
+
}
|
|
737
|
+
const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
|
|
738
|
+
return objectOp("pathEquals", field, normalized, value, predicateOptions);
|
|
739
|
+
},
|
|
740
|
+
pathContains: (pointer, value) => {
|
|
741
|
+
const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
|
|
742
|
+
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
743
|
+
if (resolved && resolved.valueType !== "array") {
|
|
744
|
+
throw new Error("pathContains is only supported for JSON array values");
|
|
745
|
+
}
|
|
746
|
+
const predicateOptions = resolved?.elementType === void 0 ? void 0 : { elementType: resolved.elementType };
|
|
747
|
+
return objectOp(
|
|
748
|
+
"pathContains",
|
|
749
|
+
field,
|
|
750
|
+
normalized,
|
|
751
|
+
value,
|
|
752
|
+
predicateOptions
|
|
753
|
+
);
|
|
754
|
+
},
|
|
755
|
+
pathIsNull: (pointer) => {
|
|
756
|
+
const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
|
|
757
|
+
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
758
|
+
const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
|
|
759
|
+
return objectOp(
|
|
760
|
+
"pathIsNull",
|
|
761
|
+
field,
|
|
762
|
+
normalized,
|
|
763
|
+
void 0,
|
|
764
|
+
predicateOptions
|
|
765
|
+
);
|
|
766
|
+
},
|
|
767
|
+
pathIsNotNull: (pointer) => {
|
|
768
|
+
const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
|
|
769
|
+
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
770
|
+
const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
|
|
771
|
+
return objectOp(
|
|
772
|
+
"pathIsNotNull",
|
|
773
|
+
field,
|
|
774
|
+
normalized,
|
|
775
|
+
void 0,
|
|
776
|
+
predicateOptions
|
|
777
|
+
);
|
|
778
|
+
},
|
|
779
|
+
field: (pointer) => {
|
|
780
|
+
const normalized = chunkTDXIBCGY_cjs.normalizeJsonPointer(pointer);
|
|
781
|
+
const nestedPointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, normalized);
|
|
782
|
+
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
783
|
+
const nestedRef = fieldRef(field.alias, field.path, {
|
|
784
|
+
jsonPointer: nestedPointer,
|
|
785
|
+
...resolved?.valueType !== void 0 && {
|
|
786
|
+
valueType: resolved.valueType
|
|
787
|
+
},
|
|
788
|
+
...resolved?.elementType !== void 0 && {
|
|
789
|
+
elementType: resolved.elementType
|
|
790
|
+
}
|
|
791
|
+
});
|
|
792
|
+
return buildFieldBuilderForTypeInfo(nestedRef, resolved);
|
|
793
|
+
}
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
function exists(subquery) {
|
|
797
|
+
const expr = {
|
|
798
|
+
__type: "exists",
|
|
799
|
+
subquery,
|
|
800
|
+
negated: false
|
|
801
|
+
};
|
|
802
|
+
return predicate(expr);
|
|
803
|
+
}
|
|
804
|
+
function notExists(subquery) {
|
|
805
|
+
const expr = {
|
|
806
|
+
__type: "exists",
|
|
807
|
+
subquery,
|
|
808
|
+
negated: true
|
|
809
|
+
};
|
|
810
|
+
return predicate(expr);
|
|
811
|
+
}
|
|
812
|
+
function inSubquery(field, subquery) {
|
|
813
|
+
assertSingleColumnSubquery(subquery);
|
|
814
|
+
assertCompatibleSubqueryValueTypes(field, subquery);
|
|
815
|
+
const expr = {
|
|
816
|
+
__type: "in_subquery",
|
|
817
|
+
field,
|
|
818
|
+
subquery,
|
|
819
|
+
negated: false
|
|
820
|
+
};
|
|
821
|
+
return predicate(expr);
|
|
822
|
+
}
|
|
823
|
+
function notInSubquery(field, subquery) {
|
|
824
|
+
assertSingleColumnSubquery(subquery);
|
|
825
|
+
assertCompatibleSubqueryValueTypes(field, subquery);
|
|
826
|
+
const expr = {
|
|
827
|
+
__type: "in_subquery",
|
|
828
|
+
field,
|
|
829
|
+
subquery,
|
|
830
|
+
negated: true
|
|
831
|
+
};
|
|
832
|
+
return predicate(expr);
|
|
833
|
+
}
|
|
834
|
+
function assertSingleColumnSubquery(subquery) {
|
|
835
|
+
const columnCount = getSubqueryColumnCount(subquery);
|
|
836
|
+
if (columnCount === 1) return;
|
|
837
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
838
|
+
`IN/NOT IN subquery must project exactly 1 column, but got ${columnCount}`,
|
|
839
|
+
{ subqueryColumnCount: columnCount },
|
|
840
|
+
{
|
|
841
|
+
suggestion: "Use aggregate() with exactly one projected field for scalar IN/NOT IN subqueries."
|
|
842
|
+
}
|
|
843
|
+
);
|
|
844
|
+
}
|
|
845
|
+
function assertCompatibleSubqueryValueTypes(field, subquery) {
|
|
846
|
+
const fieldValueType = field.valueType;
|
|
847
|
+
const subqueryValueType = getSingleSubqueryColumnValueType(subquery);
|
|
848
|
+
const resolvedValueType = fieldValueType ?? subqueryValueType;
|
|
849
|
+
if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
|
|
850
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
851
|
+
`IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
|
|
852
|
+
{ valueType: resolvedValueType },
|
|
853
|
+
{
|
|
854
|
+
suggestion: "Use scalar fields (string/number/boolean/date) in IN/NOT IN predicates."
|
|
855
|
+
}
|
|
856
|
+
);
|
|
857
|
+
}
|
|
858
|
+
if (isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
861
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
862
|
+
`IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
|
|
863
|
+
{
|
|
864
|
+
fieldValueType,
|
|
865
|
+
subqueryValueType
|
|
866
|
+
}
|
|
867
|
+
);
|
|
868
|
+
}
|
|
294
869
|
function generateId() {
|
|
295
870
|
return nanoid.nanoid();
|
|
296
871
|
}
|
|
872
|
+
|
|
873
|
+
// src/store/recorded-capture/guards.ts
|
|
874
|
+
var RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK = {
|
|
875
|
+
postgres: true,
|
|
876
|
+
sqlite: false
|
|
877
|
+
};
|
|
297
878
|
function requireRecordedSchema(target) {
|
|
298
879
|
if (target.tableNames === void 0) {
|
|
299
|
-
throw new
|
|
880
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
300
881
|
"Recorded-time capture requires the backend to expose tableNames.",
|
|
301
882
|
{ dialect: target.dialect },
|
|
302
883
|
{
|
|
@@ -308,7 +889,7 @@ function requireRecordedSchema(target) {
|
|
|
308
889
|
}
|
|
309
890
|
function requireCaptureStatements(target) {
|
|
310
891
|
if (target.executeStatement === void 0) {
|
|
311
|
-
throw new
|
|
892
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
312
893
|
"Recorded-time capture requires backend.executeStatement support on the transaction backend.",
|
|
313
894
|
{ dialect: target.dialect },
|
|
314
895
|
{
|
|
@@ -319,10 +900,10 @@ function requireCaptureStatements(target) {
|
|
|
319
900
|
}
|
|
320
901
|
async function executeStatement(target, query) {
|
|
321
902
|
requireCaptureStatements(target);
|
|
322
|
-
await target.executeStatement(
|
|
903
|
+
await target.executeStatement(chunkX6RDQ5NB_cjs.asCompiledStatementSql(query));
|
|
323
904
|
}
|
|
324
905
|
function unsupportedPostgresIsolationError(isolationLevel) {
|
|
325
|
-
return new
|
|
906
|
+
return new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
326
907
|
"Recorded-time capture on PostgreSQL requires read_committed isolation.",
|
|
327
908
|
{ isolationLevel: isolationLevel ?? "unknown" },
|
|
328
909
|
{
|
|
@@ -334,7 +915,7 @@ function isSupportedRecordedIsolationLevel(isolationLevel) {
|
|
|
334
915
|
return isolationLevel === void 0 || isolationLevel === "read_committed" || isolationLevel === "read_uncommitted";
|
|
335
916
|
}
|
|
336
917
|
function assertRequestedRecordedIsolation(backend, options) {
|
|
337
|
-
if (backend.dialect
|
|
918
|
+
if (!RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK[backend.dialect]) return;
|
|
338
919
|
if (options?.accessMode === "read_only") return;
|
|
339
920
|
const isolationLevel = options?.isolationLevel;
|
|
340
921
|
if (isSupportedRecordedIsolationLevel(isolationLevel)) return;
|
|
@@ -345,10 +926,10 @@ function normalizeIsolationLevel(value) {
|
|
|
345
926
|
return value.replaceAll(" ", "_").toLowerCase();
|
|
346
927
|
}
|
|
347
928
|
async function assertRecordedCaptureTransactionIsolation(target, options) {
|
|
348
|
-
if (target.dialect
|
|
929
|
+
if (!RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK[target.dialect]) return;
|
|
349
930
|
if (options?.accessMode === "read_only") return;
|
|
350
931
|
const rows = await target.execute(
|
|
351
|
-
|
|
932
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
|
|
352
933
|
SELECT current_setting('transaction_isolation') AS transaction_isolation
|
|
353
934
|
`)
|
|
354
935
|
);
|
|
@@ -359,7 +940,7 @@ async function assertRecordedCaptureTransactionIsolation(target, options) {
|
|
|
359
940
|
throw unsupportedPostgresIsolationError(isolationLevel);
|
|
360
941
|
}
|
|
361
942
|
function recordedCaptureRequiresCallbackTransactionError(details = {}) {
|
|
362
|
-
return new
|
|
943
|
+
return new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
363
944
|
"withTransaction() has no recorded-time capture flush point when history is enabled.",
|
|
364
945
|
{
|
|
365
946
|
...details,
|
|
@@ -371,7 +952,7 @@ function recordedCaptureRequiresCallbackTransactionError(details = {}) {
|
|
|
371
952
|
);
|
|
372
953
|
}
|
|
373
954
|
function historyUnsafeRawWriteError(surface) {
|
|
374
|
-
return new
|
|
955
|
+
return new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
375
956
|
`${surface} is not available when history capture is enabled because raw SQL writes bypass recorded-time capture.`,
|
|
376
957
|
{
|
|
377
958
|
code: "RECORDED_CAPTURE_RAW_SQL_DISABLED"
|
|
@@ -382,7 +963,7 @@ function historyUnsafeRawWriteError(surface) {
|
|
|
382
963
|
);
|
|
383
964
|
}
|
|
384
965
|
function revisionTrackingUnsafeRawWriteError(surface) {
|
|
385
|
-
return new
|
|
966
|
+
return new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
386
967
|
`${surface} is not available when revision tracking is enabled because raw SQL writes bypass the revision anchor.`,
|
|
387
968
|
{
|
|
388
969
|
code: "REVISION_TRACKING_RAW_SQL_DISABLED"
|
|
@@ -392,57 +973,12 @@ function revisionTrackingUnsafeRawWriteError(surface) {
|
|
|
392
973
|
}
|
|
393
974
|
);
|
|
394
975
|
}
|
|
395
|
-
function
|
|
976
|
+
function throwHistoryUnsafeSqlAccess() {
|
|
396
977
|
throw historyUnsafeRawWriteError("tx.sql");
|
|
397
978
|
}
|
|
398
|
-
function
|
|
979
|
+
function throwRevisionTrackingUnsafeSqlAccess() {
|
|
399
980
|
throw revisionTrackingUnsafeRawWriteError("tx.sql");
|
|
400
981
|
}
|
|
401
|
-
function createHistoryUnsafeSqlRef() {
|
|
402
|
-
return createUnsafeSqlRef(failHistoryUnsafeSqlRef);
|
|
403
|
-
}
|
|
404
|
-
function createRevisionTrackingUnsafeSqlRef() {
|
|
405
|
-
return createUnsafeSqlRef(failRevisionTrackingUnsafeSqlRef);
|
|
406
|
-
}
|
|
407
|
-
function createUnsafeSqlRef(fail) {
|
|
408
|
-
return new Proxy(
|
|
409
|
-
function unsafeSqlRef() {
|
|
410
|
-
return fail();
|
|
411
|
-
},
|
|
412
|
-
{
|
|
413
|
-
get() {
|
|
414
|
-
return fail();
|
|
415
|
-
},
|
|
416
|
-
apply() {
|
|
417
|
-
return fail();
|
|
418
|
-
},
|
|
419
|
-
set() {
|
|
420
|
-
return fail();
|
|
421
|
-
},
|
|
422
|
-
defineProperty() {
|
|
423
|
-
return fail();
|
|
424
|
-
},
|
|
425
|
-
deleteProperty() {
|
|
426
|
-
return fail();
|
|
427
|
-
},
|
|
428
|
-
// Enumeration / inspection traps too, so spreading (`{...tx.sql}`),
|
|
429
|
-
// `Object.keys`, `in`, and prototype reads also fail loudly rather than
|
|
430
|
-
// silently yielding an empty object that reads as "no raw handle".
|
|
431
|
-
has() {
|
|
432
|
-
return fail();
|
|
433
|
-
},
|
|
434
|
-
ownKeys() {
|
|
435
|
-
return fail();
|
|
436
|
-
},
|
|
437
|
-
getOwnPropertyDescriptor() {
|
|
438
|
-
return fail();
|
|
439
|
-
},
|
|
440
|
-
getPrototypeOf() {
|
|
441
|
-
return fail();
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
);
|
|
445
|
-
}
|
|
446
982
|
function rawWriteGuards(target, prefix) {
|
|
447
983
|
return {
|
|
448
984
|
...target.executeStatement === void 0 ? {} : {
|
|
@@ -463,7 +999,7 @@ function rawWriteGuards(target, prefix) {
|
|
|
463
999
|
}
|
|
464
1000
|
function assertCapturableBackend(backend) {
|
|
465
1001
|
if (!backend.capabilities.transactions) {
|
|
466
|
-
throw new
|
|
1002
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
467
1003
|
"history: true requires a backend with transaction support.",
|
|
468
1004
|
{ dialect: backend.dialect },
|
|
469
1005
|
{
|
|
@@ -472,7 +1008,7 @@ function assertCapturableBackend(backend) {
|
|
|
472
1008
|
);
|
|
473
1009
|
}
|
|
474
1010
|
if (backend.executeStatement === void 0) {
|
|
475
|
-
throw new
|
|
1011
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
476
1012
|
"history: true requires a backend that supports executeStatement.",
|
|
477
1013
|
{ dialect: backend.dialect },
|
|
478
1014
|
{
|
|
@@ -481,7 +1017,7 @@ function assertCapturableBackend(backend) {
|
|
|
481
1017
|
);
|
|
482
1018
|
}
|
|
483
1019
|
if (backend.capabilities.returning === false) {
|
|
484
|
-
throw new
|
|
1020
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
485
1021
|
"history: true requires a backend that supports UPDATE \u2026 RETURNING.",
|
|
486
1022
|
{ dialect: backend.dialect },
|
|
487
1023
|
{
|
|
@@ -490,7 +1026,7 @@ function assertCapturableBackend(backend) {
|
|
|
490
1026
|
);
|
|
491
1027
|
}
|
|
492
1028
|
if (backend.tableNames === void 0) {
|
|
493
|
-
throw new
|
|
1029
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
494
1030
|
"history: true requires a backend that exposes tableNames.",
|
|
495
1031
|
{ dialect: backend.dialect },
|
|
496
1032
|
{
|
|
@@ -501,7 +1037,7 @@ function assertCapturableBackend(backend) {
|
|
|
501
1037
|
}
|
|
502
1038
|
function assertRevisionTrackableBackend(backend) {
|
|
503
1039
|
if (!backend.capabilities.transactions) {
|
|
504
|
-
throw new
|
|
1040
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
505
1041
|
"revisionTracking: true requires a backend with transaction support.",
|
|
506
1042
|
{ dialect: backend.dialect },
|
|
507
1043
|
{
|
|
@@ -510,7 +1046,7 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
510
1046
|
);
|
|
511
1047
|
}
|
|
512
1048
|
if (backend.executeStatement === void 0) {
|
|
513
|
-
throw new
|
|
1049
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
514
1050
|
"revisionTracking: true requires a backend that supports executeStatement.",
|
|
515
1051
|
{ dialect: backend.dialect },
|
|
516
1052
|
{
|
|
@@ -519,7 +1055,7 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
519
1055
|
);
|
|
520
1056
|
}
|
|
521
1057
|
if (backend.tableNames === void 0) {
|
|
522
|
-
throw new
|
|
1058
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
523
1059
|
"revisionTracking: true requires a backend that exposes tableNames.",
|
|
524
1060
|
{ dialect: backend.dialect },
|
|
525
1061
|
{
|
|
@@ -528,7 +1064,7 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
528
1064
|
);
|
|
529
1065
|
}
|
|
530
1066
|
if (backend.ensureRevisionOriginsTable === void 0) {
|
|
531
|
-
throw new
|
|
1067
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
532
1068
|
"revisionTracking: true requires a backend that can bootstrap revision origins.",
|
|
533
1069
|
{ dialect: backend.dialect },
|
|
534
1070
|
{
|
|
@@ -540,11 +1076,15 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
540
1076
|
|
|
541
1077
|
// src/store/recorded-capture/clock.ts
|
|
542
1078
|
var RECORDED_MIN = "1970-01-01T00:00:00.000Z";
|
|
543
|
-
var RECORDED_MAX_TIME = new Date(RECORDED_MAX).getTime();
|
|
1079
|
+
var RECORDED_MAX_TIME = new Date(chunkSVUKGWSN_cjs.RECORDED_MAX).getTime();
|
|
544
1080
|
var RECORDED_CLOCK_ADVISORY_LOCK_NAMESPACE = "typegraph:recorded-clock";
|
|
545
1081
|
var RECORDED_GRAPH_WRITE_ADVISORY_LOCK_NAMESPACE = "typegraph:recorded-graph-write";
|
|
1082
|
+
var USES_RECORDED_GRAPH_ADVISORY_LOCK = {
|
|
1083
|
+
postgres: true,
|
|
1084
|
+
sqlite: false
|
|
1085
|
+
};
|
|
546
1086
|
function graphAdvisoryLockSql(namespace, graphId) {
|
|
547
|
-
return
|
|
1087
|
+
return chunkX6RDQ5NB_cjs.sql`
|
|
548
1088
|
SELECT pg_advisory_xact_lock(
|
|
549
1089
|
hashtext(${namespace}),
|
|
550
1090
|
hashtext(${graphId})
|
|
@@ -576,11 +1116,13 @@ function registerRecordedGraphLockMemo(backend, memo) {
|
|
|
576
1116
|
}
|
|
577
1117
|
async function acquireRecordedGraphWriteLock(target, graphId) {
|
|
578
1118
|
await target.execute(
|
|
579
|
-
|
|
1119
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(recordedGraphWriteAdvisoryLockSql(graphId))
|
|
580
1120
|
);
|
|
581
1121
|
}
|
|
582
1122
|
async function lockRecordedGraphWrite(target, graphId, memo) {
|
|
583
|
-
if (target.dialect
|
|
1123
|
+
if (!USES_RECORDED_GRAPH_ADVISORY_LOCK[target.dialect]) {
|
|
1124
|
+
return graphWriteLockEvidence();
|
|
1125
|
+
}
|
|
584
1126
|
const effectiveMemo = memo ?? recordedGraphLockMemos.get(target);
|
|
585
1127
|
if (effectiveMemo === void 0) {
|
|
586
1128
|
await acquireRecordedGraphWriteLock(target, graphId);
|
|
@@ -600,7 +1142,7 @@ async function lockRecordedGraphWrite(target, graphId, memo) {
|
|
|
600
1142
|
return graphWriteLockEvidence();
|
|
601
1143
|
}
|
|
602
1144
|
function failInvalidClockTimestamp(value) {
|
|
603
|
-
throw new
|
|
1145
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
604
1146
|
"Recorded clock row contained an invalid timestamp",
|
|
605
1147
|
{ value }
|
|
606
1148
|
);
|
|
@@ -622,7 +1164,9 @@ function clockTimestampMs(value) {
|
|
|
622
1164
|
const offsetMatch = OFFSET_DATETIME_PATTERN.exec(value);
|
|
623
1165
|
if (offsetMatch) {
|
|
624
1166
|
const [, date, time, offset] = offsetMatch;
|
|
625
|
-
return Date.parse(
|
|
1167
|
+
return Date.parse(
|
|
1168
|
+
`${date}T${time}${normalizeOffsetDesignator(chunk764JHTLT_cjs.requireDefined(offset))}`
|
|
1169
|
+
);
|
|
626
1170
|
}
|
|
627
1171
|
return Date.parse(value);
|
|
628
1172
|
}
|
|
@@ -639,12 +1183,12 @@ function toCanonicalIso(value) {
|
|
|
639
1183
|
return failInvalidClockTimestamp(value);
|
|
640
1184
|
}
|
|
641
1185
|
function nextRecordedCommitTime(previous) {
|
|
642
|
-
const wallTime = Date.parse(
|
|
1186
|
+
const wallTime = Date.parse(chunkDDCYVIVV_cjs.nowIso());
|
|
643
1187
|
return previous === void 0 ? wallTime : Math.max(wallTime, Date.parse(previous) + 1);
|
|
644
1188
|
}
|
|
645
1189
|
async function readRecordedClock(target, schema, graphId) {
|
|
646
1190
|
const rows = await target.execute(
|
|
647
|
-
|
|
1191
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
|
|
648
1192
|
SELECT recorded_at
|
|
649
1193
|
FROM ${schema.recordedClockTable}
|
|
650
1194
|
WHERE graph_id = ${graphId}
|
|
@@ -655,7 +1199,7 @@ async function readRecordedClock(target, schema, graphId) {
|
|
|
655
1199
|
}
|
|
656
1200
|
async function readRevisionOrigin(target, schema, graphId) {
|
|
657
1201
|
const rows = await target.execute(
|
|
658
|
-
|
|
1202
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
|
|
659
1203
|
SELECT origin
|
|
660
1204
|
FROM ${schema.revisionOriginsTable}
|
|
661
1205
|
WHERE graph_id = ${graphId}
|
|
@@ -664,7 +1208,7 @@ async function readRevisionOrigin(target, schema, graphId) {
|
|
|
664
1208
|
const first = rows[0];
|
|
665
1209
|
if (first === void 0) return void 0;
|
|
666
1210
|
if (typeof first.origin !== "string" || first.origin.length === 0) {
|
|
667
|
-
throw new
|
|
1211
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
668
1212
|
"Revision origin row contained an invalid origin",
|
|
669
1213
|
{ graphId, origin: first.origin }
|
|
670
1214
|
);
|
|
@@ -674,7 +1218,7 @@ async function readRevisionOrigin(target, schema, graphId) {
|
|
|
674
1218
|
async function ensureRevisionOrigin(target, schema, graphId) {
|
|
675
1219
|
const ensureTable = target.ensureRevisionOriginsTable;
|
|
676
1220
|
if (ensureTable === void 0) {
|
|
677
|
-
throw new
|
|
1221
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
678
1222
|
"Revision tracking requires a backend that can bootstrap revision origins.",
|
|
679
1223
|
{ dialect: target.dialect },
|
|
680
1224
|
{
|
|
@@ -687,7 +1231,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
|
|
|
687
1231
|
if (existing !== void 0) return existing;
|
|
688
1232
|
await executeStatement(
|
|
689
1233
|
target,
|
|
690
|
-
|
|
1234
|
+
chunkX6RDQ5NB_cjs.sql`
|
|
691
1235
|
INSERT INTO ${schema.revisionOriginsTable} (graph_id, origin)
|
|
692
1236
|
VALUES (${graphId}, ${generateId()})
|
|
693
1237
|
ON CONFLICT (graph_id) DO NOTHING
|
|
@@ -695,7 +1239,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
|
|
|
695
1239
|
);
|
|
696
1240
|
const origin = await readRevisionOrigin(target, schema, graphId);
|
|
697
1241
|
if (origin !== void 0) return origin;
|
|
698
|
-
throw new
|
|
1242
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
699
1243
|
"Revision origin was not persisted after initialization.",
|
|
700
1244
|
{ graphId, dialect: target.dialect }
|
|
701
1245
|
);
|
|
@@ -703,7 +1247,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
|
|
|
703
1247
|
async function writeRecordedClock(target, schema, graphId, recordedAt) {
|
|
704
1248
|
await executeStatement(
|
|
705
1249
|
target,
|
|
706
|
-
|
|
1250
|
+
chunkX6RDQ5NB_cjs.sql`
|
|
707
1251
|
INSERT INTO ${schema.recordedClockTable} (graph_id, recorded_at)
|
|
708
1252
|
VALUES (${graphId}, ${recordedAt})
|
|
709
1253
|
ON CONFLICT (graph_id) DO UPDATE SET recorded_at = ${recordedAt}
|
|
@@ -711,29 +1255,37 @@ async function writeRecordedClock(target, schema, graphId, recordedAt) {
|
|
|
711
1255
|
);
|
|
712
1256
|
}
|
|
713
1257
|
async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
1258
|
+
switch (target.dialect) {
|
|
1259
|
+
case "postgres": {
|
|
1260
|
+
await target.execute(
|
|
1261
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(recordedClockAdvisoryLockSql(graphId))
|
|
1262
|
+
);
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1265
|
+
case "sqlite": {
|
|
1266
|
+
if (ownsWriteLock) return;
|
|
1267
|
+
await executeStatement(
|
|
1268
|
+
target,
|
|
1269
|
+
chunkX6RDQ5NB_cjs.sql`
|
|
1270
|
+
INSERT INTO ${schema.recordedClockTable} (graph_id, recorded_at)
|
|
1271
|
+
VALUES (${graphId}, ${RECORDED_MIN})
|
|
1272
|
+
ON CONFLICT (graph_id) DO UPDATE SET recorded_at = recorded_at
|
|
1273
|
+
`
|
|
1274
|
+
);
|
|
1275
|
+
return;
|
|
1276
|
+
}
|
|
1277
|
+
default: {
|
|
1278
|
+
target.dialect;
|
|
1279
|
+
}
|
|
719
1280
|
}
|
|
720
|
-
if (ownsWriteLock) return;
|
|
721
|
-
await executeStatement(
|
|
722
|
-
target,
|
|
723
|
-
drizzleOrm.sql`
|
|
724
|
-
INSERT INTO ${schema.recordedClockTable} (graph_id, recorded_at)
|
|
725
|
-
VALUES (${graphId}, ${RECORDED_MIN})
|
|
726
|
-
ON CONFLICT (graph_id) DO UPDATE SET recorded_at = recorded_at
|
|
727
|
-
`
|
|
728
|
-
);
|
|
729
1281
|
}
|
|
730
1282
|
async function allocateRecordedCommit(target, schema, graphId, ownsWriteLock, previousRevision) {
|
|
731
1283
|
await lockRecordedClock(target, schema, graphId, ownsWriteLock);
|
|
732
1284
|
const previous = previousRevision ?? await readRecordedClock(target, schema, graphId);
|
|
733
1285
|
const recordedCommitTime = nextRecordedCommitTime(previous);
|
|
734
1286
|
if (!Number.isFinite(recordedCommitTime) || recordedCommitTime >= RECORDED_MAX_TIME) {
|
|
735
|
-
throw new
|
|
736
|
-
`Recorded commit clock reached the open sentinel ${RECORDED_MAX}`,
|
|
1287
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
1288
|
+
`Recorded commit clock reached the open sentinel ${chunkSVUKGWSN_cjs.RECORDED_MAX}`,
|
|
737
1289
|
{ graphId, recordedCommitTime },
|
|
738
1290
|
{
|
|
739
1291
|
suggestion: "Use a graph with a normal recorded-time clock; the open sentinel is reserved for relation intervals."
|
|
@@ -754,21 +1306,125 @@ async function advanceRevisionClock(target, schema, graphId, ownsWriteLock, prev
|
|
|
754
1306
|
);
|
|
755
1307
|
}
|
|
756
1308
|
|
|
1309
|
+
// src/backend/graph-backend-projection.ts
|
|
1310
|
+
var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
1311
|
+
"dialect",
|
|
1312
|
+
"capabilities",
|
|
1313
|
+
"tableNames",
|
|
1314
|
+
"fulltextStrategy",
|
|
1315
|
+
"vectorStrategy",
|
|
1316
|
+
"insertNode",
|
|
1317
|
+
"insertNodeNoReturn",
|
|
1318
|
+
"insertNodesBatch",
|
|
1319
|
+
"insertNodesBatchReturning",
|
|
1320
|
+
"updateNode",
|
|
1321
|
+
"deleteNode",
|
|
1322
|
+
"hardDeleteNode",
|
|
1323
|
+
"getNode",
|
|
1324
|
+
"getNodes",
|
|
1325
|
+
"insertEdge",
|
|
1326
|
+
"insertEdgeNoReturn",
|
|
1327
|
+
"insertEdgesBatch",
|
|
1328
|
+
"insertEdgesBatchReturning",
|
|
1329
|
+
"updateEdge",
|
|
1330
|
+
"deleteEdge",
|
|
1331
|
+
"hardDeleteEdge",
|
|
1332
|
+
"deleteEdgesBatch",
|
|
1333
|
+
"hardDeleteEdgesBatch",
|
|
1334
|
+
"getEdge",
|
|
1335
|
+
"getEdges",
|
|
1336
|
+
"countEdgesFrom",
|
|
1337
|
+
"edgeExistsBetween",
|
|
1338
|
+
"findEdgesConnectedTo",
|
|
1339
|
+
"findNodesByKind",
|
|
1340
|
+
"countNodesByKind",
|
|
1341
|
+
"findEdgesByKind",
|
|
1342
|
+
"countEdgesByKind",
|
|
1343
|
+
"insertUnique",
|
|
1344
|
+
"insertUniqueBatch",
|
|
1345
|
+
"deleteUnique",
|
|
1346
|
+
"checkUnique",
|
|
1347
|
+
"checkUniqueBatch",
|
|
1348
|
+
"getActiveSchema",
|
|
1349
|
+
"getSchemaVersion",
|
|
1350
|
+
"commitSchemaVersion",
|
|
1351
|
+
"setActiveVersion",
|
|
1352
|
+
"upsertEmbedding",
|
|
1353
|
+
"upsertEmbeddingBatch",
|
|
1354
|
+
"deleteEmbedding",
|
|
1355
|
+
"vectorSearch",
|
|
1356
|
+
"createVectorIndex",
|
|
1357
|
+
"dropVectorIndex",
|
|
1358
|
+
"hybridSearch",
|
|
1359
|
+
"upsertFulltext",
|
|
1360
|
+
"deleteFulltext",
|
|
1361
|
+
"upsertFulltextBatch",
|
|
1362
|
+
"deleteFulltextBatch",
|
|
1363
|
+
"fulltextSearch",
|
|
1364
|
+
"ensureIndexMaterializationsTable",
|
|
1365
|
+
"ensureRevisionOriginsTable",
|
|
1366
|
+
"getIndexMaterialization",
|
|
1367
|
+
"getIndexMaterializations",
|
|
1368
|
+
"recordIndexMaterialization",
|
|
1369
|
+
"claimIndexMaterialization",
|
|
1370
|
+
"releaseIndexMaterializationClaim",
|
|
1371
|
+
"ensureContributionMaterializationsTable",
|
|
1372
|
+
"getContributionMaterialization",
|
|
1373
|
+
"recordContributionMaterialization",
|
|
1374
|
+
"assertRuntimeContributionsInitialized",
|
|
1375
|
+
"ensureKindRemovalsTable",
|
|
1376
|
+
"getPendingKindRemovals",
|
|
1377
|
+
"getAllKindRemovals",
|
|
1378
|
+
"recordKindRemoval",
|
|
1379
|
+
"ensureReconciliationMarkersTable",
|
|
1380
|
+
"ensureRuntimeContributions",
|
|
1381
|
+
"ensureVectorSlotContribution",
|
|
1382
|
+
"ensureVectorSlotContributions",
|
|
1383
|
+
"assertVectorSlotInitialized",
|
|
1384
|
+
"assertVectorSlotsInitialized",
|
|
1385
|
+
"deleteVectorSlotContribution",
|
|
1386
|
+
"ensureFulltextTable",
|
|
1387
|
+
"getReconciliationMarker",
|
|
1388
|
+
"setReconciliationMarker",
|
|
1389
|
+
"clearGraph",
|
|
1390
|
+
"bootstrapTables",
|
|
1391
|
+
"refreshStatistics",
|
|
1392
|
+
"trustedImport",
|
|
1393
|
+
"execute",
|
|
1394
|
+
"executeStatement",
|
|
1395
|
+
"executeTemporaryStatement",
|
|
1396
|
+
"executeRaw",
|
|
1397
|
+
"compileSql",
|
|
1398
|
+
"executeDdl",
|
|
1399
|
+
"transaction",
|
|
1400
|
+
"close"
|
|
1401
|
+
];
|
|
1402
|
+
function projectBackendMembers(backend, keys) {
|
|
1403
|
+
const entries = keys.flatMap((key) => {
|
|
1404
|
+
if (!Reflect.has(backend, key)) return [];
|
|
1405
|
+
return [[key, Reflect.get(backend, key)]];
|
|
1406
|
+
});
|
|
1407
|
+
return Object.fromEntries(entries);
|
|
1408
|
+
}
|
|
1409
|
+
function createGraphBackendProjection(backend) {
|
|
1410
|
+
return projectBackendMembers(backend, GRAPH_BACKEND_PROJECTION_KEYS);
|
|
1411
|
+
}
|
|
1412
|
+
|
|
757
1413
|
// src/store/insert-dispatch.ts
|
|
758
1414
|
function nodeInsertDispatch(backend) {
|
|
759
1415
|
return {
|
|
760
1416
|
one: (params) => backend.insertNode(params),
|
|
761
|
-
oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => backend.insertNodeNoReturn(params),
|
|
762
|
-
batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => backend.insertNodesBatch(params),
|
|
763
|
-
batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => backend.insertNodesBatchReturning(params)
|
|
1417
|
+
oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodeNoReturn)(params),
|
|
1418
|
+
batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatch)(params),
|
|
1419
|
+
batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertNodesBatchReturning)(params)
|
|
764
1420
|
};
|
|
765
1421
|
}
|
|
766
1422
|
function edgeInsertDispatch(backend) {
|
|
767
1423
|
return {
|
|
768
1424
|
one: (params) => backend.insertEdge(params),
|
|
769
|
-
oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => backend.insertEdgeNoReturn(params),
|
|
770
|
-
batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => backend.insertEdgesBatch(params),
|
|
771
|
-
batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => backend.insertEdgesBatchReturning(params)
|
|
1425
|
+
oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgeNoReturn)(params),
|
|
1426
|
+
batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatch)(params),
|
|
1427
|
+
batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => chunk764JHTLT_cjs.requireDefined(backend.insertEdgesBatchReturning)(params)
|
|
772
1428
|
};
|
|
773
1429
|
}
|
|
774
1430
|
async function runInsertNoReturn(dispatch, params) {
|
|
@@ -799,6 +1455,680 @@ async function runInsertBatchReturning(dispatch, params) {
|
|
|
799
1455
|
return rows;
|
|
800
1456
|
}
|
|
801
1457
|
|
|
1458
|
+
// src/query/compiler/predicates.ts
|
|
1459
|
+
var COMPARISON_OP_SQL = {
|
|
1460
|
+
eq: "=",
|
|
1461
|
+
neq: "!=",
|
|
1462
|
+
gt: ">",
|
|
1463
|
+
gte: ">=",
|
|
1464
|
+
lt: "<",
|
|
1465
|
+
lte: "<="
|
|
1466
|
+
};
|
|
1467
|
+
function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
|
|
1468
|
+
if (cteColumnPrefix !== void 0) {
|
|
1469
|
+
const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
|
|
1470
|
+
if (field.path.length === 1 && field.path[0] === "id") {
|
|
1471
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}id`);
|
|
1472
|
+
}
|
|
1473
|
+
if (field.path.length === 1 && field.path[0] === "kind") {
|
|
1474
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}kind`);
|
|
1475
|
+
}
|
|
1476
|
+
if (field.path.length > 0 && field.path[0] === "props") {
|
|
1477
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}props`);
|
|
1478
|
+
}
|
|
1479
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
|
|
1480
|
+
}
|
|
1481
|
+
const prefix = field.alias;
|
|
1482
|
+
const qualifier = cteAlias ? `${cteAlias}.` : "";
|
|
1483
|
+
if (field.path.length === 1 && field.path[0] === "id") {
|
|
1484
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_id`);
|
|
1485
|
+
}
|
|
1486
|
+
if (field.path.length === 1 && field.path[0] === "kind") {
|
|
1487
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_kind`);
|
|
1488
|
+
}
|
|
1489
|
+
if (field.path.length > 0 && field.path[0] === "props") {
|
|
1490
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_props`);
|
|
1491
|
+
}
|
|
1492
|
+
return chunkX6RDQ5NB_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
|
|
1493
|
+
}
|
|
1494
|
+
function getFieldPointer(field) {
|
|
1495
|
+
if (field.jsonPointer !== void 0) {
|
|
1496
|
+
return field.jsonPointer;
|
|
1497
|
+
}
|
|
1498
|
+
if (field.path.length > 1 && field.path[0] === "props") {
|
|
1499
|
+
return chunkTDXIBCGY_cjs.jsonPointer(field.path.slice(1));
|
|
1500
|
+
}
|
|
1501
|
+
return void 0;
|
|
1502
|
+
}
|
|
1503
|
+
function isJsonField(field) {
|
|
1504
|
+
return field.path.length > 0 && field.path[0] === "props";
|
|
1505
|
+
}
|
|
1506
|
+
function normalizeValueType2(valueType) {
|
|
1507
|
+
if (!valueType || valueType === "unknown") {
|
|
1508
|
+
return void 0;
|
|
1509
|
+
}
|
|
1510
|
+
return valueType;
|
|
1511
|
+
}
|
|
1512
|
+
function compileFieldValue(field, dialect, valueType, cteAlias, pointerOverride, cteColumnPrefix) {
|
|
1513
|
+
const resolved = normalizeValueType2(valueType);
|
|
1514
|
+
const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
|
|
1515
|
+
if (!isJsonField(field)) {
|
|
1516
|
+
return column;
|
|
1517
|
+
}
|
|
1518
|
+
const pointer = pointerOverride ?? getFieldPointer(field);
|
|
1519
|
+
if (!pointer || pointer === "") {
|
|
1520
|
+
return column;
|
|
1521
|
+
}
|
|
1522
|
+
switch (resolved) {
|
|
1523
|
+
case "number": {
|
|
1524
|
+
return dialect.jsonExtractNumber(column, pointer);
|
|
1525
|
+
}
|
|
1526
|
+
case "boolean": {
|
|
1527
|
+
return dialect.jsonExtractBoolean(column, pointer);
|
|
1528
|
+
}
|
|
1529
|
+
case "date": {
|
|
1530
|
+
return dialect.jsonExtractDate(column, pointer);
|
|
1531
|
+
}
|
|
1532
|
+
case "array":
|
|
1533
|
+
case "object":
|
|
1534
|
+
case "embedding": {
|
|
1535
|
+
return dialect.jsonExtract(column, pointer);
|
|
1536
|
+
}
|
|
1537
|
+
case "string":
|
|
1538
|
+
case "unknown":
|
|
1539
|
+
case void 0: {
|
|
1540
|
+
return dialect.jsonExtractText(column, pointer);
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
function compileFieldTextValue(field, dialect, cteAlias, pointerOverride, cteColumnPrefix) {
|
|
1545
|
+
const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
|
|
1546
|
+
if (!isJsonField(field)) {
|
|
1547
|
+
return column;
|
|
1548
|
+
}
|
|
1549
|
+
const pointer = getFieldPointer(field);
|
|
1550
|
+
if (!pointer || pointer === "") {
|
|
1551
|
+
return column;
|
|
1552
|
+
}
|
|
1553
|
+
return dialect.jsonExtractText(column, pointer);
|
|
1554
|
+
}
|
|
1555
|
+
function compileFieldJsonValue(field, dialect, cteAlias, pointerOverride, cteColumnPrefix) {
|
|
1556
|
+
const column = compileFieldColumn(field, cteAlias, cteColumnPrefix);
|
|
1557
|
+
if (!isJsonField(field)) {
|
|
1558
|
+
return column;
|
|
1559
|
+
}
|
|
1560
|
+
const pointer = pointerOverride ?? getFieldPointer(field);
|
|
1561
|
+
if (!pointer || pointer === "") {
|
|
1562
|
+
return column;
|
|
1563
|
+
}
|
|
1564
|
+
return dialect.jsonExtract(column, pointer);
|
|
1565
|
+
}
|
|
1566
|
+
function resolveLiteralValueTypes(literals) {
|
|
1567
|
+
const resolved = /* @__PURE__ */ new Set();
|
|
1568
|
+
for (const literal2 of literals) {
|
|
1569
|
+
const valueType = normalizeValueType2(literal2.valueType);
|
|
1570
|
+
if (valueType) {
|
|
1571
|
+
resolved.add(valueType);
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
if (resolved.size > 1) {
|
|
1575
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1576
|
+
"Mixed literal value types are not supported in predicates",
|
|
1577
|
+
{ valueTypes: [...resolved] }
|
|
1578
|
+
);
|
|
1579
|
+
}
|
|
1580
|
+
return resolved.values().next().value;
|
|
1581
|
+
}
|
|
1582
|
+
function resolveComparisonValueType(field, right) {
|
|
1583
|
+
if (isParameterRef(right)) {
|
|
1584
|
+
return normalizeValueType2(right.valueType) ?? normalizeValueType2(field.valueType);
|
|
1585
|
+
}
|
|
1586
|
+
const literals = Array.isArray(right) ? right : [right];
|
|
1587
|
+
const literalType = resolveLiteralValueTypes(literals);
|
|
1588
|
+
const fieldType = normalizeValueType2(field.valueType);
|
|
1589
|
+
if (fieldType === "date" && literalType === "string") {
|
|
1590
|
+
return fieldType;
|
|
1591
|
+
}
|
|
1592
|
+
if (literalType) {
|
|
1593
|
+
return literalType;
|
|
1594
|
+
}
|
|
1595
|
+
return fieldType;
|
|
1596
|
+
}
|
|
1597
|
+
function resolvePredicateValueType(preferred, literal2) {
|
|
1598
|
+
const normalizedPreferred = normalizeValueType2(preferred);
|
|
1599
|
+
if (normalizedPreferred) {
|
|
1600
|
+
return normalizedPreferred;
|
|
1601
|
+
}
|
|
1602
|
+
return literal2 ? normalizeValueType2(literal2.valueType) : void 0;
|
|
1603
|
+
}
|
|
1604
|
+
function convertValueForSql(value, dialect) {
|
|
1605
|
+
return dialect.bindValue(value);
|
|
1606
|
+
}
|
|
1607
|
+
function compileStringPattern(op, pattern) {
|
|
1608
|
+
const escaped = pattern.replaceAll(
|
|
1609
|
+
chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER,
|
|
1610
|
+
`${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}`
|
|
1611
|
+
).replaceAll("%", `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}%`).replaceAll("_", `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}_`);
|
|
1612
|
+
switch (op) {
|
|
1613
|
+
case "contains": {
|
|
1614
|
+
return `%${escaped}%`;
|
|
1615
|
+
}
|
|
1616
|
+
case "startsWith": {
|
|
1617
|
+
return `${escaped}%`;
|
|
1618
|
+
}
|
|
1619
|
+
case "endsWith": {
|
|
1620
|
+
return `%${escaped}`;
|
|
1621
|
+
}
|
|
1622
|
+
case "like":
|
|
1623
|
+
case "ilike": {
|
|
1624
|
+
return pattern;
|
|
1625
|
+
}
|
|
1626
|
+
default: {
|
|
1627
|
+
return escaped;
|
|
1628
|
+
}
|
|
1629
|
+
}
|
|
1630
|
+
}
|
|
1631
|
+
function escapeLikePatternParameter(parameter) {
|
|
1632
|
+
const doubledEscape = `${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}`;
|
|
1633
|
+
return chunkX6RDQ5NB_cjs.sql`REPLACE(REPLACE(REPLACE(${parameter}, ${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}, ${doubledEscape}), '%', ${`${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}%`}), '_', ${`${chunkZ5QHVL5U_cjs.LIKE_ESCAPE_CHARACTER}_`})`;
|
|
1634
|
+
}
|
|
1635
|
+
function compileParameterizedStringPattern(op, parameter) {
|
|
1636
|
+
switch (op) {
|
|
1637
|
+
case "contains": {
|
|
1638
|
+
const escaped = escapeLikePatternParameter(parameter);
|
|
1639
|
+
return chunkX6RDQ5NB_cjs.sql`'%' || ${escaped} || '%'`;
|
|
1640
|
+
}
|
|
1641
|
+
case "startsWith": {
|
|
1642
|
+
const escaped = escapeLikePatternParameter(parameter);
|
|
1643
|
+
return chunkX6RDQ5NB_cjs.sql`${escaped} || '%'`;
|
|
1644
|
+
}
|
|
1645
|
+
case "endsWith": {
|
|
1646
|
+
const escaped = escapeLikePatternParameter(parameter);
|
|
1647
|
+
return chunkX6RDQ5NB_cjs.sql`'%' || ${escaped}`;
|
|
1648
|
+
}
|
|
1649
|
+
case "like":
|
|
1650
|
+
case "ilike": {
|
|
1651
|
+
return parameter;
|
|
1652
|
+
}
|
|
1653
|
+
default: {
|
|
1654
|
+
return escapeLikePatternParameter(parameter);
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
function compilePredicateExpression(expr, ctx) {
|
|
1659
|
+
const { dialect } = ctx;
|
|
1660
|
+
const cteColumnPrefix = ctx.cteColumnPrefix;
|
|
1661
|
+
switch (expr.__type) {
|
|
1662
|
+
case "comparison": {
|
|
1663
|
+
return compileComparisonPredicate(expr, dialect, cteColumnPrefix);
|
|
1664
|
+
}
|
|
1665
|
+
case "string_op": {
|
|
1666
|
+
const field = compileFieldTextValue(
|
|
1667
|
+
expr.field,
|
|
1668
|
+
dialect,
|
|
1669
|
+
void 0,
|
|
1670
|
+
void 0,
|
|
1671
|
+
cteColumnPrefix
|
|
1672
|
+
);
|
|
1673
|
+
if (isParameterRef(expr.pattern)) {
|
|
1674
|
+
const placeholder = chunkX6RDQ5NB_cjs.sql`${chunkX6RDQ5NB_cjs.sql.placeholder(expr.pattern.name)}`;
|
|
1675
|
+
const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
|
|
1676
|
+
if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
|
|
1677
|
+
return dialect.ilike(field, pattern2);
|
|
1678
|
+
}
|
|
1679
|
+
return chunkX6RDQ5NB_cjs.sql`${field} LIKE ${pattern2} ${chunkZ5QHVL5U_cjs.likeEscapeClause}`;
|
|
1680
|
+
}
|
|
1681
|
+
const pattern = compileStringPattern(expr.op, expr.pattern);
|
|
1682
|
+
if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
|
|
1683
|
+
return dialect.ilike(field, pattern);
|
|
1684
|
+
}
|
|
1685
|
+
return chunkX6RDQ5NB_cjs.sql`${field} LIKE ${pattern} ${chunkZ5QHVL5U_cjs.likeEscapeClause}`;
|
|
1686
|
+
}
|
|
1687
|
+
case "null_check": {
|
|
1688
|
+
const field = compileFieldTextValue(
|
|
1689
|
+
expr.field,
|
|
1690
|
+
dialect,
|
|
1691
|
+
void 0,
|
|
1692
|
+
void 0,
|
|
1693
|
+
cteColumnPrefix
|
|
1694
|
+
);
|
|
1695
|
+
return expr.op === "isNull" ? chunkX6RDQ5NB_cjs.sql`${field} IS NULL` : chunkX6RDQ5NB_cjs.sql`${field} IS NOT NULL`;
|
|
1696
|
+
}
|
|
1697
|
+
case "between": {
|
|
1698
|
+
const lowerIsParam = isParameterRef(expr.lower);
|
|
1699
|
+
const upperIsParam = isParameterRef(expr.upper);
|
|
1700
|
+
const boundsForType = [];
|
|
1701
|
+
if (!lowerIsParam) boundsForType.push(expr.lower);
|
|
1702
|
+
if (!upperIsParam) boundsForType.push(expr.upper);
|
|
1703
|
+
const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
|
|
1704
|
+
if (valueType === "array" || valueType === "object") {
|
|
1705
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1706
|
+
"Between comparisons are not supported for JSON arrays or objects"
|
|
1707
|
+
);
|
|
1708
|
+
}
|
|
1709
|
+
const field = compileFieldValue(
|
|
1710
|
+
expr.field,
|
|
1711
|
+
dialect,
|
|
1712
|
+
valueType,
|
|
1713
|
+
void 0,
|
|
1714
|
+
void 0,
|
|
1715
|
+
cteColumnPrefix
|
|
1716
|
+
);
|
|
1717
|
+
const lower = lowerIsParam ? chunkX6RDQ5NB_cjs.sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
|
|
1718
|
+
const upper = upperIsParam ? chunkX6RDQ5NB_cjs.sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
|
|
1719
|
+
return chunkX6RDQ5NB_cjs.sql`${field} BETWEEN ${lower} AND ${upper}`;
|
|
1720
|
+
}
|
|
1721
|
+
case "and": {
|
|
1722
|
+
const parts = expr.predicates.map(
|
|
1723
|
+
(p) => compilePredicateExpression(p, ctx)
|
|
1724
|
+
);
|
|
1725
|
+
return chunkX6RDQ5NB_cjs.sql`(${chunkX6RDQ5NB_cjs.sql.join(parts, chunkX6RDQ5NB_cjs.sql` AND `)})`;
|
|
1726
|
+
}
|
|
1727
|
+
case "or": {
|
|
1728
|
+
const parts = expr.predicates.map(
|
|
1729
|
+
(p) => compilePredicateExpression(p, ctx)
|
|
1730
|
+
);
|
|
1731
|
+
return chunkX6RDQ5NB_cjs.sql`(${chunkX6RDQ5NB_cjs.sql.join(parts, chunkX6RDQ5NB_cjs.sql` OR `)})`;
|
|
1732
|
+
}
|
|
1733
|
+
case "not": {
|
|
1734
|
+
const inner = compilePredicateExpression(expr.predicate, ctx);
|
|
1735
|
+
return chunkX6RDQ5NB_cjs.sql`NOT (${inner})`;
|
|
1736
|
+
}
|
|
1737
|
+
case "array_op": {
|
|
1738
|
+
return compileArrayPredicate(expr, dialect, cteColumnPrefix);
|
|
1739
|
+
}
|
|
1740
|
+
case "object_op": {
|
|
1741
|
+
return compileObjectPredicate(expr, dialect, cteColumnPrefix);
|
|
1742
|
+
}
|
|
1743
|
+
case "aggregate_comparison": {
|
|
1744
|
+
return compileAggregatePredicate(expr, dialect);
|
|
1745
|
+
}
|
|
1746
|
+
case "exists": {
|
|
1747
|
+
return compileExistsSubquery(expr, ctx);
|
|
1748
|
+
}
|
|
1749
|
+
case "in_subquery": {
|
|
1750
|
+
return compileInSubquery(expr, ctx);
|
|
1751
|
+
}
|
|
1752
|
+
case "vector_similarity":
|
|
1753
|
+
case "fulltext_match": {
|
|
1754
|
+
return STRUCTURAL_PREDICATE_NOOP;
|
|
1755
|
+
}
|
|
1756
|
+
}
|
|
1757
|
+
}
|
|
1758
|
+
var STRUCTURAL_PREDICATE_NOOP = chunkX6RDQ5NB_cjs.sql.raw("1=1");
|
|
1759
|
+
function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
1760
|
+
if (isParameterRef(expr.right)) {
|
|
1761
|
+
const parameterValueType = normalizeValueType2(expr.right.valueType) ?? normalizeValueType2(expr.left.valueType);
|
|
1762
|
+
const left2 = compileFieldValue(
|
|
1763
|
+
expr.left,
|
|
1764
|
+
dialect,
|
|
1765
|
+
parameterValueType,
|
|
1766
|
+
void 0,
|
|
1767
|
+
void 0,
|
|
1768
|
+
cteColumnPrefix
|
|
1769
|
+
);
|
|
1770
|
+
const opSql2 = COMPARISON_OP_SQL[expr.op];
|
|
1771
|
+
if (!opSql2) {
|
|
1772
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1773
|
+
`Comparison operation "${expr.op}" is not supported for parameterized predicates`
|
|
1774
|
+
);
|
|
1775
|
+
}
|
|
1776
|
+
return chunkX6RDQ5NB_cjs.sql`${left2} ${chunkX6RDQ5NB_cjs.sql.raw(opSql2)} ${chunkX6RDQ5NB_cjs.sql.placeholder(expr.right.name)}`;
|
|
1777
|
+
}
|
|
1778
|
+
const valueType = resolveComparisonValueType(expr.left, expr.right);
|
|
1779
|
+
if (valueType === "array" || valueType === "object") {
|
|
1780
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1781
|
+
`Comparison operation "${expr.op}" is not supported for ${valueType} values`
|
|
1782
|
+
);
|
|
1783
|
+
}
|
|
1784
|
+
const left = compileFieldValue(
|
|
1785
|
+
expr.left,
|
|
1786
|
+
dialect,
|
|
1787
|
+
valueType,
|
|
1788
|
+
void 0,
|
|
1789
|
+
void 0,
|
|
1790
|
+
cteColumnPrefix
|
|
1791
|
+
);
|
|
1792
|
+
if (expr.op === "in" || expr.op === "notIn") {
|
|
1793
|
+
const values = Array.isArray(expr.right) ? expr.right : [expr.right];
|
|
1794
|
+
if (values.length === 0) {
|
|
1795
|
+
return expr.op === "in" ? chunkX6RDQ5NB_cjs.sql.raw("1=0") : chunkX6RDQ5NB_cjs.sql.raw("1=1");
|
|
1796
|
+
}
|
|
1797
|
+
const convertedValues = values.map(
|
|
1798
|
+
(value) => convertValueForSql(value.value, dialect)
|
|
1799
|
+
);
|
|
1800
|
+
return dialect.inList(left, convertedValues, expr.op === "notIn");
|
|
1801
|
+
}
|
|
1802
|
+
const right = expr.right;
|
|
1803
|
+
const rightValue = Array.isArray(right) ? chunk764JHTLT_cjs.requireDefined(right[0]) : right;
|
|
1804
|
+
const convertedRight = convertValueForSql(rightValue.value, dialect);
|
|
1805
|
+
const opSql = COMPARISON_OP_SQL[expr.op];
|
|
1806
|
+
if (!opSql) {
|
|
1807
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1808
|
+
`Comparison operation "${expr.op}" is not supported`
|
|
1809
|
+
);
|
|
1810
|
+
}
|
|
1811
|
+
return chunkX6RDQ5NB_cjs.sql`${left} ${chunkX6RDQ5NB_cjs.sql.raw(opSql)} ${convertedRight}`;
|
|
1812
|
+
}
|
|
1813
|
+
function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
|
|
1814
|
+
const field = compileFieldJsonValue(
|
|
1815
|
+
expr.field,
|
|
1816
|
+
dialect,
|
|
1817
|
+
void 0,
|
|
1818
|
+
void 0,
|
|
1819
|
+
cteColumnPrefix
|
|
1820
|
+
);
|
|
1821
|
+
const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
|
|
1822
|
+
switch (expr.op) {
|
|
1823
|
+
case "isEmpty": {
|
|
1824
|
+
return chunkX6RDQ5NB_cjs.sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
|
|
1825
|
+
}
|
|
1826
|
+
case "isNotEmpty": {
|
|
1827
|
+
return chunkX6RDQ5NB_cjs.sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
|
|
1828
|
+
}
|
|
1829
|
+
case "lengthEq": {
|
|
1830
|
+
return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
|
|
1831
|
+
}
|
|
1832
|
+
case "lengthGt": {
|
|
1833
|
+
return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
|
|
1834
|
+
}
|
|
1835
|
+
case "lengthGte": {
|
|
1836
|
+
return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
|
|
1837
|
+
}
|
|
1838
|
+
case "lengthLt": {
|
|
1839
|
+
return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
|
|
1840
|
+
}
|
|
1841
|
+
case "lengthLte": {
|
|
1842
|
+
return chunkX6RDQ5NB_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
|
|
1843
|
+
}
|
|
1844
|
+
case "contains": {
|
|
1845
|
+
const value = values[0];
|
|
1846
|
+
if (value === void 0) {
|
|
1847
|
+
return chunkX6RDQ5NB_cjs.sql.raw("1=0");
|
|
1848
|
+
}
|
|
1849
|
+
return dialect.jsonArrayContains(field, value);
|
|
1850
|
+
}
|
|
1851
|
+
case "containsAll": {
|
|
1852
|
+
return dialect.jsonArrayContainsAll(field, values);
|
|
1853
|
+
}
|
|
1854
|
+
case "containsAny": {
|
|
1855
|
+
return dialect.jsonArrayContainsAny(field, values);
|
|
1856
|
+
}
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
1860
|
+
const basePointer = getFieldPointer(expr.field);
|
|
1861
|
+
const pointer = chunkTDXIBCGY_cjs.joinJsonPointers(basePointer, expr.pointer);
|
|
1862
|
+
const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
|
|
1863
|
+
switch (expr.op) {
|
|
1864
|
+
case "hasKey":
|
|
1865
|
+
case "hasPath": {
|
|
1866
|
+
return dialect.jsonHasPath(column, pointer);
|
|
1867
|
+
}
|
|
1868
|
+
case "pathEquals": {
|
|
1869
|
+
if (!expr.value) {
|
|
1870
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1871
|
+
"pathEquals requires a comparison value"
|
|
1872
|
+
);
|
|
1873
|
+
}
|
|
1874
|
+
const valueType = resolvePredicateValueType(expr.valueType, expr.value);
|
|
1875
|
+
if (valueType === "array" || valueType === "object") {
|
|
1876
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1877
|
+
"pathEquals is not supported for JSON arrays or objects"
|
|
1878
|
+
);
|
|
1879
|
+
}
|
|
1880
|
+
const left = compileFieldValue(
|
|
1881
|
+
expr.field,
|
|
1882
|
+
dialect,
|
|
1883
|
+
valueType,
|
|
1884
|
+
void 0,
|
|
1885
|
+
pointer,
|
|
1886
|
+
cteColumnPrefix
|
|
1887
|
+
);
|
|
1888
|
+
return chunkX6RDQ5NB_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
|
|
1889
|
+
}
|
|
1890
|
+
case "pathContains": {
|
|
1891
|
+
if (!expr.value) {
|
|
1892
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1893
|
+
"pathContains requires a comparison value"
|
|
1894
|
+
);
|
|
1895
|
+
}
|
|
1896
|
+
const arrayField2 = compileFieldJsonValue(
|
|
1897
|
+
expr.field,
|
|
1898
|
+
dialect,
|
|
1899
|
+
void 0,
|
|
1900
|
+
pointer,
|
|
1901
|
+
cteColumnPrefix
|
|
1902
|
+
);
|
|
1903
|
+
return dialect.jsonArrayContains(
|
|
1904
|
+
arrayField2,
|
|
1905
|
+
convertValueForSql(expr.value.value, dialect)
|
|
1906
|
+
);
|
|
1907
|
+
}
|
|
1908
|
+
case "pathIsNull": {
|
|
1909
|
+
return dialect.jsonPathIsNull(column, pointer);
|
|
1910
|
+
}
|
|
1911
|
+
case "pathIsNotNull": {
|
|
1912
|
+
return dialect.jsonPathIsNotNull(column, pointer);
|
|
1913
|
+
}
|
|
1914
|
+
}
|
|
1915
|
+
}
|
|
1916
|
+
function compileAggregatePredicate(expr, dialect) {
|
|
1917
|
+
const aggregate = compileAggregateExpr(expr.aggregate, dialect);
|
|
1918
|
+
const op = COMPARISON_OP_SQL[expr.op];
|
|
1919
|
+
if (!op) {
|
|
1920
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1921
|
+
`Comparison operation "${expr.op}" is not supported for aggregate predicates`
|
|
1922
|
+
);
|
|
1923
|
+
}
|
|
1924
|
+
const convertedValue = convertValueForSql(expr.value.value, dialect);
|
|
1925
|
+
return chunkX6RDQ5NB_cjs.sql`${aggregate} ${chunkX6RDQ5NB_cjs.sql.raw(op)} ${convertedValue}`;
|
|
1926
|
+
}
|
|
1927
|
+
function compileAggregateExpr(expr, dialect) {
|
|
1928
|
+
const cteAlias = `cte_${expr.field.alias}`;
|
|
1929
|
+
const field = compileFieldValue(
|
|
1930
|
+
expr.field,
|
|
1931
|
+
dialect,
|
|
1932
|
+
expr.field.valueType,
|
|
1933
|
+
cteAlias
|
|
1934
|
+
);
|
|
1935
|
+
switch (expr.function) {
|
|
1936
|
+
case "count": {
|
|
1937
|
+
return chunkX6RDQ5NB_cjs.sql`COUNT(${field})`;
|
|
1938
|
+
}
|
|
1939
|
+
case "countDistinct": {
|
|
1940
|
+
return chunkX6RDQ5NB_cjs.sql`COUNT(DISTINCT ${field})`;
|
|
1941
|
+
}
|
|
1942
|
+
case "sum": {
|
|
1943
|
+
return chunkX6RDQ5NB_cjs.sql`SUM(${field})`;
|
|
1944
|
+
}
|
|
1945
|
+
case "avg": {
|
|
1946
|
+
return chunkX6RDQ5NB_cjs.sql`AVG(${field})`;
|
|
1947
|
+
}
|
|
1948
|
+
case "min": {
|
|
1949
|
+
return chunkX6RDQ5NB_cjs.sql`MIN(${field})`;
|
|
1950
|
+
}
|
|
1951
|
+
case "max": {
|
|
1952
|
+
return chunkX6RDQ5NB_cjs.sql`MAX(${field})`;
|
|
1953
|
+
}
|
|
1954
|
+
default: {
|
|
1955
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1956
|
+
`Unknown aggregate function: ${expr.function}`
|
|
1957
|
+
);
|
|
1958
|
+
}
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
function compileExistsSubquery(expr, ctx) {
|
|
1962
|
+
if (expr.subquery.graphId === void 0) {
|
|
1963
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
|
|
1964
|
+
}
|
|
1965
|
+
const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
|
|
1966
|
+
return expr.negated ? chunkX6RDQ5NB_cjs.sql`NOT EXISTS (${subSql})` : chunkX6RDQ5NB_cjs.sql`EXISTS (${subSql})`;
|
|
1967
|
+
}
|
|
1968
|
+
function compileInSubquery(expr, ctx) {
|
|
1969
|
+
const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
|
|
1970
|
+
if (subqueryColumnCount !== 1) {
|
|
1971
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1972
|
+
`IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
|
|
1973
|
+
{ subqueryColumnCount }
|
|
1974
|
+
);
|
|
1975
|
+
}
|
|
1976
|
+
const fieldValueType = normalizeValueType2(expr.field.valueType);
|
|
1977
|
+
const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
|
|
1978
|
+
const resolvedValueType = fieldValueType ?? subqueryValueType;
|
|
1979
|
+
if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
|
|
1980
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1981
|
+
`IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
|
|
1982
|
+
{ valueType: resolvedValueType }
|
|
1983
|
+
);
|
|
1984
|
+
}
|
|
1985
|
+
if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
|
|
1986
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1987
|
+
`IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
|
|
1988
|
+
{
|
|
1989
|
+
fieldValueType,
|
|
1990
|
+
subqueryValueType
|
|
1991
|
+
}
|
|
1992
|
+
);
|
|
1993
|
+
}
|
|
1994
|
+
const valueType = fieldValueType ?? subqueryValueType;
|
|
1995
|
+
if (expr.subquery.graphId === void 0) {
|
|
1996
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(
|
|
1997
|
+
"IN/NOT IN subquery must have a graphId"
|
|
1998
|
+
);
|
|
1999
|
+
}
|
|
2000
|
+
const fieldSql = compileFieldValue(
|
|
2001
|
+
expr.field,
|
|
2002
|
+
ctx.dialect,
|
|
2003
|
+
valueType,
|
|
2004
|
+
void 0,
|
|
2005
|
+
void 0,
|
|
2006
|
+
ctx.cteColumnPrefix
|
|
2007
|
+
);
|
|
2008
|
+
const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
|
|
2009
|
+
return expr.negated ? chunkX6RDQ5NB_cjs.sql`${fieldSql} NOT IN (${subSql})` : chunkX6RDQ5NB_cjs.sql`${fieldSql} IN (${subSql})`;
|
|
2010
|
+
}
|
|
2011
|
+
function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
|
|
2012
|
+
const results = [];
|
|
2013
|
+
function visit(expr, inDisallowedBranch) {
|
|
2014
|
+
if (isMatch(expr)) {
|
|
2015
|
+
if (inDisallowedBranch) {
|
|
2016
|
+
throw new chunkSAFZ6JTI_cjs.UnsupportedPredicateError(rejectionMessage);
|
|
2017
|
+
}
|
|
2018
|
+
results.push(expr);
|
|
2019
|
+
return;
|
|
2020
|
+
}
|
|
2021
|
+
switch (expr.__type) {
|
|
2022
|
+
case "and": {
|
|
2023
|
+
for (const child of expr.predicates) visit(child, inDisallowedBranch);
|
|
2024
|
+
return;
|
|
2025
|
+
}
|
|
2026
|
+
case "or": {
|
|
2027
|
+
for (const child of expr.predicates) visit(child, true);
|
|
2028
|
+
return;
|
|
2029
|
+
}
|
|
2030
|
+
case "not": {
|
|
2031
|
+
visit(expr.predicate, true);
|
|
2032
|
+
return;
|
|
2033
|
+
}
|
|
2034
|
+
case "comparison":
|
|
2035
|
+
case "string_op":
|
|
2036
|
+
case "null_check":
|
|
2037
|
+
case "between":
|
|
2038
|
+
case "array_op":
|
|
2039
|
+
case "object_op":
|
|
2040
|
+
case "aggregate_comparison":
|
|
2041
|
+
case "exists":
|
|
2042
|
+
case "in_subquery":
|
|
2043
|
+
case "vector_similarity":
|
|
2044
|
+
case "fulltext_match": {
|
|
2045
|
+
return;
|
|
2046
|
+
}
|
|
2047
|
+
}
|
|
2048
|
+
}
|
|
2049
|
+
for (const pred of predicates) visit(pred.expression, false);
|
|
2050
|
+
return results;
|
|
2051
|
+
}
|
|
2052
|
+
function extractVectorSimilarityPredicates(predicates) {
|
|
2053
|
+
return extractStructuralPredicates(
|
|
2054
|
+
predicates,
|
|
2055
|
+
(expr) => expr.__type === "vector_similarity",
|
|
2056
|
+
"Vector similarity predicates cannot be nested under OR or NOT. Use top-level AND combinations instead."
|
|
2057
|
+
);
|
|
2058
|
+
}
|
|
2059
|
+
function extractFulltextMatchPredicates(predicates) {
|
|
2060
|
+
return extractStructuralPredicates(
|
|
2061
|
+
predicates,
|
|
2062
|
+
(expr) => expr.__type === "fulltext_match",
|
|
2063
|
+
"Fulltext match predicates cannot be nested under OR or NOT. Use top-level AND combinations instead."
|
|
2064
|
+
);
|
|
2065
|
+
}
|
|
2066
|
+
|
|
2067
|
+
// src/query/compiler/predicate-utils.ts
|
|
2068
|
+
var EMPTY_PREDICATES = [];
|
|
2069
|
+
function sqlValueList(values) {
|
|
2070
|
+
return chunkX6RDQ5NB_cjs.sql.join(
|
|
2071
|
+
values.map((value) => chunkX6RDQ5NB_cjs.sql`${value}`),
|
|
2072
|
+
chunkX6RDQ5NB_cjs.sql`, `
|
|
2073
|
+
);
|
|
2074
|
+
}
|
|
2075
|
+
function buildPredicateIndexKey(alias, targetType) {
|
|
2076
|
+
return `${alias}\0${targetType}`;
|
|
2077
|
+
}
|
|
2078
|
+
function resolvePredicateTargetType(predicate2) {
|
|
2079
|
+
return predicate2.targetType === "edge" ? "edge" : "node";
|
|
2080
|
+
}
|
|
2081
|
+
function buildPredicateIndex(ast) {
|
|
2082
|
+
const byAliasAndType = /* @__PURE__ */ new Map();
|
|
2083
|
+
for (const predicate2 of ast.predicates) {
|
|
2084
|
+
const key = buildPredicateIndexKey(
|
|
2085
|
+
predicate2.targetAlias,
|
|
2086
|
+
resolvePredicateTargetType(predicate2)
|
|
2087
|
+
);
|
|
2088
|
+
const existing = byAliasAndType.get(key);
|
|
2089
|
+
if (existing === void 0) {
|
|
2090
|
+
byAliasAndType.set(key, [predicate2]);
|
|
2091
|
+
} else {
|
|
2092
|
+
existing.push(predicate2);
|
|
2093
|
+
}
|
|
2094
|
+
}
|
|
2095
|
+
return { byAliasAndType };
|
|
2096
|
+
}
|
|
2097
|
+
function getPredicatesForAlias(predicateIndex, alias, targetType) {
|
|
2098
|
+
return predicateIndex.byAliasAndType.get(
|
|
2099
|
+
buildPredicateIndexKey(alias, targetType)
|
|
2100
|
+
) ?? EMPTY_PREDICATES;
|
|
2101
|
+
}
|
|
2102
|
+
function compilePredicateClauses(predicates, predicateContext) {
|
|
2103
|
+
return predicates.map(
|
|
2104
|
+
(predicate2) => compilePredicateExpression(predicate2.expression, predicateContext)
|
|
2105
|
+
);
|
|
2106
|
+
}
|
|
2107
|
+
function compileKindFilter(column, kinds) {
|
|
2108
|
+
if (kinds.length === 0) {
|
|
2109
|
+
return chunkX6RDQ5NB_cjs.sql`1 = 0`;
|
|
2110
|
+
}
|
|
2111
|
+
if (kinds.length === 1) {
|
|
2112
|
+
return chunkX6RDQ5NB_cjs.sql`${column} = ${kinds[0]}`;
|
|
2113
|
+
}
|
|
2114
|
+
return chunkX6RDQ5NB_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
|
|
2115
|
+
}
|
|
2116
|
+
function getNodeKindsForAlias(ast, alias) {
|
|
2117
|
+
if (alias === ast.start.alias) {
|
|
2118
|
+
return ast.start.kinds;
|
|
2119
|
+
}
|
|
2120
|
+
for (const traversal of ast.traversals) {
|
|
2121
|
+
if (traversal.nodeAlias === alias) {
|
|
2122
|
+
return traversal.nodeKinds;
|
|
2123
|
+
}
|
|
2124
|
+
}
|
|
2125
|
+
throw new chunkSAFZ6JTI_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
|
|
2126
|
+
}
|
|
2127
|
+
function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
|
|
2128
|
+
if (!vectorPredicate || !fulltextPredicate) return void 0;
|
|
2129
|
+
return vectorPredicate.field.alias === fulltextPredicate.field.alias ? vectorPredicate.field.alias : void 0;
|
|
2130
|
+
}
|
|
2131
|
+
|
|
802
2132
|
// src/store/row-fetch.ts
|
|
803
2133
|
async function getRowsByIds(ids, policy) {
|
|
804
2134
|
const rowsById = /* @__PURE__ */ new Map();
|
|
@@ -821,7 +2151,7 @@ async function getRowsByIds(ids, policy) {
|
|
|
821
2151
|
// src/store/edge-fetch.ts
|
|
822
2152
|
async function getEdgeRowsByIds(backend, graphId, ids) {
|
|
823
2153
|
return getRowsByIds(ids, {
|
|
824
|
-
batch: backend.getEdges === void 0 ? void 0 : (batchIds) => backend.getEdges(graphId, batchIds),
|
|
2154
|
+
batch: backend.getEdges === void 0 ? void 0 : (batchIds) => chunk764JHTLT_cjs.requireDefined(backend.getEdges)(graphId, batchIds),
|
|
825
2155
|
one: (id) => backend.getEdge(graphId, id)
|
|
826
2156
|
});
|
|
827
2157
|
}
|
|
@@ -829,10 +2159,12 @@ async function getEdgeRowsByIds(backend, graphId, ids) {
|
|
|
829
2159
|
// src/store/node-fetch.ts
|
|
830
2160
|
async function getNodeRowsByIds(backend, graphId, kind, ids) {
|
|
831
2161
|
return getRowsByIds(ids, {
|
|
832
|
-
batch: backend.getNodes === void 0 ? void 0 : (batchIds) => backend.getNodes(graphId, kind, batchIds),
|
|
2162
|
+
batch: backend.getNodes === void 0 ? void 0 : (batchIds) => chunk764JHTLT_cjs.requireDefined(backend.getNodes)(graphId, kind, batchIds),
|
|
833
2163
|
one: (id) => backend.getNode(graphId, kind, id)
|
|
834
2164
|
});
|
|
835
2165
|
}
|
|
2166
|
+
|
|
2167
|
+
// src/store/recorded-capture/relations.ts
|
|
836
2168
|
var RECORDED_HISTORY_META = "{}";
|
|
837
2169
|
var RECORDED_NODE_COLUMNS = [
|
|
838
2170
|
"history_id",
|
|
@@ -875,13 +2207,13 @@ var RECORDED_EDGE_COLUMNS = [
|
|
|
875
2207
|
"tx_id",
|
|
876
2208
|
"meta"
|
|
877
2209
|
];
|
|
878
|
-
var RECORDED_NODE_COLUMN_LIST =
|
|
879
|
-
var RECORDED_EDGE_COLUMN_LIST =
|
|
2210
|
+
var RECORDED_NODE_COLUMN_LIST = chunkX6RDQ5NB_cjs.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
|
|
2211
|
+
var RECORDED_EDGE_COLUMN_LIST = chunkX6RDQ5NB_cjs.sql.raw(RECORDED_EDGE_COLUMNS.join(", "));
|
|
880
2212
|
var RECORDED_BIND_PARAM_BUDGET = 900;
|
|
881
2213
|
function recordedBindParamBudget(target) {
|
|
882
2214
|
const budget = target.capabilities.maxBindParameters ?? RECORDED_BIND_PARAM_BUDGET;
|
|
883
2215
|
if (!Number.isSafeInteger(budget) || budget < 1) {
|
|
884
|
-
throw new
|
|
2216
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
885
2217
|
`backend capabilities.maxBindParameters must be a positive integer, got: ${String(budget)}`,
|
|
886
2218
|
{
|
|
887
2219
|
code: "INVALID_BACKEND_CAPABILITY",
|
|
@@ -896,42 +2228,45 @@ function recordedChunkSize(target, columnCount) {
|
|
|
896
2228
|
const budget = recordedBindParamBudget(target);
|
|
897
2229
|
return Math.max(1, Math.floor(budget / columnCount));
|
|
898
2230
|
}
|
|
2231
|
+
function sqlNull(value) {
|
|
2232
|
+
return value === void 0 ? chunkX6RDQ5NB_cjs.sql.raw("NULL") : chunkX6RDQ5NB_cjs.sql`${value}`;
|
|
2233
|
+
}
|
|
899
2234
|
function recordedCommonCells() {
|
|
900
2235
|
return {
|
|
901
|
-
history_id: () =>
|
|
902
|
-
graph_id: (row) =>
|
|
903
|
-
id: (row) =>
|
|
904
|
-
kind: (row) =>
|
|
905
|
-
props: (row) =>
|
|
906
|
-
valid_from: (row) =>
|
|
907
|
-
valid_to: (row) =>
|
|
908
|
-
created_at: (row) =>
|
|
909
|
-
updated_at: (row) =>
|
|
910
|
-
deleted_at: (row) =>
|
|
911
|
-
recorded_from: (_row, recordedCommit) =>
|
|
912
|
-
recorded_to: () =>
|
|
913
|
-
op: (_row, _recordedCommit, operation) =>
|
|
914
|
-
schema_version: () =>
|
|
915
|
-
tx_id: () =>
|
|
916
|
-
meta: () =>
|
|
2236
|
+
history_id: () => chunkX6RDQ5NB_cjs.sql`${generateId()}`,
|
|
2237
|
+
graph_id: (row) => chunkX6RDQ5NB_cjs.sql`${row.graph_id}`,
|
|
2238
|
+
id: (row) => chunkX6RDQ5NB_cjs.sql`${row.id}`,
|
|
2239
|
+
kind: (row) => chunkX6RDQ5NB_cjs.sql`${row.kind}`,
|
|
2240
|
+
props: (row) => chunkX6RDQ5NB_cjs.sql`${chunkGNPGGLAE_cjs.rowPropsToJsonText(row.props)}`,
|
|
2241
|
+
valid_from: (row) => chunkX6RDQ5NB_cjs.sql`${sqlNull(row.valid_from)}`,
|
|
2242
|
+
valid_to: (row) => chunkX6RDQ5NB_cjs.sql`${sqlNull(row.valid_to)}`,
|
|
2243
|
+
created_at: (row) => chunkX6RDQ5NB_cjs.sql`${row.created_at}`,
|
|
2244
|
+
updated_at: (row) => chunkX6RDQ5NB_cjs.sql`${row.updated_at}`,
|
|
2245
|
+
deleted_at: (row) => chunkX6RDQ5NB_cjs.sql`${sqlNull(row.deleted_at)}`,
|
|
2246
|
+
recorded_from: (_row, recordedCommit) => chunkX6RDQ5NB_cjs.sql`${recordedCommit}`,
|
|
2247
|
+
recorded_to: () => chunkX6RDQ5NB_cjs.sql`${chunkSVUKGWSN_cjs.RECORDED_MAX}`,
|
|
2248
|
+
op: (_row, _recordedCommit, operation) => chunkX6RDQ5NB_cjs.sql`${operation}`,
|
|
2249
|
+
schema_version: () => chunkX6RDQ5NB_cjs.sql`NULL`,
|
|
2250
|
+
tx_id: () => chunkX6RDQ5NB_cjs.sql`NULL`,
|
|
2251
|
+
meta: () => chunkX6RDQ5NB_cjs.sql`${RECORDED_HISTORY_META}`
|
|
917
2252
|
};
|
|
918
2253
|
}
|
|
919
2254
|
var recordedNodeCells = {
|
|
920
2255
|
...recordedCommonCells(),
|
|
921
|
-
version: (row) =>
|
|
2256
|
+
version: (row) => chunkX6RDQ5NB_cjs.sql`${row.version}`
|
|
922
2257
|
};
|
|
923
2258
|
var recordedEdgeCells = {
|
|
924
2259
|
...recordedCommonCells(),
|
|
925
|
-
from_kind: (row) =>
|
|
926
|
-
from_id: (row) =>
|
|
927
|
-
to_kind: (row) =>
|
|
928
|
-
to_id: (row) =>
|
|
2260
|
+
from_kind: (row) => chunkX6RDQ5NB_cjs.sql`${row.from_kind}`,
|
|
2261
|
+
from_id: (row) => chunkX6RDQ5NB_cjs.sql`${row.from_id}`,
|
|
2262
|
+
to_kind: (row) => chunkX6RDQ5NB_cjs.sql`${row.to_kind}`,
|
|
2263
|
+
to_id: (row) => chunkX6RDQ5NB_cjs.sql`${row.to_id}`
|
|
929
2264
|
};
|
|
930
2265
|
function recordedValuesTuple(columns, cells, row, recordedCommit, operation) {
|
|
931
2266
|
const tuple = columns.map(
|
|
932
2267
|
(column) => cells[column](row, recordedCommit, operation)
|
|
933
2268
|
);
|
|
934
|
-
return
|
|
2269
|
+
return chunkX6RDQ5NB_cjs.sql`(${chunkX6RDQ5NB_cjs.sql.join(tuple, chunkX6RDQ5NB_cjs.sql`, `)})`;
|
|
935
2270
|
}
|
|
936
2271
|
async function insertRecordedRows(target, table, columnList, columns, cells, inserts, recordedCommit) {
|
|
937
2272
|
if (inserts.length === 0) return;
|
|
@@ -946,9 +2281,9 @@ async function insertRecordedRows(target, table, columnList, columns, cells, ins
|
|
|
946
2281
|
);
|
|
947
2282
|
await executeStatement(
|
|
948
2283
|
target,
|
|
949
|
-
|
|
2284
|
+
chunkX6RDQ5NB_cjs.sql`
|
|
950
2285
|
INSERT INTO ${table} (${columnList})
|
|
951
|
-
VALUES ${
|
|
2286
|
+
VALUES ${chunkX6RDQ5NB_cjs.sql.join(values, chunkX6RDQ5NB_cjs.sql`, `)}
|
|
952
2287
|
`
|
|
953
2288
|
);
|
|
954
2289
|
}
|
|
@@ -993,22 +2328,22 @@ function entityKey(entity) {
|
|
|
993
2328
|
}
|
|
994
2329
|
}
|
|
995
2330
|
async function closeOpenReturning(target, table, graphId, ids, recordedCommit, kind) {
|
|
996
|
-
const kindFilter = kind === void 0 ?
|
|
2331
|
+
const kindFilter = kind === void 0 ? chunkX6RDQ5NB_cjs.sql`` : chunkX6RDQ5NB_cjs.sql`AND kind = ${kind}`;
|
|
997
2332
|
const rows = await target.execute(
|
|
998
|
-
|
|
2333
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
|
|
999
2334
|
UPDATE ${table}
|
|
1000
2335
|
SET recorded_to = ${recordedCommit}
|
|
1001
2336
|
WHERE graph_id = ${graphId}
|
|
1002
2337
|
${kindFilter}
|
|
1003
|
-
AND recorded_to = ${RECORDED_MAX}
|
|
1004
|
-
AND id IN (${
|
|
2338
|
+
AND recorded_to = ${chunkSVUKGWSN_cjs.RECORDED_MAX}
|
|
2339
|
+
AND id IN (${sqlValueList(ids)})
|
|
1005
2340
|
RETURNING id, deleted_at
|
|
1006
2341
|
`)
|
|
1007
2342
|
);
|
|
1008
|
-
return new Map(rows.map((row) => [row.id,
|
|
2343
|
+
return new Map(rows.map((row) => [row.id, chunk764JHTLT_cjs.isPresent(row.deleted_at)]));
|
|
1009
2344
|
}
|
|
1010
2345
|
function recordedOp(hadOpenRow, priorRowWasTombstone, after) {
|
|
1011
|
-
if (
|
|
2346
|
+
if (chunk764JHTLT_cjs.isPresent(after.deleted_at)) return "delete";
|
|
1012
2347
|
if (!hadOpenRow || priorRowWasTombstone) return "create";
|
|
1013
2348
|
return "update";
|
|
1014
2349
|
}
|
|
@@ -1045,7 +2380,7 @@ function recordedInsertsFor(afterById, closed) {
|
|
|
1045
2380
|
async function flushNodes(target, schema, graphId, entities, recordedCommit) {
|
|
1046
2381
|
const chunkSize = recordedNodeChunkSize(target);
|
|
1047
2382
|
for (const [kind, group] of groupNodesByKind(entities)) {
|
|
1048
|
-
for (const entityChunk of
|
|
2383
|
+
for (const entityChunk of chunkZDH3DX3C_cjs.chunk(group, chunkSize)) {
|
|
1049
2384
|
const ids = entityChunk.map((entity) => entity.id);
|
|
1050
2385
|
const closed = await closeOpenReturning(
|
|
1051
2386
|
target,
|
|
@@ -1070,7 +2405,7 @@ async function flushNodes(target, schema, graphId, entities, recordedCommit) {
|
|
|
1070
2405
|
}
|
|
1071
2406
|
async function flushEdges(target, schema, graphId, entities, recordedCommit) {
|
|
1072
2407
|
const chunkSize = recordedEdgeChunkSize(target);
|
|
1073
|
-
for (const entityChunk of
|
|
2408
|
+
for (const entityChunk of chunkZDH3DX3C_cjs.chunk(entities, chunkSize)) {
|
|
1074
2409
|
const ids = entityChunk.map((entity) => entity.id);
|
|
1075
2410
|
const closed = await closeOpenReturning(
|
|
1076
2411
|
target,
|
|
@@ -1094,24 +2429,24 @@ async function flushEdges(target, schema, graphId, entities, recordedCommit) {
|
|
|
1094
2429
|
async function closeOpenByKind(target, table, graphId, kind, recordedCommit) {
|
|
1095
2430
|
await executeStatement(
|
|
1096
2431
|
target,
|
|
1097
|
-
|
|
2432
|
+
chunkX6RDQ5NB_cjs.sql`
|
|
1098
2433
|
UPDATE ${table}
|
|
1099
2434
|
SET recorded_to = ${recordedCommit}
|
|
1100
2435
|
WHERE graph_id = ${graphId}
|
|
1101
2436
|
AND kind = ${kind}
|
|
1102
|
-
AND recorded_to = ${RECORDED_MAX}
|
|
2437
|
+
AND recorded_to = ${chunkSVUKGWSN_cjs.RECORDED_MAX}
|
|
1103
2438
|
`
|
|
1104
2439
|
);
|
|
1105
2440
|
}
|
|
1106
2441
|
async function closeOpenEdgesByNodeKind(target, schema, graphId, nodeKind, recordedCommit) {
|
|
1107
2442
|
await executeStatement(
|
|
1108
2443
|
target,
|
|
1109
|
-
|
|
2444
|
+
chunkX6RDQ5NB_cjs.sql`
|
|
1110
2445
|
UPDATE ${schema.recordedEdgesTable}
|
|
1111
2446
|
SET recorded_to = ${recordedCommit}
|
|
1112
2447
|
WHERE graph_id = ${graphId}
|
|
1113
2448
|
AND (from_kind = ${nodeKind} OR to_kind = ${nodeKind})
|
|
1114
|
-
AND recorded_to = ${RECORDED_MAX}
|
|
2449
|
+
AND recorded_to = ${chunkSVUKGWSN_cjs.RECORDED_MAX}
|
|
1115
2450
|
`
|
|
1116
2451
|
);
|
|
1117
2452
|
}
|
|
@@ -1149,7 +2484,7 @@ async function closeRecordedHardDeletedKind(target, schema, graphId, removal, ow
|
|
|
1149
2484
|
}
|
|
1150
2485
|
async function queryConnectedEdgeIds(target, schema, params) {
|
|
1151
2486
|
const rows = await target.execute(
|
|
1152
|
-
|
|
2487
|
+
chunkX6RDQ5NB_cjs.asCompiledRowsSql(chunkX6RDQ5NB_cjs.sql`
|
|
1153
2488
|
SELECT id
|
|
1154
2489
|
FROM ${schema.edgesTable}
|
|
1155
2490
|
WHERE graph_id = ${params.graphId}
|
|
@@ -1197,7 +2532,7 @@ function edgeRowIdentityKey(row) {
|
|
|
1197
2532
|
return edgeIdentityKey(row.graph_id, row.id);
|
|
1198
2533
|
}
|
|
1199
2534
|
function recordedCaptureSealedError(details) {
|
|
1200
|
-
return new
|
|
2535
|
+
return new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
1201
2536
|
"Recorded-time capture session is sealed: a graph write happened after the transaction's capture was flushed.",
|
|
1202
2537
|
details,
|
|
1203
2538
|
{
|
|
@@ -1230,7 +2565,7 @@ function createRecordedCaptureSession() {
|
|
|
1230
2565
|
},
|
|
1231
2566
|
async flush(target, schema, ownsWriteLock) {
|
|
1232
2567
|
if (sealed) {
|
|
1233
|
-
throw new
|
|
2568
|
+
throw new chunkSAFZ6JTI_cjs.ConfigurationError(
|
|
1234
2569
|
"Recorded-time capture session was already flushed.",
|
|
1235
2570
|
{},
|
|
1236
2571
|
{
|
|
@@ -1241,7 +2576,7 @@ function createRecordedCaptureSession() {
|
|
|
1241
2576
|
sealed = true;
|
|
1242
2577
|
if (touched.size === 0) return /* @__PURE__ */ new Map();
|
|
1243
2578
|
const recordedByGraph = /* @__PURE__ */ new Map();
|
|
1244
|
-
const byGraph =
|
|
2579
|
+
const byGraph = chunkZDH3DX3C_cjs.groupBy(touched.values(), (entity) => entity.graphId);
|
|
1245
2580
|
for (const [graphId, entities] of byGraph) {
|
|
1246
2581
|
const recordedCommit = await allocateRecordedCommit(
|
|
1247
2582
|
target,
|
|
@@ -1279,7 +2614,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
1279
2614
|
await lockRecordedGraphWrite(target, graphId, graphLocks);
|
|
1280
2615
|
}
|
|
1281
2616
|
}
|
|
1282
|
-
const overlay =
|
|
2617
|
+
const overlay = chunkGNPGGLAE_cjs.createBackendOverlay(target, {
|
|
1283
2618
|
...rawWriteGuards(target, "tx.backend"),
|
|
1284
2619
|
async insertNode(params) {
|
|
1285
2620
|
session.assertOpen();
|
|
@@ -1418,7 +2753,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
1418
2753
|
async deleteEdgesBatch(params) {
|
|
1419
2754
|
session.assertOpen();
|
|
1420
2755
|
await lockGraph(params.graphId);
|
|
1421
|
-
await target.deleteEdgesBatch(params);
|
|
2756
|
+
await chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params);
|
|
1422
2757
|
for (const id of params.ids) {
|
|
1423
2758
|
session.touchEdge(params.graphId, id);
|
|
1424
2759
|
}
|
|
@@ -1428,7 +2763,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
1428
2763
|
async hardDeleteEdgesBatch(params) {
|
|
1429
2764
|
session.assertOpen();
|
|
1430
2765
|
await lockGraph(params.graphId);
|
|
1431
|
-
await target.hardDeleteEdgesBatch(params);
|
|
2766
|
+
await chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
|
|
1432
2767
|
for (const id of params.ids) {
|
|
1433
2768
|
session.touchEdge(params.graphId, id);
|
|
1434
2769
|
}
|
|
@@ -1445,7 +2780,7 @@ function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
|
|
|
1445
2780
|
return {
|
|
1446
2781
|
backend: createRecordedTransactionBackend(target, session, resolvedSchema),
|
|
1447
2782
|
async flush() {
|
|
1448
|
-
return
|
|
2783
|
+
return chunkO5H62ZWJ_cjs.withRecordedRelationsPrecondition(
|
|
1449
2784
|
session.flush(target, resolvedSchema, ownsWriteLock),
|
|
1450
2785
|
{ dialect: target.dialect, surface: "capture-flush" }
|
|
1451
2786
|
);
|
|
@@ -1465,7 +2800,8 @@ async function runCapturedAutocommit(backend, schema, fn, options) {
|
|
|
1465
2800
|
function createRecordedBackend(backend, schema) {
|
|
1466
2801
|
assertCapturableBackend(backend);
|
|
1467
2802
|
const capture = (fn) => runCapturedAutocommit(backend, schema, fn);
|
|
1468
|
-
|
|
2803
|
+
const projectedBackend = createGraphBackendProjection(backend);
|
|
2804
|
+
return chunkGNPGGLAE_cjs.createBackendOverlay(projectedBackend, {
|
|
1469
2805
|
...rawWriteGuards(backend, "backend"),
|
|
1470
2806
|
async insertNode(params) {
|
|
1471
2807
|
return capture((target) => target.insertNode(params));
|
|
@@ -1535,12 +2871,16 @@ function createRecordedBackend(backend, schema) {
|
|
|
1535
2871
|
},
|
|
1536
2872
|
...backend.deleteEdgesBatch === void 0 ? {} : {
|
|
1537
2873
|
async deleteEdgesBatch(params) {
|
|
1538
|
-
await capture(
|
|
2874
|
+
await capture(
|
|
2875
|
+
(target) => chunk764JHTLT_cjs.requireDefined(target.deleteEdgesBatch)(params)
|
|
2876
|
+
);
|
|
1539
2877
|
}
|
|
1540
2878
|
},
|
|
1541
2879
|
...backend.hardDeleteEdgesBatch === void 0 ? {} : {
|
|
1542
2880
|
async hardDeleteEdgesBatch(params) {
|
|
1543
|
-
await capture(
|
|
2881
|
+
await capture(
|
|
2882
|
+
(target) => chunk764JHTLT_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
|
|
2883
|
+
);
|
|
1544
2884
|
}
|
|
1545
2885
|
},
|
|
1546
2886
|
async transaction(fn, options) {
|
|
@@ -1551,18 +2891,11 @@ function createRecordedBackend(backend, schema) {
|
|
|
1551
2891
|
await assertRecordedCaptureTransactionIsolation(target, backendOptions);
|
|
1552
2892
|
const readOnly = backendOptions?.accessMode === "read_only";
|
|
1553
2893
|
const scope = createRecordedTransactionScope(target, schema, !readOnly);
|
|
1554
|
-
const result = await fn(scope.backend
|
|
2894
|
+
const result = await fn(scope.backend);
|
|
1555
2895
|
const instants = await scope.flush();
|
|
1556
2896
|
observer?.(instants);
|
|
1557
2897
|
return result;
|
|
1558
2898
|
}, backendOptions);
|
|
1559
|
-
},
|
|
1560
|
-
...backend.adoptTransaction === void 0 ? {} : {
|
|
1561
|
-
adoptTransaction(externalTx) {
|
|
1562
|
-
throw recordedCaptureRequiresCallbackTransactionError({
|
|
1563
|
-
externalTxType: typeof externalTx
|
|
1564
|
-
});
|
|
1565
|
-
}
|
|
1566
2899
|
}
|
|
1567
2900
|
});
|
|
1568
2901
|
}
|
|
@@ -1825,8 +3158,8 @@ function checkWherePredicate(constraint, props) {
|
|
|
1825
3158
|
return true;
|
|
1826
3159
|
}
|
|
1827
3160
|
const predicateBuilder = buildPredicateContext(props);
|
|
1828
|
-
const
|
|
1829
|
-
return evaluatePredicate(
|
|
3161
|
+
const predicate2 = constraint.where(predicateBuilder);
|
|
3162
|
+
return evaluatePredicate(predicate2, props);
|
|
1830
3163
|
}
|
|
1831
3164
|
function buildPredicateContext(props) {
|
|
1832
3165
|
const context = {};
|
|
@@ -1846,11 +3179,11 @@ function buildPredicateContext(props) {
|
|
|
1846
3179
|
}
|
|
1847
3180
|
return context;
|
|
1848
3181
|
}
|
|
1849
|
-
function evaluatePredicate(
|
|
1850
|
-
if (typeof
|
|
3182
|
+
function evaluatePredicate(predicate2, props) {
|
|
3183
|
+
if (typeof predicate2 !== "object" || predicate2 === null || !("__type" in predicate2)) {
|
|
1851
3184
|
return true;
|
|
1852
3185
|
}
|
|
1853
|
-
const pred =
|
|
3186
|
+
const pred = predicate2;
|
|
1854
3187
|
if (pred.__type !== "unique_predicate") {
|
|
1855
3188
|
return true;
|
|
1856
3189
|
}
|
|
@@ -1858,7 +3191,7 @@ function evaluatePredicate(predicate, props) {
|
|
|
1858
3191
|
if (pred.op === "isNull") {
|
|
1859
3192
|
return value === null || value === void 0;
|
|
1860
3193
|
}
|
|
1861
|
-
return
|
|
3194
|
+
return chunk764JHTLT_cjs.isPresent(value);
|
|
1862
3195
|
}
|
|
1863
3196
|
function getKindsForUniquenessCheck(baseKind, scope, registry) {
|
|
1864
3197
|
if (scope === "kind") {
|
|
@@ -1887,7 +3220,7 @@ function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeC
|
|
|
1887
3220
|
}
|
|
1888
3221
|
case "one": {
|
|
1889
3222
|
if (existingEdgeCount > 0) {
|
|
1890
|
-
return new
|
|
3223
|
+
return new chunkSAFZ6JTI_cjs.CardinalityError({
|
|
1891
3224
|
edgeKind,
|
|
1892
3225
|
fromKind,
|
|
1893
3226
|
fromId,
|
|
@@ -1902,7 +3235,7 @@ function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeC
|
|
|
1902
3235
|
}
|
|
1903
3236
|
case "oneActive": {
|
|
1904
3237
|
if (hasActiveEdge) {
|
|
1905
|
-
return new
|
|
3238
|
+
return new chunkSAFZ6JTI_cjs.CardinalityError({
|
|
1906
3239
|
edgeKind,
|
|
1907
3240
|
fromKind,
|
|
1908
3241
|
fromId,
|
|
@@ -1916,7 +3249,7 @@ function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeC
|
|
|
1916
3249
|
}
|
|
1917
3250
|
function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCount) {
|
|
1918
3251
|
if (existingCount > 0) {
|
|
1919
|
-
return new
|
|
3252
|
+
return new chunkSAFZ6JTI_cjs.CardinalityError({
|
|
1920
3253
|
edgeKind,
|
|
1921
3254
|
fromKind,
|
|
1922
3255
|
fromId,
|
|
@@ -1929,7 +3262,7 @@ function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCou
|
|
|
1929
3262
|
function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registry) {
|
|
1930
3263
|
const validFromKinds = registration.from.map((node) => node.kind);
|
|
1931
3264
|
if (!registry.isAssignableToAny(fromKind, validFromKinds)) {
|
|
1932
|
-
return new
|
|
3265
|
+
return new chunkSAFZ6JTI_cjs.EndpointError({
|
|
1933
3266
|
edgeKind,
|
|
1934
3267
|
endpoint: "from",
|
|
1935
3268
|
actualKind: fromKind,
|
|
@@ -1938,7 +3271,7 @@ function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registr
|
|
|
1938
3271
|
}
|
|
1939
3272
|
const validToKinds = registration.to.map((node) => node.kind);
|
|
1940
3273
|
if (!registry.isAssignableToAny(toKind, validToKinds)) {
|
|
1941
|
-
return new
|
|
3274
|
+
return new chunkSAFZ6JTI_cjs.EndpointError({
|
|
1942
3275
|
edgeKind,
|
|
1943
3276
|
endpoint: "to",
|
|
1944
3277
|
actualKind: toKind,
|
|
@@ -1950,7 +3283,7 @@ function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registr
|
|
|
1950
3283
|
function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
|
|
1951
3284
|
for (const existingKind of existingKinds) {
|
|
1952
3285
|
if (registry.areDisjoint(nodeKind, existingKind)) {
|
|
1953
|
-
return new
|
|
3286
|
+
return new chunkSAFZ6JTI_cjs.DisjointError({
|
|
1954
3287
|
nodeId,
|
|
1955
3288
|
attemptedKind: nodeKind,
|
|
1956
3289
|
conflictingKind: existingKind
|
|
@@ -1987,7 +3320,7 @@ async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
|
|
|
1987
3320
|
key
|
|
1988
3321
|
});
|
|
1989
3322
|
if (existing && existing.node_id !== id) {
|
|
1990
|
-
throw new
|
|
3323
|
+
throw new chunkSAFZ6JTI_cjs.UniquenessError({
|
|
1991
3324
|
constraintName: constraint.name,
|
|
1992
3325
|
kind: kindToCheck,
|
|
1993
3326
|
existingId: existing.node_id,
|
|
@@ -2093,7 +3426,7 @@ async function updateUniquenessEntries(ctx, kind, id, oldProps, newProps, constr
|
|
|
2093
3426
|
key: newKey
|
|
2094
3427
|
});
|
|
2095
3428
|
if (existing && existing.node_id !== id) {
|
|
2096
|
-
throw new
|
|
3429
|
+
throw new chunkSAFZ6JTI_cjs.UniquenessError({
|
|
2097
3430
|
constraintName: constraint.name,
|
|
2098
3431
|
kind: kindToCheck,
|
|
2099
3432
|
existingId: existing.node_id,
|
|
@@ -2150,7 +3483,7 @@ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
|
|
|
2150
3483
|
if (connectedEdges.length === 0) return;
|
|
2151
3484
|
switch (behavior) {
|
|
2152
3485
|
case "restrict": {
|
|
2153
|
-
throw new
|
|
3486
|
+
throw new chunkSAFZ6JTI_cjs.RestrictedDeleteError({
|
|
2154
3487
|
nodeKind: args.kind,
|
|
2155
3488
|
nodeId: args.id,
|
|
2156
3489
|
edgeCount: connectedEdges.length,
|
|
@@ -2161,7 +3494,7 @@ async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
|
|
|
2161
3494
|
case "disconnect": {
|
|
2162
3495
|
const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
|
|
2163
3496
|
if (batchDelete !== void 0) {
|
|
2164
|
-
await batchDelete
|
|
3497
|
+
await batchDelete({
|
|
2165
3498
|
graphId: ctx.graphId,
|
|
2166
3499
|
ids: connectedEdges.map((edge) => edge.id)
|
|
2167
3500
|
});
|
|
@@ -2223,7 +3556,7 @@ async function applyNodeInsertSideEffectsBatch(ctx, items, backend) {
|
|
|
2223
3556
|
);
|
|
2224
3557
|
}
|
|
2225
3558
|
function parseRowProps(row) {
|
|
2226
|
-
return
|
|
3559
|
+
return chunkGNPGGLAE_cjs.rowPropsToObject(row.props);
|
|
2227
3560
|
}
|
|
2228
3561
|
async function applyNodeUpdate(ctx, args, backend) {
|
|
2229
3562
|
const { kind, id } = args.existing;
|
|
@@ -2353,10 +3686,14 @@ async function applyNodeResurrect(ctx, args, backend) {
|
|
|
2353
3686
|
}
|
|
2354
3687
|
|
|
2355
3688
|
exports.ALIAS_CTE_PREFIX = ALIAS_CTE_PREFIX;
|
|
3689
|
+
exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
|
|
3690
|
+
exports.CURRENT_READ_INSTANT_PLACEHOLDER = CURRENT_READ_INSTANT_PLACEHOLDER;
|
|
2356
3691
|
exports.DEFAULT_SQL_SCHEMA = DEFAULT_SQL_SCHEMA;
|
|
2357
3692
|
exports.EMBEDDINGS_CTE_ALIAS = EMBEDDINGS_CTE_ALIAS;
|
|
2358
3693
|
exports.FULLTEXT_CTE_ALIAS = FULLTEXT_CTE_ALIAS;
|
|
2359
3694
|
exports.HYBRID_CANDIDATES_CTE_ALIAS = HYBRID_CANDIDATES_CTE_ALIAS;
|
|
3695
|
+
exports.STORE_RUNTIME = STORE_RUNTIME;
|
|
3696
|
+
exports.TRANSACTION_RUNTIME = TRANSACTION_RUNTIME;
|
|
2360
3697
|
exports.advanceRevisionClock = advanceRevisionClock;
|
|
2361
3698
|
exports.applyNodeHardDelete = applyNodeHardDelete;
|
|
2362
3699
|
exports.applyNodeInsertSideEffects = applyNodeInsertSideEffects;
|
|
@@ -2364,37 +3701,62 @@ exports.applyNodeInsertSideEffectsBatch = applyNodeInsertSideEffectsBatch;
|
|
|
2364
3701
|
exports.applyNodeResurrect = applyNodeResurrect;
|
|
2365
3702
|
exports.applyNodeSoftDelete = applyNodeSoftDelete;
|
|
2366
3703
|
exports.applyNodeUpdate = applyNodeUpdate;
|
|
2367
|
-
exports.
|
|
3704
|
+
exports.arrayField = arrayField;
|
|
2368
3705
|
exports.assertRecordedCaptureTransactionIsolation = assertRecordedCaptureTransactionIsolation;
|
|
2369
3706
|
exports.assertRevisionTrackableBackend = assertRevisionTrackableBackend;
|
|
2370
|
-
exports.
|
|
3707
|
+
exports.baseField = baseField;
|
|
3708
|
+
exports.buildFieldBuilderForTypeInfo = buildFieldBuilderForTypeInfo;
|
|
3709
|
+
exports.buildPredicateIndex = buildPredicateIndex;
|
|
2371
3710
|
exports.checkCardinality = checkCardinality;
|
|
2372
3711
|
exports.checkDisjointness = checkDisjointness;
|
|
2373
3712
|
exports.checkUniqueEdge = checkUniqueEdge;
|
|
2374
3713
|
exports.checkUniquenessConstraints = checkUniquenessConstraints;
|
|
2375
3714
|
exports.checkWherePredicate = checkWherePredicate;
|
|
2376
3715
|
exports.closeRecordedHardDeletedKind = closeRecordedHardDeletedKind;
|
|
3716
|
+
exports.compileFieldValue = compileFieldValue;
|
|
3717
|
+
exports.compileKindFilter = compileKindFilter;
|
|
3718
|
+
exports.compilePredicateClauses = compilePredicateClauses;
|
|
3719
|
+
exports.compilePredicateExpression = compilePredicateExpression;
|
|
3720
|
+
exports.compileTemporalFilter = compileTemporalFilter;
|
|
2377
3721
|
exports.computeFulltextContent = computeFulltextContent;
|
|
2378
3722
|
exports.computeUniqueKey = computeUniqueKey;
|
|
2379
|
-
exports.
|
|
2380
|
-
exports.
|
|
3723
|
+
exports.createFulltextAccessor = createFulltextAccessor;
|
|
3724
|
+
exports.createGraphBackendProjection = createGraphBackendProjection;
|
|
2381
3725
|
exports.createNodeWriteContext = createNodeWriteContext;
|
|
2382
3726
|
exports.createRecordedBackend = createRecordedBackend;
|
|
2383
3727
|
exports.createRecordedReadBinding = createRecordedReadBinding;
|
|
2384
3728
|
exports.createRecordedTransactionScope = createRecordedTransactionScope;
|
|
2385
|
-
exports.createRevisionTrackingUnsafeSqlRef = createRevisionTrackingUnsafeSqlRef;
|
|
2386
3729
|
exports.createSqlSchema = createSqlSchema;
|
|
2387
3730
|
exports.createUniquenessContext = createUniquenessContext;
|
|
2388
|
-
exports.
|
|
3731
|
+
exports.currentReadInstant = currentReadInstant;
|
|
3732
|
+
exports.currentReadInstantFor = currentReadInstantFor;
|
|
3733
|
+
exports.dateField = dateField;
|
|
2389
3734
|
exports.edgeInsertDispatch = edgeInsertDispatch;
|
|
2390
3735
|
exports.ensureRevisionOrigin = ensureRevisionOrigin;
|
|
3736
|
+
exports.exists = exists;
|
|
3737
|
+
exports.extractFulltextMatchPredicates = extractFulltextMatchPredicates;
|
|
3738
|
+
exports.extractTemporalOptions = extractTemporalOptions;
|
|
3739
|
+
exports.extractVectorSimilarityPredicates = extractVectorSimilarityPredicates;
|
|
3740
|
+
exports.fieldRef = fieldRef;
|
|
2391
3741
|
exports.generateId = generateId;
|
|
2392
3742
|
exports.getEdgeRowsByIds = getEdgeRowsByIds;
|
|
2393
3743
|
exports.getEmbeddingFields = getEmbeddingFields;
|
|
3744
|
+
exports.getFieldPointer = getFieldPointer;
|
|
3745
|
+
exports.getHybridTargetAlias = getHybridTargetAlias;
|
|
2394
3746
|
exports.getKindsForUniquenessCheck = getKindsForUniquenessCheck;
|
|
3747
|
+
exports.getNodeKindsForAlias = getNodeKindsForAlias;
|
|
2395
3748
|
exports.getNodeRowsByIds = getNodeRowsByIds;
|
|
3749
|
+
exports.getPredicatesForAlias = getPredicatesForAlias;
|
|
3750
|
+
exports.inSubquery = inSubquery;
|
|
3751
|
+
exports.isParameterRef = isParameterRef;
|
|
2396
3752
|
exports.lockRecordedGraphWrite = lockRecordedGraphWrite;
|
|
2397
3753
|
exports.nodeInsertDispatch = nodeInsertDispatch;
|
|
3754
|
+
exports.notExists = notExists;
|
|
3755
|
+
exports.notInSubquery = notInSubquery;
|
|
3756
|
+
exports.numberField = numberField;
|
|
3757
|
+
exports.objectField = objectField;
|
|
3758
|
+
exports.param = param;
|
|
3759
|
+
exports.projectBackendMembers = projectBackendMembers;
|
|
2398
3760
|
exports.readRecordedClock = readRecordedClock;
|
|
2399
3761
|
exports.readRevisionOrigin = readRevisionOrigin;
|
|
2400
3762
|
exports.recordedBindParamBudget = recordedBindParamBudget;
|
|
@@ -2405,14 +3767,21 @@ exports.recordedRelation = recordedRelation;
|
|
|
2405
3767
|
exports.requireExternalRecordedReadSource = requireExternalRecordedReadSource;
|
|
2406
3768
|
exports.requireRecordedReadBinding = requireRecordedReadBinding;
|
|
2407
3769
|
exports.requireSqlSchema = requireSqlSchema;
|
|
2408
|
-
exports.resolveReadCoordinate = resolveReadCoordinate;
|
|
2409
3770
|
exports.runInsertBatch = runInsertBatch;
|
|
2410
3771
|
exports.runInsertBatchReturning = runInsertBatchReturning;
|
|
2411
3772
|
exports.runInsertNoReturn = runInsertNoReturn;
|
|
3773
|
+
exports.sqlValueList = sqlValueList;
|
|
3774
|
+
exports.storeBackend = storeBackend;
|
|
3775
|
+
exports.storeRuntime = storeRuntime;
|
|
3776
|
+
exports.stringField = stringField;
|
|
3777
|
+
exports.throwHistoryUnsafeSqlAccess = throwHistoryUnsafeSqlAccess;
|
|
3778
|
+
exports.throwRevisionTrackingUnsafeSqlAccess = throwRevisionTrackingUnsafeSqlAccess;
|
|
3779
|
+
exports.transactionBackend = transactionBackend;
|
|
3780
|
+
exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
|
|
2412
3781
|
exports.uncapturedGraphWriteLock = uncapturedGraphWriteLock;
|
|
2413
3782
|
exports.validateEdgeEndpoints = validateEdgeEndpoints;
|
|
2414
3783
|
exports.vectorSlotKey = vectorSlotKey;
|
|
2415
|
-
exports.
|
|
3784
|
+
exports.withPinnedReadInstant = withPinnedReadInstant;
|
|
2416
3785
|
exports.withRecordedFlushObserver = withRecordedFlushObserver;
|
|
2417
|
-
//# sourceMappingURL=chunk-
|
|
2418
|
-
//# sourceMappingURL=chunk-
|
|
3786
|
+
//# sourceMappingURL=chunk-NWYCOFEZ.cjs.map
|
|
3787
|
+
//# sourceMappingURL=chunk-NWYCOFEZ.cjs.map
|