@nicia-ai/typegraph 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/drizzle/indexes.cjs +11 -11
- package/dist/backend/drizzle/indexes.d.cts +1 -1
- package/dist/backend/drizzle/indexes.d.ts +1 -1
- package/dist/backend/drizzle/indexes.js +7 -7
- package/dist/backend/index.cjs +53 -54
- package/dist/backend/index.d.cts +3 -3
- package/dist/backend/index.d.ts +3 -3
- package/dist/backend/index.js +13 -14
- package/dist/backend/postgres/index.cjs +29 -30
- package/dist/backend/postgres/index.d.cts +7 -7
- package/dist/backend/postgres/index.d.ts +7 -7
- package/dist/backend/postgres/index.js +16 -17
- package/dist/backend/postgres/pglite-store.cjs +48 -42
- package/dist/backend/postgres/pglite-store.cjs.map +1 -1
- package/dist/backend/postgres/pglite-store.d.cts +15 -9
- package/dist/backend/postgres/pglite-store.d.ts +15 -9
- package/dist/backend/postgres/pglite-store.js +44 -38
- package/dist/backend/postgres/pglite-store.js.map +1 -1
- package/dist/backend/postgres/pglite.cjs +18 -19
- package/dist/backend/postgres/pglite.d.cts +4 -4
- package/dist/backend/postgres/pglite.d.ts +4 -4
- package/dist/backend/postgres/pglite.js +17 -18
- package/dist/backend/sqlite/index.cjs +26 -27
- package/dist/backend/sqlite/index.d.cts +6 -6
- package/dist/backend/sqlite/index.d.ts +6 -6
- package/dist/backend/sqlite/index.js +14 -15
- package/dist/backend/sqlite/libsql.cjs +21 -22
- package/dist/backend/sqlite/libsql.cjs.map +1 -1
- package/dist/backend/sqlite/libsql.d.cts +15 -8
- package/dist/backend/sqlite/libsql.d.ts +15 -8
- package/dist/backend/sqlite/libsql.js +17 -18
- package/dist/backend/sqlite/libsql.js.map +1 -1
- package/dist/backend/sqlite/local-store.cjs +49 -43
- package/dist/backend/sqlite/local-store.cjs.map +1 -1
- package/dist/backend/sqlite/local-store.d.cts +15 -10
- package/dist/backend/sqlite/local-store.d.ts +15 -10
- package/dist/backend/sqlite/local-store.js +45 -39
- package/dist/backend/sqlite/local-store.js.map +1 -1
- package/dist/backend/sqlite/local.cjs +19 -20
- package/dist/backend/sqlite/local.d.cts +3 -3
- package/dist/backend/sqlite/local.d.ts +3 -3
- package/dist/backend/sqlite/local.js +17 -18
- package/dist/{chunk-S3ZRKJHY.js → chunk-2LG2XB2M.js} +3 -3
- package/dist/{chunk-S3ZRKJHY.js.map → chunk-2LG2XB2M.js.map} +1 -1
- package/dist/{chunk-7PF2L3H6.cjs → chunk-2NA5DYLO.cjs} +4 -4
- package/dist/{chunk-7PF2L3H6.cjs.map → chunk-2NA5DYLO.cjs.map} +1 -1
- package/dist/chunk-2Z2Z3ZD6.js +58 -0
- package/dist/chunk-2Z2Z3ZD6.js.map +1 -0
- package/dist/{chunk-VVQM4CZD.cjs → chunk-3DHZCOT7.cjs} +20 -20
- package/dist/{chunk-VVQM4CZD.cjs.map → chunk-3DHZCOT7.cjs.map} +1 -1
- package/dist/{chunk-JXUTCSXX.cjs → chunk-4UGOKMI5.cjs} +250 -158
- package/dist/chunk-4UGOKMI5.cjs.map +1 -0
- package/dist/{chunk-RFRM3Q5K.js → chunk-5262ZMTR.js} +14 -5
- package/dist/chunk-5262ZMTR.js.map +1 -0
- package/dist/{chunk-QRNYDV5Z.js → chunk-5763DULU.js} +214 -69
- package/dist/chunk-5763DULU.js.map +1 -0
- package/dist/{chunk-BGYJW37L.js → chunk-5UVRGXD3.js} +277 -7
- package/dist/chunk-5UVRGXD3.js.map +1 -0
- package/dist/{chunk-QR24DJDF.cjs → chunk-62ZP23AW.cjs} +15 -15
- package/dist/{chunk-QR24DJDF.cjs.map → chunk-62ZP23AW.cjs.map} +1 -1
- package/dist/{chunk-ZI6VQSZA.cjs → chunk-65E3XWGF.cjs} +724 -577
- package/dist/chunk-65E3XWGF.cjs.map +1 -0
- package/dist/{chunk-S4KQ5LV4.js → chunk-775A4ZMN.js} +40 -6
- package/dist/chunk-775A4ZMN.js.map +1 -0
- package/dist/{chunk-J2ICGNHO.cjs → chunk-7BQXPCGN.cjs} +830 -169
- package/dist/chunk-7BQXPCGN.cjs.map +1 -0
- package/dist/{chunk-FJMPR3OH.cjs → chunk-7EO3TCQB.cjs} +33 -7
- package/dist/chunk-7EO3TCQB.cjs.map +1 -0
- package/dist/{chunk-DXEEHSGN.js → chunk-7VQXLT5O.js} +436 -43
- package/dist/chunk-7VQXLT5O.js.map +1 -0
- package/dist/chunk-A4OC4DVN.cjs +12 -0
- package/dist/{chunk-4SZ6XPTG.cjs.map → chunk-A4OC4DVN.cjs.map} +1 -1
- package/dist/{chunk-TDXIBCGY.cjs → chunk-A7J2YDDI.cjs} +5 -3
- package/dist/chunk-A7J2YDDI.cjs.map +1 -0
- package/dist/{chunk-55ITBQJI.js → chunk-AKLS3BYZ.js} +56 -5
- package/dist/chunk-AKLS3BYZ.js.map +1 -0
- package/dist/{chunk-D7PG5D5K.js → chunk-AMKPPFUO.js} +32 -6
- package/dist/chunk-AMKPPFUO.js.map +1 -0
- package/dist/{chunk-WUFASQUO.js → chunk-ASTI57H3.js} +3 -3
- package/dist/{chunk-WUFASQUO.js.map → chunk-ASTI57H3.js.map} +1 -1
- package/dist/{chunk-4QIKLIGG.js → chunk-BKCUOV7A.js} +15 -5
- package/dist/chunk-BKCUOV7A.js.map +1 -0
- package/dist/{chunk-JQXSZHF2.cjs → chunk-BSFJMMV3.cjs} +134 -7
- package/dist/chunk-BSFJMMV3.cjs.map +1 -0
- package/dist/{chunk-4GUTQPVO.js → chunk-C23WSN5E.js} +185 -24
- package/dist/chunk-C23WSN5E.js.map +1 -0
- package/dist/{chunk-QLUXRWKL.js → chunk-CBTIUB76.js} +3 -3
- package/dist/{chunk-QLUXRWKL.js.map → chunk-CBTIUB76.js.map} +1 -1
- package/dist/chunk-CMWHLBVN.cjs +2082 -0
- package/dist/chunk-CMWHLBVN.cjs.map +1 -0
- package/dist/{chunk-QB6VMOJ2.cjs → chunk-CXBHOOIQ.cjs} +45 -10
- package/dist/chunk-CXBHOOIQ.cjs.map +1 -0
- package/dist/{chunk-FL5UQRES.js → chunk-DCQVHAYQ.js} +5 -5
- package/dist/{chunk-FL5UQRES.js.map → chunk-DCQVHAYQ.js.map} +1 -1
- package/dist/chunk-DTVWX77L.cjs +3432 -0
- package/dist/chunk-DTVWX77L.cjs.map +1 -0
- package/dist/chunk-DYATYRY4.js +47 -0
- package/dist/chunk-DYATYRY4.js.map +1 -0
- package/dist/chunk-E4WNQBEF.cjs +217 -0
- package/dist/chunk-E4WNQBEF.cjs.map +1 -0
- package/dist/{chunk-G6Q5UM7U.js → chunk-FWJKWH6U.js} +5 -3
- package/dist/chunk-FWJKWH6U.js.map +1 -0
- package/dist/chunk-GF3KXUTW.js +3393 -0
- package/dist/chunk-GF3KXUTW.js.map +1 -0
- package/dist/{chunk-VTN3C3CH.js → chunk-HFHTMECK.js} +7 -7
- package/dist/{chunk-VTN3C3CH.js.map → chunk-HFHTMECK.js.map} +1 -1
- package/dist/{chunk-FLEQ2HBK.js → chunk-I5MOXA4H.js} +20 -14
- package/dist/chunk-I5MOXA4H.js.map +1 -0
- package/dist/{chunk-4MB3AQAQ.js → chunk-J3WZ3FA2.js} +77 -3
- package/dist/chunk-J3WZ3FA2.js.map +1 -0
- package/dist/{chunk-UR7W5YQK.js → chunk-JBQQ7THH.js} +5 -3
- package/dist/chunk-JBQQ7THH.js.map +1 -0
- package/dist/{chunk-TKP5T34P.js → chunk-JXA2ZP2Q.js} +6 -16
- package/dist/chunk-JXA2ZP2Q.js.map +1 -0
- package/dist/{chunk-GYA4JRP5.js → chunk-JXXDZTMN.js} +2 -2
- package/dist/chunk-JXXDZTMN.js.map +1 -0
- package/dist/chunk-JZUR7ZWE.js +254 -0
- package/dist/chunk-JZUR7ZWE.js.map +1 -0
- package/dist/{chunk-42PYUGLS.js → chunk-K5ELX2GT.js} +108 -8
- package/dist/chunk-K5ELX2GT.js.map +1 -0
- package/dist/{chunk-Q6EDCUXV.js → chunk-L65OU2U3.js} +556 -204
- package/dist/chunk-L65OU2U3.js.map +1 -0
- package/dist/{chunk-D54WH24V.cjs → chunk-LBJKZXDE.cjs} +115 -13
- package/dist/chunk-LBJKZXDE.cjs.map +1 -0
- package/dist/{chunk-FQ7ZPOTZ.js → chunk-LGHCOKTT.js} +637 -493
- package/dist/chunk-LGHCOKTT.js.map +1 -0
- package/dist/chunk-M3WP7RQZ.js +736 -0
- package/dist/chunk-M3WP7RQZ.js.map +1 -0
- package/dist/{chunk-4MEWSUVM.cjs → chunk-M4BDU5RX.cjs} +12 -12
- package/dist/chunk-M4BDU5RX.cjs.map +1 -0
- package/dist/chunk-MCLYU6BN.cjs +332 -0
- package/dist/chunk-MCLYU6BN.cjs.map +1 -0
- package/dist/{chunk-MIJKEVV7.js → chunk-MSY7FSX4.js} +37 -4
- package/dist/chunk-MSY7FSX4.js.map +1 -0
- package/dist/{chunk-H7VE3FL4.cjs → chunk-MUK4BU7K.cjs} +519 -125
- package/dist/chunk-MUK4BU7K.cjs.map +1 -0
- package/dist/{chunk-D56XG4EI.cjs → chunk-MXJDTH5B.cjs} +56 -45
- package/dist/chunk-MXJDTH5B.cjs.map +1 -0
- package/dist/{chunk-5EKPX6QU.js → chunk-MZLPX2R7.js} +8 -9
- package/dist/chunk-MZLPX2R7.js.map +1 -0
- package/dist/chunk-N66HCGCY.cjs +57 -0
- package/dist/chunk-N66HCGCY.cjs.map +1 -0
- package/dist/{chunk-CPEL3YIR.cjs → chunk-NFCVHQ5P.cjs} +55 -22
- package/dist/chunk-NFCVHQ5P.cjs.map +1 -0
- package/dist/{chunk-C4F7VJ5D.cjs → chunk-NI72YOJB.cjs} +84 -2
- package/dist/chunk-NI72YOJB.cjs.map +1 -0
- package/dist/{chunk-BNS75YNF.cjs → chunk-NK5Q7UNE.cjs} +10 -20
- package/dist/chunk-NK5Q7UNE.cjs.map +1 -0
- package/dist/{chunk-TKORQCG4.js → chunk-NLI2AVEF.js} +386 -862
- package/dist/chunk-NLI2AVEF.js.map +1 -0
- package/dist/{chunk-YMTXMPV6.js → chunk-NMWDXFPH.js} +4 -4
- package/dist/{chunk-YMTXMPV6.js.map → chunk-NMWDXFPH.js.map} +1 -1
- package/dist/{chunk-J7LXTUTP.cjs → chunk-PF6F5NLJ.cjs} +604 -1094
- package/dist/chunk-PF6F5NLJ.cjs.map +1 -0
- package/dist/{chunk-NAAMUYMS.cjs → chunk-PNN7RHVR.cjs} +58 -48
- package/dist/chunk-PNN7RHVR.cjs.map +1 -0
- package/dist/{chunk-YOALGKRE.cjs → chunk-PNTCATDE.cjs} +3528 -1763
- package/dist/chunk-PNTCATDE.cjs.map +1 -0
- package/dist/{chunk-6DCB664D.js → chunk-PQBQG7IM.js} +3 -3
- package/dist/{chunk-6DCB664D.js.map → chunk-PQBQG7IM.js.map} +1 -1
- package/dist/{chunk-UCQ3BFSY.cjs → chunk-PT7RIRIZ.cjs} +684 -332
- package/dist/chunk-PT7RIRIZ.cjs.map +1 -0
- package/dist/{chunk-ACSVZPK7.cjs → chunk-PWLJ77UV.cjs} +5 -3
- package/dist/chunk-PWLJ77UV.cjs.map +1 -0
- package/dist/chunk-Q3G6A4I3.cjs +755 -0
- package/dist/chunk-Q3G6A4I3.cjs.map +1 -0
- package/dist/{chunk-Z3WO6MND.cjs → chunk-RMQLSPA2.cjs} +297 -27
- package/dist/chunk-RMQLSPA2.cjs.map +1 -0
- package/dist/{chunk-SJDMVITW.cjs → chunk-RT5ZY4XA.cjs} +6 -5
- package/dist/chunk-RT5ZY4XA.cjs.map +1 -0
- package/dist/{chunk-ID4WXTKL.js → chunk-S6PW7VV5.js} +2382 -617
- package/dist/chunk-S6PW7VV5.js.map +1 -0
- package/dist/{chunk-4GUBTVPV.js → chunk-T4XNKYXB.js} +780 -126
- package/dist/chunk-T4XNKYXB.js.map +1 -0
- package/dist/{chunk-YDWLUT5V.cjs → chunk-TQR4KBY2.cjs} +323 -178
- package/dist/chunk-TQR4KBY2.cjs.map +1 -0
- package/dist/{chunk-OOA273IJ.cjs → chunk-U5SON7R2.cjs} +27 -27
- package/dist/{chunk-OOA273IJ.cjs.map → chunk-U5SON7R2.cjs.map} +1 -1
- package/dist/{chunk-IX64T5OL.cjs → chunk-U63GDNRC.cjs} +32 -26
- package/dist/chunk-U63GDNRC.cjs.map +1 -0
- package/dist/{chunk-WDBXJOU5.cjs → chunk-UDISNXDL.cjs} +56 -47
- package/dist/chunk-UDISNXDL.cjs.map +1 -0
- package/dist/{chunk-EFEOOCJ3.js → chunk-UV3SN74I.js} +5 -5
- package/dist/{chunk-EFEOOCJ3.js.map → chunk-UV3SN74I.js.map} +1 -1
- package/dist/{chunk-U5W4LKZV.cjs → chunk-VCRRKBLN.cjs} +9 -9
- package/dist/{chunk-U5W4LKZV.cjs.map → chunk-VCRRKBLN.cjs.map} +1 -1
- package/dist/{chunk-ISLPNELU.js → chunk-VGTJPTIC.js} +16 -5
- package/dist/chunk-VGTJPTIC.js.map +1 -0
- package/dist/chunk-VLT6PEWR.cjs +60 -0
- package/dist/chunk-VLT6PEWR.cjs.map +1 -0
- package/dist/chunk-VQH4VAWD.cjs +12 -0
- package/dist/{chunk-B3F2D3SP.cjs.map → chunk-VQH4VAWD.cjs.map} +1 -1
- package/dist/{chunk-SNXVDZAJ.js → chunk-W6OG3HDG.js} +5 -4
- package/dist/chunk-W6OG3HDG.js.map +1 -0
- package/dist/chunk-WDGA7IYB.js +207 -0
- package/dist/chunk-WDGA7IYB.js.map +1 -0
- package/dist/chunk-WQZLUGVR.js +2057 -0
- package/dist/chunk-WQZLUGVR.js.map +1 -0
- package/dist/{chunk-EKFUG4G7.cjs → chunk-XBYVV3MP.cjs} +60 -5
- package/dist/chunk-XBYVV3MP.cjs.map +1 -0
- package/dist/{chunk-5GAONX5G.cjs → chunk-XCAGZAKP.cjs} +7 -7
- package/dist/{chunk-5GAONX5G.cjs.map → chunk-XCAGZAKP.cjs.map} +1 -1
- package/dist/chunk-XL7SLCXS.js +309 -0
- package/dist/chunk-XL7SLCXS.js.map +1 -0
- package/dist/{chunk-SVJ5GEXW.cjs → chunk-XUO3KQFO.cjs} +2 -2
- package/dist/chunk-XUO3KQFO.cjs.map +1 -0
- package/dist/{chunk-F4NHQHEZ.cjs → chunk-YAAM3M2S.cjs} +10 -10
- package/dist/{chunk-F4NHQHEZ.cjs.map → chunk-YAAM3M2S.cjs.map} +1 -1
- package/dist/{chunk-RUQS6M7G.js → chunk-YBFHZUXX.js} +6 -6
- package/dist/chunk-YBFHZUXX.js.map +1 -0
- package/dist/{chunk-KMXWZLQX.cjs → chunk-YBQOHKHN.cjs} +99 -100
- package/dist/chunk-YBQOHKHN.cjs.map +1 -0
- package/dist/{chunk-PVUI6KGR.js → chunk-YDFDBE6D.js} +93 -6
- package/dist/chunk-YDFDBE6D.js.map +1 -0
- package/dist/{chunk-P7GTYOLB.cjs → chunk-YVWGEQJE.cjs} +297 -135
- package/dist/chunk-YVWGEQJE.cjs.map +1 -0
- package/dist/{chunk-QT6V3YRH.js → chunk-YWGVVALJ.js} +3 -3
- package/dist/{chunk-QT6V3YRH.js.map → chunk-YWGVVALJ.js.map} +1 -1
- package/dist/core/index.cjs +40 -40
- package/dist/core/index.d.cts +4 -5
- package/dist/core/index.d.ts +4 -5
- package/dist/core/index.js +8 -8
- package/dist/{ddl-BG4J805L.d.cts → ddl-BJcOp4WZ.d.cts} +3 -3
- package/dist/{ddl-CgiS9QLj.d.ts → ddl-BXfGHbPN.d.ts} +3 -3
- package/dist/graph-extension/index.cjs +26 -22
- package/dist/graph-extension/index.d.cts +16 -6
- package/dist/graph-extension/index.d.ts +16 -6
- package/dist/graph-extension/index.js +7 -7
- package/dist/graph-merge/index.cjs +2459 -654
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +170 -33
- package/dist/graph-merge/index.d.ts +170 -33
- package/dist/graph-merge/index.js +2269 -467
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-C3y_98iN.d.cts → index-BSHvKfok.d.ts} +221 -10
- package/dist/{index-BBxZCUdu.d.ts → index-DxaYCv8Y.d.cts} +221 -10
- package/dist/index.cjs +330 -268
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +590 -576
- package/dist/index.d.ts +590 -576
- package/dist/index.js +73 -49
- package/dist/index.js.map +1 -1
- package/dist/indexes/index.cjs +17 -17
- package/dist/indexes/index.d.cts +4 -4
- package/dist/indexes/index.d.ts +4 -4
- package/dist/indexes/index.js +10 -10
- package/dist/interchange/index.cjs +165 -51
- package/dist/interchange/index.cjs.map +1 -1
- package/dist/interchange/index.d.cts +261 -16
- package/dist/interchange/index.d.ts +261 -16
- package/dist/interchange/index.js +128 -25
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-YoLEfcc1.d.ts → manager-CfZAimti.d.ts} +36 -5
- package/dist/{manager-KS7CGQQT.d.cts → manager-HGk6E_HW.d.cts} +36 -5
- package/dist/{materialize-indexes-Bhhyb1B3.d.ts → materialize-indexes-6A7dWGtb.d.cts} +10 -2
- package/dist/{materialize-indexes-OHRWypW6.d.cts → materialize-indexes-BMJP6Tms.d.ts} +10 -2
- package/dist/{postgres-DpkW3R5Y.d.cts → postgres-DFYWENdR.d.cts} +1961 -439
- package/dist/{postgres-DwqyIniy.d.ts → postgres-e7a9TdvR.d.ts} +1961 -439
- package/dist/profiler/index.cjs +15 -15
- package/dist/profiler/index.d.cts +9 -10
- package/dist/profiler/index.d.ts +9 -10
- package/dist/profiler/index.js +4 -4
- package/dist/provenance/index.cjs +46 -48
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +7 -7
- package/dist/provenance/index.d.ts +7 -7
- package/dist/provenance/index.js +12 -14
- package/dist/provenance/index.js.map +1 -1
- package/dist/schema/index.cjs +50 -48
- package/dist/schema/index.d.cts +9 -16
- package/dist/schema/index.d.ts +9 -16
- package/dist/schema/index.js +23 -21
- package/dist/{searchable-DLWEfC4a.d.ts → searchable-9OQoPuRs.d.ts} +1 -2
- package/dist/{searchable-CIZL8Hyw.d.cts → searchable-CIje5XYD.d.cts} +1 -2
- package/dist/{sqlite-DY0WODUK.d.cts → sqlite-DerU5tc7.d.ts} +2029 -347
- package/dist/{sqlite-L-VIRzqA.d.ts → sqlite-DitnISa9.d.cts} +2029 -347
- package/dist/{store-view-A85FFRnk.d.cts → store-B0h6x7wo.d.cts} +1289 -767
- package/dist/{store-view-66p92IPi.d.ts → store-ClQ-MZQS.d.ts} +1289 -767
- package/dist/{temporal-BNbjXqer.d.cts → temporal-Bn-Fi8FJ.d.cts} +1 -1
- package/dist/{temporal-Bob6Nfbp.d.ts → temporal-BtM4UALv.d.ts} +1 -1
- package/dist/{types-DeORZhxn.d.cts → types-CoIx8HX5.d.cts} +1 -1
- package/dist/{types-Ch9a0Dx6.d.ts → types-HkveCCx0.d.cts} +726 -5
- package/dist/{types-Ch9a0Dx6.d.cts → types-HkveCCx0.d.ts} +726 -5
- package/dist/{types-ClCzT-dT.d.ts → types-KFfk-8Ah.d.ts} +1 -1
- package/dist/{where-DPw52ksb.d.cts → where--fk7_0kv.d.cts} +1 -1
- package/dist/{where-kWUZPvEA.d.ts → where-ws5hf-Ov.d.ts} +1 -1
- package/package.json +3 -3
- package/dist/chunk-2L54C2C2.js +0 -144
- package/dist/chunk-2L54C2C2.js.map +0 -1
- package/dist/chunk-35S6P5ZU.js +0 -27
- package/dist/chunk-35S6P5ZU.js.map +0 -1
- package/dist/chunk-42PYUGLS.js.map +0 -1
- package/dist/chunk-4GUBTVPV.js.map +0 -1
- package/dist/chunk-4GUTQPVO.js.map +0 -1
- package/dist/chunk-4MB3AQAQ.js.map +0 -1
- package/dist/chunk-4MEWSUVM.cjs.map +0 -1
- package/dist/chunk-4QIKLIGG.js.map +0 -1
- package/dist/chunk-4SZ6XPTG.cjs +0 -12
- package/dist/chunk-55ITBQJI.js.map +0 -1
- package/dist/chunk-5EKPX6QU.js.map +0 -1
- package/dist/chunk-6RYPD3NJ.cjs +0 -1282
- package/dist/chunk-6RYPD3NJ.cjs.map +0 -1
- package/dist/chunk-764JHTLT.cjs +0 -15
- package/dist/chunk-764JHTLT.cjs.map +0 -1
- package/dist/chunk-ACSVZPK7.cjs.map +0 -1
- package/dist/chunk-B3F2D3SP.cjs +0 -12
- package/dist/chunk-BGYJW37L.js.map +0 -1
- package/dist/chunk-BNS75YNF.cjs.map +0 -1
- package/dist/chunk-C4F7VJ5D.cjs.map +0 -1
- package/dist/chunk-CBKG6HEP.js +0 -1263
- package/dist/chunk-CBKG6HEP.js.map +0 -1
- package/dist/chunk-CPEL3YIR.cjs.map +0 -1
- package/dist/chunk-D54WH24V.cjs.map +0 -1
- package/dist/chunk-D56XG4EI.cjs.map +0 -1
- package/dist/chunk-D7PG5D5K.js.map +0 -1
- package/dist/chunk-DI74SMXS.cjs +0 -29
- package/dist/chunk-DI74SMXS.cjs.map +0 -1
- package/dist/chunk-DK2S42XB.js +0 -77
- package/dist/chunk-DK2S42XB.js.map +0 -1
- package/dist/chunk-DRACN6XG.js +0 -27
- package/dist/chunk-DRACN6XG.js.map +0 -1
- package/dist/chunk-DXEEHSGN.js.map +0 -1
- package/dist/chunk-EKFUG4G7.cjs.map +0 -1
- package/dist/chunk-EQ7JKLZO.cjs +0 -157
- package/dist/chunk-EQ7JKLZO.cjs.map +0 -1
- package/dist/chunk-FJMPR3OH.cjs.map +0 -1
- package/dist/chunk-FLEQ2HBK.js.map +0 -1
- package/dist/chunk-FQ7ZPOTZ.js.map +0 -1
- package/dist/chunk-G6Q5UM7U.js.map +0 -1
- package/dist/chunk-GYA4JRP5.js.map +0 -1
- package/dist/chunk-H7VE3FL4.cjs.map +0 -1
- package/dist/chunk-ID4WXTKL.js.map +0 -1
- package/dist/chunk-ISLPNELU.js.map +0 -1
- package/dist/chunk-ITE4IXAK.js +0 -25
- package/dist/chunk-ITE4IXAK.js.map +0 -1
- package/dist/chunk-IX64T5OL.cjs.map +0 -1
- package/dist/chunk-J2ICGNHO.cjs.map +0 -1
- package/dist/chunk-J7LXTUTP.cjs.map +0 -1
- package/dist/chunk-JQXSZHF2.cjs.map +0 -1
- package/dist/chunk-JXUTCSXX.cjs.map +0 -1
- package/dist/chunk-KCO5EFJU.js +0 -79
- package/dist/chunk-KCO5EFJU.js.map +0 -1
- package/dist/chunk-KKYELPZ2.cjs +0 -83
- package/dist/chunk-KKYELPZ2.cjs.map +0 -1
- package/dist/chunk-KMXWZLQX.cjs.map +0 -1
- package/dist/chunk-MIJKEVV7.js.map +0 -1
- package/dist/chunk-NAAMUYMS.cjs.map +0 -1
- package/dist/chunk-P7GTYOLB.cjs.map +0 -1
- package/dist/chunk-PVUI6KGR.js.map +0 -1
- package/dist/chunk-Q6EDCUXV.js.map +0 -1
- package/dist/chunk-QB6VMOJ2.cjs.map +0 -1
- package/dist/chunk-QC4MCOFV.cjs +0 -83
- package/dist/chunk-QC4MCOFV.cjs.map +0 -1
- package/dist/chunk-QMQLUA66.js +0 -12
- package/dist/chunk-QMQLUA66.js.map +0 -1
- package/dist/chunk-QRNYDV5Z.js.map +0 -1
- package/dist/chunk-RFRM3Q5K.js.map +0 -1
- package/dist/chunk-RUQS6M7G.js.map +0 -1
- package/dist/chunk-S4KQ5LV4.js.map +0 -1
- package/dist/chunk-SJDMVITW.cjs.map +0 -1
- package/dist/chunk-SNXVDZAJ.js.map +0 -1
- package/dist/chunk-SVJ5GEXW.cjs.map +0 -1
- package/dist/chunk-TDXIBCGY.cjs.map +0 -1
- package/dist/chunk-TKORQCG4.js.map +0 -1
- package/dist/chunk-TKP5T34P.js.map +0 -1
- package/dist/chunk-TRF4EBJT.cjs +0 -30
- package/dist/chunk-TRF4EBJT.cjs.map +0 -1
- package/dist/chunk-UCQ3BFSY.cjs.map +0 -1
- package/dist/chunk-UR7W5YQK.js.map +0 -1
- package/dist/chunk-V34A6R5V.js +0 -134
- package/dist/chunk-V34A6R5V.js.map +0 -1
- package/dist/chunk-WDAVPX46.js +0 -81
- package/dist/chunk-WDAVPX46.js.map +0 -1
- package/dist/chunk-WDBXJOU5.cjs.map +0 -1
- package/dist/chunk-YDWLUT5V.cjs.map +0 -1
- package/dist/chunk-YOALGKRE.cjs.map +0 -1
- package/dist/chunk-Z3WO6MND.cjs.map +0 -1
- package/dist/chunk-ZDH3DX3C.cjs +0 -30
- package/dist/chunk-ZDH3DX3C.cjs.map +0 -1
- package/dist/chunk-ZI6VQSZA.cjs.map +0 -1
- package/dist/chunk-ZTAJL4DT.cjs +0 -85
- package/dist/chunk-ZTAJL4DT.cjs.map +0 -1
- package/dist/define-graph-BGrJahvp.d.ts +0 -173
- package/dist/define-graph-alREY2wj.d.cts +0 -173
|
@@ -1,63 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var chunkHAHNRASW_cjs = require('./chunk-HAHNRASW.cjs');
|
|
13
|
-
var chunkC4F7VJ5D_cjs = require('./chunk-C4F7VJ5D.cjs');
|
|
14
|
-
var chunkTDXIBCGY_cjs = require('./chunk-TDXIBCGY.cjs');
|
|
3
|
+
var chunkBSFJMMV3_cjs = require('./chunk-BSFJMMV3.cjs');
|
|
4
|
+
var chunkNFCVHQ5P_cjs = require('./chunk-NFCVHQ5P.cjs');
|
|
5
|
+
var chunkXBYVV3MP_cjs = require('./chunk-XBYVV3MP.cjs');
|
|
6
|
+
var chunkMCLYU6BN_cjs = require('./chunk-MCLYU6BN.cjs');
|
|
7
|
+
var chunkVCRRKBLN_cjs = require('./chunk-VCRRKBLN.cjs');
|
|
8
|
+
var chunkRT5ZY4XA_cjs = require('./chunk-RT5ZY4XA.cjs');
|
|
9
|
+
var chunkNI72YOJB_cjs = require('./chunk-NI72YOJB.cjs');
|
|
10
|
+
var chunkA7J2YDDI_cjs = require('./chunk-A7J2YDDI.cjs');
|
|
11
|
+
var chunkN66HCGCY_cjs = require('./chunk-N66HCGCY.cjs');
|
|
15
12
|
var nanoid = require('nanoid');
|
|
16
13
|
|
|
17
|
-
// src/store/types.ts
|
|
18
|
-
var AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = 1e3;
|
|
19
|
-
var TRANSACTION_RUNTIME = chunkU5W4LKZV_cjs.typeGraphGlobalSymbol(
|
|
20
|
-
"transaction-runtime-v1"
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
// src/store/runtime-port.ts
|
|
24
|
-
var STORE_RUNTIME = chunkU5W4LKZV_cjs.typeGraphGlobalSymbol("store-runtime-v1");
|
|
25
|
-
function storeRuntime(store) {
|
|
26
|
-
const runtime = store[STORE_RUNTIME];
|
|
27
|
-
if (runtime === void 0) {
|
|
28
|
-
throw new TypeError(
|
|
29
|
-
"Cannot access this Store's runtime port. The Store may come from an incompatible TypeGraph version."
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
return runtime;
|
|
33
|
-
}
|
|
34
|
-
function storeBackend(store) {
|
|
35
|
-
return storeRuntime(store).backend;
|
|
36
|
-
}
|
|
37
|
-
function transactionBackend(transaction) {
|
|
38
|
-
const runtime = transaction[TRANSACTION_RUNTIME];
|
|
39
|
-
if (runtime === void 0) {
|
|
40
|
-
throw new TypeError(
|
|
41
|
-
"Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
return runtime.backend;
|
|
45
|
-
}
|
|
46
|
-
function transactionNodeOperationHookRunner(transaction) {
|
|
47
|
-
const runtime = transaction[TRANSACTION_RUNTIME];
|
|
48
|
-
if (runtime === void 0) {
|
|
49
|
-
throw new TypeError(
|
|
50
|
-
"Cannot access this transaction's runtime port. The transaction may come from an incompatible TypeGraph version."
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
return runtime.runNodeOperationHooks;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
14
|
// src/query/compiler/temporal.ts
|
|
57
15
|
var pinnedReadInstant;
|
|
58
16
|
function withPinnedReadInstant(emit) {
|
|
59
17
|
if (pinnedReadInstant !== void 0) return emit();
|
|
60
|
-
pinnedReadInstant =
|
|
18
|
+
pinnedReadInstant = chunkMCLYU6BN_cjs.nowIso();
|
|
61
19
|
try {
|
|
62
20
|
return emit();
|
|
63
21
|
} finally {
|
|
@@ -65,26 +23,27 @@ function withPinnedReadInstant(emit) {
|
|
|
65
23
|
}
|
|
66
24
|
}
|
|
67
25
|
function currentReadInstant() {
|
|
68
|
-
return
|
|
26
|
+
return chunkVCRRKBLN_cjs.sql`${pinnedReadInstant ?? chunkMCLYU6BN_cjs.nowIso()}`;
|
|
69
27
|
}
|
|
70
28
|
var CURRENT_READ_INSTANT_PLACEHOLDER = "__typegraph_current_read_instant__";
|
|
71
29
|
function currentReadInstantPlaceholder() {
|
|
72
|
-
return
|
|
30
|
+
return chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.placeholder(CURRENT_READ_INSTANT_PLACEHOLDER)}`;
|
|
73
31
|
}
|
|
74
32
|
function currentReadInstantFor(mode) {
|
|
75
33
|
return mode === "placeholder" ? currentReadInstantPlaceholder() : currentReadInstant();
|
|
76
34
|
}
|
|
77
35
|
function compileTemporalFilter(options) {
|
|
78
36
|
const { mode, asOf, tableAlias, currentTimestamp, recordedAsOf } = options;
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
37
|
+
const recorded = chunkMCLYU6BN_cjs.optionalRecordedInstantParts(recordedAsOf, "recordedAsOf");
|
|
38
|
+
const prefix = tableAlias ? chunkVCRRKBLN_cjs.sql.raw(`${tableAlias}.`) : chunkVCRRKBLN_cjs.sql.raw("");
|
|
39
|
+
const deletedAt = chunkVCRRKBLN_cjs.sql`${prefix}deleted_at`;
|
|
40
|
+
const validFrom = chunkVCRRKBLN_cjs.sql`${prefix}valid_from`;
|
|
41
|
+
const validTo = chunkVCRRKBLN_cjs.sql`${prefix}valid_to`;
|
|
83
42
|
const validFilter = (() => {
|
|
84
43
|
switch (mode) {
|
|
85
44
|
case "current": {
|
|
86
|
-
const now =
|
|
87
|
-
return
|
|
45
|
+
const now = recorded === void 0 ? currentTimestamp ?? currentReadInstant() : chunkVCRRKBLN_cjs.sql`${recorded.recordedAt}`;
|
|
46
|
+
return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${now}) AND (${validTo} IS NULL OR ${validTo} > ${now})`;
|
|
88
47
|
}
|
|
89
48
|
case "asOf": {
|
|
90
49
|
if (asOf === void 0) {
|
|
@@ -93,24 +52,21 @@ function compileTemporalFilter(options) {
|
|
|
93
52
|
);
|
|
94
53
|
}
|
|
95
54
|
const timestamp = asOf;
|
|
96
|
-
return
|
|
55
|
+
return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL AND (${validFrom} IS NULL OR ${validFrom} <= ${timestamp}) AND (${validTo} IS NULL OR ${validTo} > ${timestamp})`;
|
|
97
56
|
}
|
|
98
57
|
case "includeEnded": {
|
|
99
|
-
return
|
|
58
|
+
return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
|
|
100
59
|
}
|
|
101
60
|
case "includeTombstones": {
|
|
102
|
-
return
|
|
61
|
+
return chunkVCRRKBLN_cjs.sql.raw("1=1");
|
|
103
62
|
}
|
|
104
63
|
}
|
|
105
64
|
})();
|
|
106
|
-
if (
|
|
107
|
-
const recordedFrom =
|
|
108
|
-
const recordedTo =
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
"recordedAsOf"
|
|
112
|
-
).revision;
|
|
113
|
-
return chunkU5W4LKZV_cjs.sql`(${validFilter}) AND ${recordedFrom} <= ${recordedRevision} AND ${recordedRevision} < ${recordedTo}`;
|
|
65
|
+
if (recorded === void 0) return validFilter;
|
|
66
|
+
const recordedFrom = chunkVCRRKBLN_cjs.sql`${prefix}recorded_from`;
|
|
67
|
+
const recordedTo = chunkVCRRKBLN_cjs.sql`${prefix}recorded_to`;
|
|
68
|
+
const { revision } = recorded;
|
|
69
|
+
return chunkVCRRKBLN_cjs.sql`(${validFilter}) AND ${recordedFrom} <= ${revision} AND ${revision} < ${recordedTo}`;
|
|
114
70
|
}
|
|
115
71
|
function extractTemporalOptions(ast, tableAlias) {
|
|
116
72
|
return {
|
|
@@ -198,7 +154,7 @@ function predicate(expr) {
|
|
|
198
154
|
}
|
|
199
155
|
function param(name) {
|
|
200
156
|
if (name === CURRENT_READ_INSTANT_PLACEHOLDER) {
|
|
201
|
-
throw new
|
|
157
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
202
158
|
`Parameter name "${name}" is reserved for internal use`,
|
|
203
159
|
{ parameterName: name }
|
|
204
160
|
);
|
|
@@ -282,7 +238,7 @@ function inComparison(op, field, values) {
|
|
|
282
238
|
}
|
|
283
239
|
const literals = values.map((value) => {
|
|
284
240
|
if (isParameterRef(value)) {
|
|
285
|
-
throw new
|
|
241
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
286
242
|
`param("${value.name}") is not supported as an element of the ${op}() list`,
|
|
287
243
|
{ parameterName: value.name },
|
|
288
244
|
{
|
|
@@ -364,7 +320,7 @@ function createFulltextAccessor(alias, hasSearchableField) {
|
|
|
364
320
|
return {
|
|
365
321
|
matches: (query, k, options) => {
|
|
366
322
|
if (!hasSearchableField()) {
|
|
367
|
-
throw new
|
|
323
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
368
324
|
`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" })\`.`
|
|
369
325
|
);
|
|
370
326
|
}
|
|
@@ -379,7 +335,7 @@ function createFulltextAccessor(alias, hasSearchableField) {
|
|
|
379
335
|
}
|
|
380
336
|
function fulltextMatch(field, query, limit, options) {
|
|
381
337
|
if (!Number.isFinite(limit) || limit <= 0) {
|
|
382
|
-
throw new
|
|
338
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
383
339
|
`matches() limit must be a positive finite number, got ${String(limit)}`
|
|
384
340
|
);
|
|
385
341
|
}
|
|
@@ -499,7 +455,7 @@ function buildFieldBuilderForTypeInfo(field, typeInfo) {
|
|
|
499
455
|
}
|
|
500
456
|
}
|
|
501
457
|
function resolvePointerTypeInfo(typeInfo, pointer) {
|
|
502
|
-
return
|
|
458
|
+
return chunkRT5ZY4XA_cjs.resolveFieldTypeInfoAtJsonPointer(typeInfo, pointer);
|
|
503
459
|
}
|
|
504
460
|
function objectOp(op, field, pointer, value, options) {
|
|
505
461
|
const expr = {
|
|
@@ -522,8 +478,8 @@ function objectField(field, options) {
|
|
|
522
478
|
return {
|
|
523
479
|
...baseFieldBuilder(field),
|
|
524
480
|
get: (key) => {
|
|
525
|
-
const pointer =
|
|
526
|
-
const nestedPointer =
|
|
481
|
+
const pointer = chunkA7J2YDDI_cjs.jsonPointer([key]);
|
|
482
|
+
const nestedPointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, pointer);
|
|
527
483
|
const resolved = resolvePointerTypeInfo(options?.typeInfo, pointer);
|
|
528
484
|
const nestedRef = fieldRef(field.alias, field.path, {
|
|
529
485
|
jsonPointer: nestedPointer,
|
|
@@ -537,17 +493,17 @@ function objectField(field, options) {
|
|
|
537
493
|
return buildFieldBuilderForTypeInfo(nestedRef, resolved);
|
|
538
494
|
},
|
|
539
495
|
hasKey: (key) => {
|
|
540
|
-
const pointer =
|
|
496
|
+
const pointer = chunkA7J2YDDI_cjs.jsonPointer([key]);
|
|
541
497
|
resolvePointerTypeInfo(options?.typeInfo, pointer);
|
|
542
498
|
return objectOp("hasKey", field, pointer);
|
|
543
499
|
},
|
|
544
500
|
hasPath: (pointer) => {
|
|
545
|
-
const normalized =
|
|
501
|
+
const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
|
|
546
502
|
resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
547
503
|
return objectOp("hasPath", field, normalized);
|
|
548
504
|
},
|
|
549
505
|
pathEquals: (pointer, value) => {
|
|
550
|
-
const normalized =
|
|
506
|
+
const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
|
|
551
507
|
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
552
508
|
if (resolved && (resolved.valueType === "array" || resolved.valueType === "object")) {
|
|
553
509
|
throw new Error("pathEquals is only supported for scalar JSON values");
|
|
@@ -556,7 +512,7 @@ function objectField(field, options) {
|
|
|
556
512
|
return objectOp("pathEquals", field, normalized, value, predicateOptions);
|
|
557
513
|
},
|
|
558
514
|
pathContains: (pointer, value) => {
|
|
559
|
-
const normalized =
|
|
515
|
+
const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
|
|
560
516
|
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
561
517
|
if (resolved && resolved.valueType !== "array") {
|
|
562
518
|
throw new Error("pathContains is only supported for JSON array values");
|
|
@@ -571,7 +527,7 @@ function objectField(field, options) {
|
|
|
571
527
|
);
|
|
572
528
|
},
|
|
573
529
|
pathIsNull: (pointer) => {
|
|
574
|
-
const normalized =
|
|
530
|
+
const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
|
|
575
531
|
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
576
532
|
const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
|
|
577
533
|
return objectOp(
|
|
@@ -583,7 +539,7 @@ function objectField(field, options) {
|
|
|
583
539
|
);
|
|
584
540
|
},
|
|
585
541
|
pathIsNotNull: (pointer) => {
|
|
586
|
-
const normalized =
|
|
542
|
+
const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
|
|
587
543
|
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
588
544
|
const predicateOptions = resolved?.valueType === void 0 ? void 0 : { valueType: resolved.valueType };
|
|
589
545
|
return objectOp(
|
|
@@ -595,8 +551,8 @@ function objectField(field, options) {
|
|
|
595
551
|
);
|
|
596
552
|
},
|
|
597
553
|
field: (pointer) => {
|
|
598
|
-
const normalized =
|
|
599
|
-
const nestedPointer =
|
|
554
|
+
const normalized = chunkA7J2YDDI_cjs.normalizeJsonPointer(pointer);
|
|
555
|
+
const nestedPointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, normalized);
|
|
600
556
|
const resolved = resolvePointerTypeInfo(options?.typeInfo, normalized);
|
|
601
557
|
const nestedRef = fieldRef(field.alias, field.path, {
|
|
602
558
|
jsonPointer: nestedPointer,
|
|
@@ -652,7 +608,7 @@ function notInSubquery(field, subquery) {
|
|
|
652
608
|
function assertSingleColumnSubquery(subquery) {
|
|
653
609
|
const columnCount = getSubqueryColumnCount(subquery);
|
|
654
610
|
if (columnCount === 1) return;
|
|
655
|
-
throw new
|
|
611
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
656
612
|
`IN/NOT IN subquery must project exactly 1 column, but got ${columnCount}`,
|
|
657
613
|
{ subqueryColumnCount: columnCount },
|
|
658
614
|
{
|
|
@@ -665,7 +621,7 @@ function assertCompatibleSubqueryValueTypes(field, subquery) {
|
|
|
665
621
|
const subqueryValueType = getSingleSubqueryColumnValueType(subquery);
|
|
666
622
|
const resolvedValueType = fieldValueType ?? subqueryValueType;
|
|
667
623
|
if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
|
|
668
|
-
throw new
|
|
624
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
669
625
|
`IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
|
|
670
626
|
{ valueType: resolvedValueType },
|
|
671
627
|
{
|
|
@@ -676,7 +632,7 @@ function assertCompatibleSubqueryValueTypes(field, subquery) {
|
|
|
676
632
|
if (isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
|
|
677
633
|
return;
|
|
678
634
|
}
|
|
679
|
-
throw new
|
|
635
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
680
636
|
`IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
|
|
681
637
|
{
|
|
682
638
|
fieldValueType,
|
|
@@ -695,7 +651,7 @@ var RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK = {
|
|
|
695
651
|
};
|
|
696
652
|
function requireRecordedSchema(target) {
|
|
697
653
|
if (target.tableNames === void 0) {
|
|
698
|
-
throw new
|
|
654
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
699
655
|
"Recorded-time capture requires the backend to expose tableNames.",
|
|
700
656
|
{ dialect: target.dialect },
|
|
701
657
|
{
|
|
@@ -703,11 +659,11 @@ function requireRecordedSchema(target) {
|
|
|
703
659
|
}
|
|
704
660
|
);
|
|
705
661
|
}
|
|
706
|
-
return
|
|
662
|
+
return chunkNFCVHQ5P_cjs.createSqlSchema(target.tableNames);
|
|
707
663
|
}
|
|
708
664
|
function requireCaptureStatements(target) {
|
|
709
665
|
if (target.executeStatement === void 0) {
|
|
710
|
-
throw new
|
|
666
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
711
667
|
"Recorded-time capture requires backend.executeStatement support on the transaction backend.",
|
|
712
668
|
{ dialect: target.dialect },
|
|
713
669
|
{
|
|
@@ -718,10 +674,10 @@ function requireCaptureStatements(target) {
|
|
|
718
674
|
}
|
|
719
675
|
async function executeStatement(target, query) {
|
|
720
676
|
requireCaptureStatements(target);
|
|
721
|
-
await target.executeStatement(
|
|
677
|
+
await target.executeStatement(chunkVCRRKBLN_cjs.asCompiledStatementSql(query));
|
|
722
678
|
}
|
|
723
679
|
function unsupportedPostgresIsolationError(isolationLevel) {
|
|
724
|
-
return new
|
|
680
|
+
return new chunkNI72YOJB_cjs.ConfigurationError(
|
|
725
681
|
"Recorded-time capture on PostgreSQL requires read_committed isolation.",
|
|
726
682
|
{ isolationLevel: isolationLevel ?? "unknown" },
|
|
727
683
|
{
|
|
@@ -747,7 +703,7 @@ async function assertRecordedCaptureTransactionIsolation(target, options) {
|
|
|
747
703
|
if (!RECORDED_ISOLATION_REQUIRES_POSTGRES_CHECK[target.dialect]) return;
|
|
748
704
|
if (options?.accessMode === "read_only") return;
|
|
749
705
|
const rows = await target.execute(
|
|
750
|
-
|
|
706
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
751
707
|
SELECT current_setting('transaction_isolation') AS transaction_isolation
|
|
752
708
|
`)
|
|
753
709
|
);
|
|
@@ -758,7 +714,7 @@ async function assertRecordedCaptureTransactionIsolation(target, options) {
|
|
|
758
714
|
throw unsupportedPostgresIsolationError(isolationLevel);
|
|
759
715
|
}
|
|
760
716
|
function recordedCaptureRequiresCallbackTransactionError(details = {}) {
|
|
761
|
-
return new
|
|
717
|
+
return new chunkNI72YOJB_cjs.ConfigurationError(
|
|
762
718
|
"withTransaction() has no recorded-time capture flush point when history is enabled.",
|
|
763
719
|
{
|
|
764
720
|
...details,
|
|
@@ -770,7 +726,7 @@ function recordedCaptureRequiresCallbackTransactionError(details = {}) {
|
|
|
770
726
|
);
|
|
771
727
|
}
|
|
772
728
|
function historyUnsafeRawWriteError(surface) {
|
|
773
|
-
return new
|
|
729
|
+
return new chunkNI72YOJB_cjs.ConfigurationError(
|
|
774
730
|
`${surface} is not available when history capture is enabled because raw SQL writes bypass recorded-time capture.`,
|
|
775
731
|
{
|
|
776
732
|
code: "RECORDED_CAPTURE_RAW_SQL_DISABLED"
|
|
@@ -781,7 +737,7 @@ function historyUnsafeRawWriteError(surface) {
|
|
|
781
737
|
);
|
|
782
738
|
}
|
|
783
739
|
function revisionTrackingUnsafeRawWriteError(surface) {
|
|
784
|
-
return new
|
|
740
|
+
return new chunkNI72YOJB_cjs.ConfigurationError(
|
|
785
741
|
`${surface} is not available when revision tracking is enabled because raw SQL writes bypass the revision anchor.`,
|
|
786
742
|
{
|
|
787
743
|
code: "REVISION_TRACKING_RAW_SQL_DISABLED"
|
|
@@ -817,7 +773,7 @@ function rawWriteGuards(target, prefix) {
|
|
|
817
773
|
}
|
|
818
774
|
function assertCapturableBackend(backend) {
|
|
819
775
|
if (!backend.capabilities.transactions) {
|
|
820
|
-
throw new
|
|
776
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
821
777
|
"history: true requires a backend with transaction support.",
|
|
822
778
|
{ dialect: backend.dialect },
|
|
823
779
|
{
|
|
@@ -826,7 +782,7 @@ function assertCapturableBackend(backend) {
|
|
|
826
782
|
);
|
|
827
783
|
}
|
|
828
784
|
if (backend.executeStatement === void 0) {
|
|
829
|
-
throw new
|
|
785
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
830
786
|
"history: true requires a backend that supports executeStatement.",
|
|
831
787
|
{ dialect: backend.dialect },
|
|
832
788
|
{
|
|
@@ -835,7 +791,7 @@ function assertCapturableBackend(backend) {
|
|
|
835
791
|
);
|
|
836
792
|
}
|
|
837
793
|
if (backend.capabilities.returning === false) {
|
|
838
|
-
throw new
|
|
794
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
839
795
|
"history: true requires a backend that supports UPDATE \u2026 RETURNING.",
|
|
840
796
|
{ dialect: backend.dialect },
|
|
841
797
|
{
|
|
@@ -844,7 +800,7 @@ function assertCapturableBackend(backend) {
|
|
|
844
800
|
);
|
|
845
801
|
}
|
|
846
802
|
if (backend.tableNames === void 0) {
|
|
847
|
-
throw new
|
|
803
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
848
804
|
"history: true requires a backend that exposes tableNames.",
|
|
849
805
|
{ dialect: backend.dialect },
|
|
850
806
|
{
|
|
@@ -855,7 +811,7 @@ function assertCapturableBackend(backend) {
|
|
|
855
811
|
}
|
|
856
812
|
function assertRevisionTrackableBackend(backend) {
|
|
857
813
|
if (!backend.capabilities.transactions) {
|
|
858
|
-
throw new
|
|
814
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
859
815
|
"revisionTracking: true requires a backend with transaction support.",
|
|
860
816
|
{ dialect: backend.dialect },
|
|
861
817
|
{
|
|
@@ -864,7 +820,7 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
864
820
|
);
|
|
865
821
|
}
|
|
866
822
|
if (backend.executeStatement === void 0) {
|
|
867
|
-
throw new
|
|
823
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
868
824
|
"revisionTracking: true requires a backend that supports executeStatement.",
|
|
869
825
|
{ dialect: backend.dialect },
|
|
870
826
|
{
|
|
@@ -873,7 +829,7 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
873
829
|
);
|
|
874
830
|
}
|
|
875
831
|
if (backend.tableNames === void 0) {
|
|
876
|
-
throw new
|
|
832
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
877
833
|
"revisionTracking: true requires a backend that exposes tableNames.",
|
|
878
834
|
{ dialect: backend.dialect },
|
|
879
835
|
{
|
|
@@ -882,7 +838,7 @@ function assertRevisionTrackableBackend(backend) {
|
|
|
882
838
|
);
|
|
883
839
|
}
|
|
884
840
|
if (backend.ensureRevisionOriginsTable === void 0) {
|
|
885
|
-
throw new
|
|
841
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
886
842
|
"revisionTracking: true requires a backend that can bootstrap revision origins.",
|
|
887
843
|
{ dialect: backend.dialect },
|
|
888
844
|
{
|
|
@@ -902,7 +858,7 @@ var USES_RECORDED_GRAPH_ADVISORY_LOCK = {
|
|
|
902
858
|
sqlite: false
|
|
903
859
|
};
|
|
904
860
|
function graphAdvisoryLockSql(namespace, graphId) {
|
|
905
|
-
return
|
|
861
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
906
862
|
SELECT pg_advisory_xact_lock(
|
|
907
863
|
hashtext(${namespace}),
|
|
908
864
|
hashtext(${graphId})
|
|
@@ -934,7 +890,7 @@ function registerRecordedGraphLockMemo(backend, memo) {
|
|
|
934
890
|
}
|
|
935
891
|
async function acquireRecordedGraphWriteLock(target, graphId) {
|
|
936
892
|
await target.execute(
|
|
937
|
-
|
|
893
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(recordedGraphWriteAdvisoryLockSql(graphId))
|
|
938
894
|
);
|
|
939
895
|
}
|
|
940
896
|
async function lockRecordedGraphWrite(target, graphId, memo) {
|
|
@@ -960,7 +916,7 @@ async function lockRecordedGraphWrite(target, graphId, memo) {
|
|
|
960
916
|
return graphWriteLockEvidence();
|
|
961
917
|
}
|
|
962
918
|
function failInvalidClock(value, cause) {
|
|
963
|
-
throw new
|
|
919
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
964
920
|
"Recorded clock row contained an invalid revision or wall time",
|
|
965
921
|
{ value },
|
|
966
922
|
{
|
|
@@ -971,13 +927,13 @@ function failInvalidClock(value, cause) {
|
|
|
971
927
|
}
|
|
972
928
|
function recordedClockRevision(value) {
|
|
973
929
|
const revision = typeof value === "bigint" ? Number(value) : typeof value === "string" && /^\d+$/.test(value) ? Number(value) : value;
|
|
974
|
-
if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < RECORDED_MIN_REVISION || revision >=
|
|
930
|
+
if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < RECORDED_MIN_REVISION || revision >= chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION) {
|
|
975
931
|
return failInvalidClock(value);
|
|
976
932
|
}
|
|
977
933
|
return revision;
|
|
978
934
|
}
|
|
979
935
|
function recordedClockWallTime(value) {
|
|
980
|
-
return
|
|
936
|
+
return chunkMCLYU6BN_cjs.canonicalizeDatabaseTimestamp(value) ?? failInvalidClock(value);
|
|
981
937
|
}
|
|
982
938
|
function recordedClockParts(row) {
|
|
983
939
|
const revision = recordedClockRevision(row.revision);
|
|
@@ -985,7 +941,7 @@ function recordedClockParts(row) {
|
|
|
985
941
|
return { revision, recordedAt: recordedClockWallTime(row.recorded_at) };
|
|
986
942
|
}
|
|
987
943
|
function nextRecordedCommitParts(previous) {
|
|
988
|
-
const wallTime =
|
|
944
|
+
const wallTime = chunkMCLYU6BN_cjs.nowIso();
|
|
989
945
|
if (previous === void 0) {
|
|
990
946
|
return { revision: 1, recordedAt: wallTime };
|
|
991
947
|
}
|
|
@@ -1003,11 +959,11 @@ function nonDecreasingWallTime(current, previous) {
|
|
|
1003
959
|
}
|
|
1004
960
|
async function readRecordedClock(target, schema, graphId) {
|
|
1005
961
|
const parts = await readRecordedClockParts(target, schema, graphId);
|
|
1006
|
-
return parts === void 0 ? void 0 :
|
|
962
|
+
return parts === void 0 ? void 0 : chunkMCLYU6BN_cjs.createRecordedInstant(parts.revision, parts.recordedAt);
|
|
1007
963
|
}
|
|
1008
964
|
async function readRecordedClockParts(target, schema, graphId) {
|
|
1009
965
|
const rows = await target.execute(
|
|
1010
|
-
|
|
966
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
1011
967
|
SELECT revision, recorded_at
|
|
1012
968
|
FROM ${schema.recordedClockTable}
|
|
1013
969
|
WHERE graph_id = ${graphId}
|
|
@@ -1018,7 +974,7 @@ async function readRecordedClockParts(target, schema, graphId) {
|
|
|
1018
974
|
}
|
|
1019
975
|
async function readRevisionOrigin(target, schema, graphId) {
|
|
1020
976
|
const rows = await target.execute(
|
|
1021
|
-
|
|
977
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
1022
978
|
SELECT origin
|
|
1023
979
|
FROM ${schema.revisionOriginsTable}
|
|
1024
980
|
WHERE graph_id = ${graphId}
|
|
@@ -1027,7 +983,7 @@ async function readRevisionOrigin(target, schema, graphId) {
|
|
|
1027
983
|
const first = rows[0];
|
|
1028
984
|
if (first === void 0) return void 0;
|
|
1029
985
|
if (typeof first.origin !== "string" || first.origin.length === 0) {
|
|
1030
|
-
throw new
|
|
986
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
1031
987
|
"Revision origin row contained an invalid origin",
|
|
1032
988
|
{ graphId, origin: first.origin }
|
|
1033
989
|
);
|
|
@@ -1037,7 +993,7 @@ async function readRevisionOrigin(target, schema, graphId) {
|
|
|
1037
993
|
async function ensureRevisionOrigin(target, schema, graphId) {
|
|
1038
994
|
const ensureTable = target.ensureRevisionOriginsTable;
|
|
1039
995
|
if (ensureTable === void 0) {
|
|
1040
|
-
throw new
|
|
996
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
1041
997
|
"Revision tracking requires a backend that can bootstrap revision origins.",
|
|
1042
998
|
{ dialect: target.dialect },
|
|
1043
999
|
{
|
|
@@ -1050,7 +1006,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
|
|
|
1050
1006
|
if (existing !== void 0) return existing;
|
|
1051
1007
|
await executeStatement(
|
|
1052
1008
|
target,
|
|
1053
|
-
|
|
1009
|
+
chunkVCRRKBLN_cjs.sql`
|
|
1054
1010
|
INSERT INTO ${schema.revisionOriginsTable} (graph_id, origin)
|
|
1055
1011
|
VALUES (${graphId}, ${generateId()})
|
|
1056
1012
|
ON CONFLICT (graph_id) DO NOTHING
|
|
@@ -1058,7 +1014,7 @@ async function ensureRevisionOrigin(target, schema, graphId) {
|
|
|
1058
1014
|
);
|
|
1059
1015
|
const origin = await readRevisionOrigin(target, schema, graphId);
|
|
1060
1016
|
if (origin !== void 0) return origin;
|
|
1061
|
-
throw new
|
|
1017
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
1062
1018
|
"Revision origin was not persisted after initialization.",
|
|
1063
1019
|
{ graphId, dialect: target.dialect }
|
|
1064
1020
|
);
|
|
@@ -1066,19 +1022,31 @@ async function ensureRevisionOrigin(target, schema, graphId) {
|
|
|
1066
1022
|
async function writeRecordedClock(target, schema, graphId, parts) {
|
|
1067
1023
|
await executeStatement(
|
|
1068
1024
|
target,
|
|
1069
|
-
|
|
1025
|
+
chunkVCRRKBLN_cjs.sql`
|
|
1070
1026
|
INSERT INTO ${schema.recordedClockTable} (graph_id, revision, recorded_at)
|
|
1071
1027
|
VALUES (${graphId}, ${parts.revision}, ${parts.recordedAt})
|
|
1072
1028
|
ON CONFLICT (graph_id) DO UPDATE
|
|
1073
|
-
SET revision =
|
|
1029
|
+
SET revision = excluded.revision, recorded_at = excluded.recorded_at
|
|
1030
|
+
WHERE ${schema.recordedClockTable}.revision < excluded.revision
|
|
1074
1031
|
`
|
|
1075
1032
|
);
|
|
1076
1033
|
}
|
|
1034
|
+
async function assertRecordedClockAdvanced(target, schema, graphId, revision) {
|
|
1035
|
+
const stored = await readRecordedClockParts(target, schema, graphId);
|
|
1036
|
+
if (stored?.revision === revision) return;
|
|
1037
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
1038
|
+
"Recorded commit allocation was refused: the supplied previous revision was stale, so the write would have moved the graph's revision clock backward.",
|
|
1039
|
+
{ graphId, allocatedRevision: revision, storedRevision: stored?.revision },
|
|
1040
|
+
{
|
|
1041
|
+
suggestion: "Read the previous revision inside the same transaction that allocates the commit (omit previousRevision), or hold the per-graph write lock across the read and the allocation."
|
|
1042
|
+
}
|
|
1043
|
+
);
|
|
1044
|
+
}
|
|
1077
1045
|
async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
|
|
1078
1046
|
switch (target.dialect) {
|
|
1079
1047
|
case "postgres": {
|
|
1080
1048
|
await target.execute(
|
|
1081
|
-
|
|
1049
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(recordedClockAdvisoryLockSql(graphId))
|
|
1082
1050
|
);
|
|
1083
1051
|
return;
|
|
1084
1052
|
}
|
|
@@ -1086,7 +1054,7 @@ async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
|
|
|
1086
1054
|
if (ownsWriteLock) return;
|
|
1087
1055
|
await executeStatement(
|
|
1088
1056
|
target,
|
|
1089
|
-
|
|
1057
|
+
chunkVCRRKBLN_cjs.sql`
|
|
1090
1058
|
INSERT INTO ${schema.recordedClockTable} (graph_id, revision, recorded_at)
|
|
1091
1059
|
VALUES (${graphId}, ${RECORDED_MIN_REVISION}, ${RECORDED_MIN_TIME})
|
|
1092
1060
|
ON CONFLICT (graph_id) DO UPDATE SET revision = revision
|
|
@@ -1101,19 +1069,22 @@ async function lockRecordedClock(target, schema, graphId, ownsWriteLock) {
|
|
|
1101
1069
|
}
|
|
1102
1070
|
async function allocateRecordedCommit(target, schema, graphId, ownsWriteLock, previousRevision) {
|
|
1103
1071
|
await lockRecordedClock(target, schema, graphId, ownsWriteLock);
|
|
1104
|
-
const previous = previousRevision === void 0 ? await readRecordedClockParts(target, schema, graphId) :
|
|
1072
|
+
const previous = previousRevision === void 0 ? await readRecordedClockParts(target, schema, graphId) : chunkMCLYU6BN_cjs.parseRecordedInstant(previousRevision, "previous recorded revision");
|
|
1105
1073
|
const { revision, recordedAt } = nextRecordedCommitParts(previous);
|
|
1106
|
-
if (revision >=
|
|
1107
|
-
throw new
|
|
1108
|
-
`Recorded commit clock reached the open revision sentinel ${
|
|
1074
|
+
if (revision >= chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION) {
|
|
1075
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
1076
|
+
`Recorded commit clock reached the open revision sentinel ${chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION}`,
|
|
1109
1077
|
{ graphId, revision },
|
|
1110
1078
|
{
|
|
1111
1079
|
suggestion: "Start a new graph before exhausting the per-graph recorded revision space."
|
|
1112
1080
|
}
|
|
1113
1081
|
);
|
|
1114
1082
|
}
|
|
1115
|
-
const instant =
|
|
1083
|
+
const instant = chunkMCLYU6BN_cjs.createRecordedInstant(revision, recordedAt);
|
|
1116
1084
|
await writeRecordedClock(target, schema, graphId, { revision, recordedAt });
|
|
1085
|
+
if (previousRevision !== void 0) {
|
|
1086
|
+
await assertRecordedClockAdvanced(target, schema, graphId, revision);
|
|
1087
|
+
}
|
|
1117
1088
|
return { instant, revision, recordedAt };
|
|
1118
1089
|
}
|
|
1119
1090
|
async function advanceRevisionClock(target, schema, graphId, ownsWriteLock, previousRevision) {
|
|
@@ -1175,6 +1146,7 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
|
1175
1146
|
"commitSchemaVersion",
|
|
1176
1147
|
"commitSchemaVersionIfKindsEmpty",
|
|
1177
1148
|
"lockSchemaVersionForWrite",
|
|
1149
|
+
"commitSchemaVersionWithPreflight",
|
|
1178
1150
|
"setActiveVersion",
|
|
1179
1151
|
"schemaWriteTransaction",
|
|
1180
1152
|
"upsertEmbedding",
|
|
@@ -1214,7 +1186,11 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
|
1214
1186
|
"deleteVectorSlotContribution",
|
|
1215
1187
|
"verifyContributions",
|
|
1216
1188
|
"repairContributions",
|
|
1189
|
+
"probeContributions",
|
|
1190
|
+
"rebuildContribution",
|
|
1217
1191
|
"ensureFulltextTable",
|
|
1192
|
+
"ensureIdentityTables",
|
|
1193
|
+
"identityTableDdl",
|
|
1218
1194
|
"getReconciliationMarker",
|
|
1219
1195
|
"setReconciliationMarker",
|
|
1220
1196
|
"clearGraph",
|
|
@@ -1235,7 +1211,9 @@ function projectBackendMembers(backend, keys) {
|
|
|
1235
1211
|
if (!Reflect.has(backend, key)) return [];
|
|
1236
1212
|
return [[key, Reflect.get(backend, key)]];
|
|
1237
1213
|
});
|
|
1238
|
-
|
|
1214
|
+
const projection = Object.fromEntries(entries);
|
|
1215
|
+
chunkXBYVV3MP_cjs.inheritSerializedTransactionResource(projection, backend);
|
|
1216
|
+
return projection;
|
|
1239
1217
|
}
|
|
1240
1218
|
function createGraphBackendProjection(backend) {
|
|
1241
1219
|
return projectBackendMembers(backend, GRAPH_BACKEND_PROJECTION_KEYS);
|
|
@@ -1245,17 +1223,17 @@ function createGraphBackendProjection(backend) {
|
|
|
1245
1223
|
function nodeInsertDispatch(backend) {
|
|
1246
1224
|
return {
|
|
1247
1225
|
one: (params) => backend.insertNode(params),
|
|
1248
|
-
oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) =>
|
|
1249
|
-
batch: backend.insertNodesBatch === void 0 ? void 0 : (params) =>
|
|
1250
|
-
batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) =>
|
|
1226
|
+
oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertNodeNoReturn)(params),
|
|
1227
|
+
batch: backend.insertNodesBatch === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertNodesBatch)(params),
|
|
1228
|
+
batchReturning: backend.insertNodesBatchReturning === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertNodesBatchReturning)(params)
|
|
1251
1229
|
};
|
|
1252
1230
|
}
|
|
1253
1231
|
function edgeInsertDispatch(backend) {
|
|
1254
1232
|
return {
|
|
1255
1233
|
one: (params) => backend.insertEdge(params),
|
|
1256
|
-
oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) =>
|
|
1257
|
-
batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) =>
|
|
1258
|
-
batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) =>
|
|
1234
|
+
oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertEdgeNoReturn)(params),
|
|
1235
|
+
batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertEdgesBatch)(params),
|
|
1236
|
+
batchReturning: backend.insertEdgesBatchReturning === void 0 ? void 0 : (params) => chunkN66HCGCY_cjs.requireDefined(backend.insertEdgesBatchReturning)(params)
|
|
1259
1237
|
};
|
|
1260
1238
|
}
|
|
1261
1239
|
async function runInsertNoReturn(dispatch, params) {
|
|
@@ -1276,6 +1254,7 @@ async function runInsertBatch(dispatch, params) {
|
|
|
1276
1254
|
}
|
|
1277
1255
|
}
|
|
1278
1256
|
async function runInsertBatchReturning(dispatch, params) {
|
|
1257
|
+
if (params.length === 0) return [];
|
|
1279
1258
|
if (dispatch.batchReturning !== void 0) {
|
|
1280
1259
|
return dispatch.batchReturning(params);
|
|
1281
1260
|
}
|
|
@@ -1286,6 +1265,174 @@ async function runInsertBatchReturning(dispatch, params) {
|
|
|
1286
1265
|
return rows;
|
|
1287
1266
|
}
|
|
1288
1267
|
|
|
1268
|
+
// src/identity/historical-sql.ts
|
|
1269
|
+
var IDENTITY_ASSERTION_COLUMNS = chunkVCRRKBLN_cjs.sql.raw(
|
|
1270
|
+
[
|
|
1271
|
+
"graph_id",
|
|
1272
|
+
"id",
|
|
1273
|
+
"rel",
|
|
1274
|
+
"a_kind",
|
|
1275
|
+
"a_id",
|
|
1276
|
+
"b_kind",
|
|
1277
|
+
"b_id",
|
|
1278
|
+
"valid_from",
|
|
1279
|
+
"valid_to",
|
|
1280
|
+
"created_at",
|
|
1281
|
+
"updated_at",
|
|
1282
|
+
"deleted_at",
|
|
1283
|
+
"ended_by_kind",
|
|
1284
|
+
"ended_by_id"
|
|
1285
|
+
].join(", ")
|
|
1286
|
+
);
|
|
1287
|
+
function identitySqlCoordinate(coordinate, currentInstant) {
|
|
1288
|
+
return {
|
|
1289
|
+
validMode: coordinate?.valid.mode ?? "current",
|
|
1290
|
+
validAsOf: coordinate?.valid.asOf,
|
|
1291
|
+
recorded: chunkMCLYU6BN_cjs.optionalRecordedInstantParts(
|
|
1292
|
+
coordinate?.recorded?.asOf,
|
|
1293
|
+
"recorded.asOf"
|
|
1294
|
+
),
|
|
1295
|
+
currentInstant: typeof currentInstant === "string" ? chunkVCRRKBLN_cjs.sql`${currentInstant}` : currentInstant
|
|
1296
|
+
};
|
|
1297
|
+
}
|
|
1298
|
+
function validityInstant(coordinate) {
|
|
1299
|
+
if (coordinate.validMode === "asOf" && coordinate.validAsOf !== void 0) {
|
|
1300
|
+
return chunkVCRRKBLN_cjs.sql`${coordinate.validAsOf}`;
|
|
1301
|
+
}
|
|
1302
|
+
if (coordinate.recorded !== void 0) {
|
|
1303
|
+
return chunkVCRRKBLN_cjs.sql`${coordinate.recorded.recordedAt}`;
|
|
1304
|
+
}
|
|
1305
|
+
return coordinate.currentInstant;
|
|
1306
|
+
}
|
|
1307
|
+
function qualifiedColumn(alias, column) {
|
|
1308
|
+
return chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.identifier(alias)}.${chunkVCRRKBLN_cjs.sql.identifier(column)}`;
|
|
1309
|
+
}
|
|
1310
|
+
function identityNodeVisibilitySql(coordinate, alias) {
|
|
1311
|
+
const deletedAt = qualifiedColumn(alias, "deleted_at");
|
|
1312
|
+
if (coordinate.validMode === "includeTombstones") return chunkVCRRKBLN_cjs.sql`1 = 1`;
|
|
1313
|
+
if (coordinate.validMode === "includeEnded") {
|
|
1314
|
+
return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
|
|
1315
|
+
}
|
|
1316
|
+
const validFrom = qualifiedColumn(alias, "valid_from");
|
|
1317
|
+
const validTo = qualifiedColumn(alias, "valid_to");
|
|
1318
|
+
const instant = validityInstant(coordinate);
|
|
1319
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
1320
|
+
${deletedAt} IS NULL
|
|
1321
|
+
AND (${validFrom} IS NULL OR ${validFrom} <= ${instant})
|
|
1322
|
+
AND (${validTo} IS NULL OR ${validTo} > ${instant})
|
|
1323
|
+
`;
|
|
1324
|
+
}
|
|
1325
|
+
function structuralFoldVisibilitySql(coordinate, alias) {
|
|
1326
|
+
const deletedAt = qualifiedColumn(alias, "deleted_at");
|
|
1327
|
+
if (coordinate.recorded !== void 0) return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
|
|
1328
|
+
if (coordinate.validMode !== "asOf") return chunkVCRRKBLN_cjs.sql`${deletedAt} IS NULL`;
|
|
1329
|
+
const createdAt = qualifiedColumn(alias, "created_at");
|
|
1330
|
+
const instant = validityInstant(coordinate);
|
|
1331
|
+
return chunkVCRRKBLN_cjs.sql`${createdAt} <= ${instant} AND (${deletedAt} IS NULL OR ${deletedAt} > ${instant})`;
|
|
1332
|
+
}
|
|
1333
|
+
function identityNodeSnapshotSource(schema, graphId, coordinate) {
|
|
1334
|
+
const table = coordinate.recorded === void 0 ? schema.nodesTable : schema.recordedNodesTable;
|
|
1335
|
+
const recordedFilter = coordinate.recorded === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`
|
|
1336
|
+
AND recorded_from <= ${coordinate.recorded.revision}
|
|
1337
|
+
AND recorded_to > ${coordinate.recorded.revision}
|
|
1338
|
+
`;
|
|
1339
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
1340
|
+
SELECT kind, id, valid_from, valid_to, created_at, deleted_at
|
|
1341
|
+
FROM ${table}
|
|
1342
|
+
WHERE graph_id = ${graphId}
|
|
1343
|
+
${recordedFilter}
|
|
1344
|
+
`;
|
|
1345
|
+
}
|
|
1346
|
+
function identityAssertionSnapshotSource(schema, graphId, coordinate, relation) {
|
|
1347
|
+
const table = coordinate.recorded === void 0 ? schema.identityAssertionsTable : schema.recordedIdentityAssertionsTable;
|
|
1348
|
+
const recordedFilter = coordinate.recorded === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`
|
|
1349
|
+
AND recorded_from <= ${coordinate.recorded.revision}
|
|
1350
|
+
AND recorded_to > ${coordinate.recorded.revision}
|
|
1351
|
+
`;
|
|
1352
|
+
const relationFilter = relation === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`AND rel = ${relation}`;
|
|
1353
|
+
const instant = validityInstant(coordinate);
|
|
1354
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
1355
|
+
SELECT ${IDENTITY_ASSERTION_COLUMNS}
|
|
1356
|
+
FROM ${table}
|
|
1357
|
+
WHERE graph_id = ${graphId}
|
|
1358
|
+
${recordedFilter}
|
|
1359
|
+
AND deleted_at IS NULL
|
|
1360
|
+
${relationFilter}
|
|
1361
|
+
AND valid_from <= ${instant}
|
|
1362
|
+
AND (valid_to IS NULL OR valid_to > ${instant})
|
|
1363
|
+
`;
|
|
1364
|
+
}
|
|
1365
|
+
function historicalIdentityReconstructionCtes(input) {
|
|
1366
|
+
const nodes = identityNodeSnapshotSource(
|
|
1367
|
+
input.schema,
|
|
1368
|
+
input.graphId,
|
|
1369
|
+
input.coordinate
|
|
1370
|
+
);
|
|
1371
|
+
const assertions = identityAssertionSnapshotSource(
|
|
1372
|
+
input.schema,
|
|
1373
|
+
input.graphId,
|
|
1374
|
+
input.coordinate,
|
|
1375
|
+
"same"
|
|
1376
|
+
);
|
|
1377
|
+
const sameIdEdges = input.sameIdAcrossKinds === "fold" ? chunkVCRRKBLN_cjs.sql`
|
|
1378
|
+
UNION ALL
|
|
1379
|
+
SELECT left_node.kind, left_node.id, right_node.kind, right_node.id
|
|
1380
|
+
FROM node_snapshot left_node
|
|
1381
|
+
JOIN node_snapshot right_node
|
|
1382
|
+
ON right_node.id = left_node.id
|
|
1383
|
+
AND right_node.kind <> left_node.kind
|
|
1384
|
+
WHERE ${structuralFoldVisibilitySql(input.coordinate, "left_node")}
|
|
1385
|
+
AND ${structuralFoldVisibilitySql(input.coordinate, "right_node")}
|
|
1386
|
+
` : chunkVCRRKBLN_cjs.sql``;
|
|
1387
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
1388
|
+
node_snapshot(kind, id, valid_from, valid_to, created_at, deleted_at) AS (
|
|
1389
|
+
${nodes}
|
|
1390
|
+
),
|
|
1391
|
+
same_assertions(a_kind, a_id, b_kind, b_id) AS (
|
|
1392
|
+
SELECT a_kind, a_id, b_kind, b_id FROM (${assertions}) identity_assertions
|
|
1393
|
+
),
|
|
1394
|
+
identity_edges(a_kind, a_id, b_kind, b_id) AS (
|
|
1395
|
+
SELECT a_kind, a_id, b_kind, b_id FROM same_assertions
|
|
1396
|
+
UNION ALL
|
|
1397
|
+
SELECT b_kind, b_id, a_kind, a_id FROM same_assertions
|
|
1398
|
+
${sameIdEdges}
|
|
1399
|
+
),
|
|
1400
|
+
seeds(seed_kind, seed_id) AS (
|
|
1401
|
+
${input.seedSource}
|
|
1402
|
+
),
|
|
1403
|
+
identity_members(seed_kind, seed_id, kind, id) AS (
|
|
1404
|
+
SELECT seeds.seed_kind, seeds.seed_id, seeds.seed_kind, seeds.seed_id
|
|
1405
|
+
FROM seeds
|
|
1406
|
+
JOIN node_snapshot n
|
|
1407
|
+
ON n.kind = seeds.seed_kind AND n.id = seeds.seed_id
|
|
1408
|
+
WHERE ${identityNodeVisibilitySql(input.coordinate, "n")}
|
|
1409
|
+
UNION
|
|
1410
|
+
SELECT member.seed_kind, member.seed_id, edge.b_kind, edge.b_id
|
|
1411
|
+
FROM identity_members member
|
|
1412
|
+
JOIN identity_edges edge
|
|
1413
|
+
ON edge.a_kind = member.kind
|
|
1414
|
+
AND edge.a_id = member.id
|
|
1415
|
+
)
|
|
1416
|
+
`;
|
|
1417
|
+
}
|
|
1418
|
+
var IDENTITY_PEER_CLASS_COLUMNS = chunkVCRRKBLN_cjs.sql.raw(
|
|
1419
|
+
["seed_kind", "seed_id", "kind", "id"].join(", ")
|
|
1420
|
+
);
|
|
1421
|
+
function historicalIdentityPeerClassQuery(input) {
|
|
1422
|
+
const reconstruction = historicalIdentityReconstructionCtes({
|
|
1423
|
+
...input,
|
|
1424
|
+
seedSource: chunkVCRRKBLN_cjs.sql`SELECT DISTINCT a_kind, a_id FROM identity_edges`
|
|
1425
|
+
});
|
|
1426
|
+
return chunkVCRRKBLN_cjs.sql`
|
|
1427
|
+
WITH RECURSIVE
|
|
1428
|
+
${reconstruction}
|
|
1429
|
+
SELECT member.seed_kind, member.seed_id, member.kind, member.id
|
|
1430
|
+
FROM identity_members member
|
|
1431
|
+
JOIN node_snapshot n ON n.kind = member.kind AND n.id = member.id
|
|
1432
|
+
WHERE ${identityNodeVisibilitySql(input.coordinate, "n")}
|
|
1433
|
+
`;
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1289
1436
|
// src/query/compiler/predicates.ts
|
|
1290
1437
|
var COMPARISON_OP_SQL = {
|
|
1291
1438
|
eq: "=",
|
|
@@ -1299,35 +1446,35 @@ function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
|
|
|
1299
1446
|
if (cteColumnPrefix !== void 0) {
|
|
1300
1447
|
const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
|
|
1301
1448
|
if (field.path.length === 1 && field.path[0] === "id") {
|
|
1302
|
-
return
|
|
1449
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}id`);
|
|
1303
1450
|
}
|
|
1304
1451
|
if (field.path.length === 1 && field.path[0] === "kind") {
|
|
1305
|
-
return
|
|
1452
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}kind`);
|
|
1306
1453
|
}
|
|
1307
1454
|
if (field.path.length > 0 && field.path[0] === "props") {
|
|
1308
|
-
return
|
|
1455
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}props`);
|
|
1309
1456
|
}
|
|
1310
|
-
return
|
|
1457
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
|
|
1311
1458
|
}
|
|
1312
1459
|
const prefix = field.alias;
|
|
1313
1460
|
const qualifier = cteAlias ? `${cteAlias}.` : "";
|
|
1314
1461
|
if (field.path.length === 1 && field.path[0] === "id") {
|
|
1315
|
-
return
|
|
1462
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_id`);
|
|
1316
1463
|
}
|
|
1317
1464
|
if (field.path.length === 1 && field.path[0] === "kind") {
|
|
1318
|
-
return
|
|
1465
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_kind`);
|
|
1319
1466
|
}
|
|
1320
1467
|
if (field.path.length > 0 && field.path[0] === "props") {
|
|
1321
|
-
return
|
|
1468
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_props`);
|
|
1322
1469
|
}
|
|
1323
|
-
return
|
|
1470
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
|
|
1324
1471
|
}
|
|
1325
1472
|
function getFieldPointer(field) {
|
|
1326
1473
|
if (field.jsonPointer !== void 0) {
|
|
1327
1474
|
return field.jsonPointer;
|
|
1328
1475
|
}
|
|
1329
1476
|
if (field.path.length > 1 && field.path[0] === "props") {
|
|
1330
|
-
return
|
|
1477
|
+
return chunkA7J2YDDI_cjs.jsonPointer(field.path.slice(1));
|
|
1331
1478
|
}
|
|
1332
1479
|
return void 0;
|
|
1333
1480
|
}
|
|
@@ -1406,7 +1553,7 @@ function resolveLiteralValueTypes(literals) {
|
|
|
1406
1553
|
}
|
|
1407
1554
|
}
|
|
1408
1555
|
if (resolved.size > 1) {
|
|
1409
|
-
throw new
|
|
1556
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1410
1557
|
"Mixed literal value types are not supported in predicates",
|
|
1411
1558
|
{ valueTypes: [...resolved] }
|
|
1412
1559
|
);
|
|
@@ -1440,9 +1587,9 @@ function convertValueForSql(value, dialect) {
|
|
|
1440
1587
|
}
|
|
1441
1588
|
function compileStringPattern(op, pattern) {
|
|
1442
1589
|
const escaped = pattern.replaceAll(
|
|
1443
|
-
|
|
1444
|
-
`${
|
|
1445
|
-
).replaceAll("%", `${
|
|
1590
|
+
chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER,
|
|
1591
|
+
`${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}`
|
|
1592
|
+
).replaceAll("%", `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}%`).replaceAll("_", `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}_`);
|
|
1446
1593
|
switch (op) {
|
|
1447
1594
|
case "contains": {
|
|
1448
1595
|
return `%${escaped}%`;
|
|
@@ -1463,22 +1610,22 @@ function compileStringPattern(op, pattern) {
|
|
|
1463
1610
|
}
|
|
1464
1611
|
}
|
|
1465
1612
|
function escapeLikePatternParameter(parameter) {
|
|
1466
|
-
const doubledEscape = `${
|
|
1467
|
-
return
|
|
1613
|
+
const doubledEscape = `${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}`;
|
|
1614
|
+
return chunkVCRRKBLN_cjs.sql`REPLACE(REPLACE(REPLACE(${parameter}, ${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}, ${doubledEscape}), '%', ${`${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}%`}), '_', ${`${chunkVCRRKBLN_cjs.LIKE_ESCAPE_CHARACTER}_`})`;
|
|
1468
1615
|
}
|
|
1469
1616
|
function compileParameterizedStringPattern(op, parameter) {
|
|
1470
1617
|
switch (op) {
|
|
1471
1618
|
case "contains": {
|
|
1472
1619
|
const escaped = escapeLikePatternParameter(parameter);
|
|
1473
|
-
return
|
|
1620
|
+
return chunkVCRRKBLN_cjs.sql`'%' || ${escaped} || '%'`;
|
|
1474
1621
|
}
|
|
1475
1622
|
case "startsWith": {
|
|
1476
1623
|
const escaped = escapeLikePatternParameter(parameter);
|
|
1477
|
-
return
|
|
1624
|
+
return chunkVCRRKBLN_cjs.sql`${escaped} || '%'`;
|
|
1478
1625
|
}
|
|
1479
1626
|
case "endsWith": {
|
|
1480
1627
|
const escaped = escapeLikePatternParameter(parameter);
|
|
1481
|
-
return
|
|
1628
|
+
return chunkVCRRKBLN_cjs.sql`'%' || ${escaped}`;
|
|
1482
1629
|
}
|
|
1483
1630
|
case "like":
|
|
1484
1631
|
case "ilike": {
|
|
@@ -1505,18 +1652,18 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1505
1652
|
cteColumnPrefix
|
|
1506
1653
|
);
|
|
1507
1654
|
if (isParameterRef(expr.pattern)) {
|
|
1508
|
-
const placeholder =
|
|
1655
|
+
const placeholder = chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.placeholder(expr.pattern.name)}`;
|
|
1509
1656
|
const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
|
|
1510
1657
|
if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
|
|
1511
1658
|
return dialect.ilike(field, pattern2);
|
|
1512
1659
|
}
|
|
1513
|
-
return
|
|
1660
|
+
return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern2} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
|
|
1514
1661
|
}
|
|
1515
1662
|
const pattern = compileStringPattern(expr.op, expr.pattern);
|
|
1516
1663
|
if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
|
|
1517
1664
|
return dialect.ilike(field, pattern);
|
|
1518
1665
|
}
|
|
1519
|
-
return
|
|
1666
|
+
return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
|
|
1520
1667
|
}
|
|
1521
1668
|
case "null_check": {
|
|
1522
1669
|
const field = compileFieldTextValue(
|
|
@@ -1526,7 +1673,7 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1526
1673
|
void 0,
|
|
1527
1674
|
cteColumnPrefix
|
|
1528
1675
|
);
|
|
1529
|
-
return expr.op === "isNull" ?
|
|
1676
|
+
return expr.op === "isNull" ? chunkVCRRKBLN_cjs.sql`${field} IS NULL` : chunkVCRRKBLN_cjs.sql`${field} IS NOT NULL`;
|
|
1530
1677
|
}
|
|
1531
1678
|
case "between": {
|
|
1532
1679
|
const lowerIsParam = isParameterRef(expr.lower);
|
|
@@ -1536,7 +1683,7 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1536
1683
|
if (!upperIsParam) boundsForType.push(expr.upper);
|
|
1537
1684
|
const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
|
|
1538
1685
|
if (valueType === "array" || valueType === "object") {
|
|
1539
|
-
throw new
|
|
1686
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1540
1687
|
"Between comparisons are not supported for JSON arrays or objects"
|
|
1541
1688
|
);
|
|
1542
1689
|
}
|
|
@@ -1548,25 +1695,25 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1548
1695
|
void 0,
|
|
1549
1696
|
cteColumnPrefix
|
|
1550
1697
|
);
|
|
1551
|
-
const lower = lowerIsParam ?
|
|
1552
|
-
const upper = upperIsParam ?
|
|
1553
|
-
return
|
|
1698
|
+
const lower = lowerIsParam ? chunkVCRRKBLN_cjs.sql.placeholder(expr.lower.name) : convertValueForSql(expr.lower.value, dialect);
|
|
1699
|
+
const upper = upperIsParam ? chunkVCRRKBLN_cjs.sql.placeholder(expr.upper.name) : convertValueForSql(expr.upper.value, dialect);
|
|
1700
|
+
return chunkVCRRKBLN_cjs.sql`${field} BETWEEN ${lower} AND ${upper}`;
|
|
1554
1701
|
}
|
|
1555
1702
|
case "and": {
|
|
1556
1703
|
const parts = expr.predicates.map(
|
|
1557
1704
|
(p) => compilePredicateExpression(p, ctx)
|
|
1558
1705
|
);
|
|
1559
|
-
return
|
|
1706
|
+
return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(parts, chunkVCRRKBLN_cjs.sql` AND `)})`;
|
|
1560
1707
|
}
|
|
1561
1708
|
case "or": {
|
|
1562
1709
|
const parts = expr.predicates.map(
|
|
1563
1710
|
(p) => compilePredicateExpression(p, ctx)
|
|
1564
1711
|
);
|
|
1565
|
-
return
|
|
1712
|
+
return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(parts, chunkVCRRKBLN_cjs.sql` OR `)})`;
|
|
1566
1713
|
}
|
|
1567
1714
|
case "not": {
|
|
1568
1715
|
const inner = compilePredicateExpression(expr.predicate, ctx);
|
|
1569
|
-
return
|
|
1716
|
+
return chunkVCRRKBLN_cjs.sql`NOT (${inner})`;
|
|
1570
1717
|
}
|
|
1571
1718
|
case "array_op": {
|
|
1572
1719
|
return compileArrayPredicate(expr, dialect, cteColumnPrefix);
|
|
@@ -1589,7 +1736,7 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1589
1736
|
}
|
|
1590
1737
|
}
|
|
1591
1738
|
}
|
|
1592
|
-
var STRUCTURAL_PREDICATE_NOOP =
|
|
1739
|
+
var STRUCTURAL_PREDICATE_NOOP = chunkVCRRKBLN_cjs.sql.raw("1=1");
|
|
1593
1740
|
function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
1594
1741
|
if (isParameterRef(expr.right)) {
|
|
1595
1742
|
const parameterValueType = resolveParameterValueType(expr.left, expr.right);
|
|
@@ -1612,15 +1759,15 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1612
1759
|
}
|
|
1613
1760
|
const opSql2 = COMPARISON_OP_SQL[expr.op];
|
|
1614
1761
|
if (!opSql2) {
|
|
1615
|
-
throw new
|
|
1762
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1616
1763
|
`Comparison operation "${expr.op}" is not supported for parameterized predicates`
|
|
1617
1764
|
);
|
|
1618
1765
|
}
|
|
1619
|
-
return
|
|
1766
|
+
return chunkVCRRKBLN_cjs.sql`${left2} ${chunkVCRRKBLN_cjs.sql.raw(opSql2)} ${chunkVCRRKBLN_cjs.sql.placeholder(expr.right.name)}`;
|
|
1620
1767
|
}
|
|
1621
1768
|
const valueType = resolveComparisonValueType(expr.left, expr.right);
|
|
1622
1769
|
if (valueType === "array" || valueType === "object") {
|
|
1623
|
-
throw new
|
|
1770
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1624
1771
|
`Comparison operation "${expr.op}" is not supported for ${valueType} values`
|
|
1625
1772
|
);
|
|
1626
1773
|
}
|
|
@@ -1635,7 +1782,7 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1635
1782
|
if (expr.op === "in" || expr.op === "notIn") {
|
|
1636
1783
|
const values = Array.isArray(expr.right) ? expr.right : [expr.right];
|
|
1637
1784
|
if (values.length === 0) {
|
|
1638
|
-
return expr.op === "in" ?
|
|
1785
|
+
return expr.op === "in" ? chunkVCRRKBLN_cjs.sql.raw("1=0") : chunkVCRRKBLN_cjs.sql.raw("1=1");
|
|
1639
1786
|
}
|
|
1640
1787
|
const convertedValues = values.map(
|
|
1641
1788
|
(value) => convertValueForSql(value.value, dialect)
|
|
@@ -1643,19 +1790,19 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1643
1790
|
return dialect.inList(left, convertedValues, expr.op === "notIn");
|
|
1644
1791
|
}
|
|
1645
1792
|
const right = expr.right;
|
|
1646
|
-
const rightValue = Array.isArray(right) ?
|
|
1793
|
+
const rightValue = Array.isArray(right) ? chunkN66HCGCY_cjs.requireDefined(right[0]) : right;
|
|
1647
1794
|
const convertedRight = convertValueForSql(rightValue.value, dialect);
|
|
1648
1795
|
const opSql = COMPARISON_OP_SQL[expr.op];
|
|
1649
1796
|
if (!opSql) {
|
|
1650
|
-
throw new
|
|
1797
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1651
1798
|
`Comparison operation "${expr.op}" is not supported`
|
|
1652
1799
|
);
|
|
1653
1800
|
}
|
|
1654
|
-
return
|
|
1801
|
+
return chunkVCRRKBLN_cjs.sql`${left} ${chunkVCRRKBLN_cjs.sql.raw(opSql)} ${convertedRight}`;
|
|
1655
1802
|
}
|
|
1656
1803
|
function compileListParameterPredicate(left, parameterName, elementType, negated, dialect) {
|
|
1657
1804
|
if (elementType === "array" || elementType === "object" || elementType === "embedding") {
|
|
1658
|
-
throw new
|
|
1805
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1659
1806
|
`IN/NOT IN is not supported for ${elementType} values`,
|
|
1660
1807
|
{ valueType: elementType },
|
|
1661
1808
|
{
|
|
@@ -1663,7 +1810,7 @@ function compileListParameterPredicate(left, parameterName, elementType, negated
|
|
|
1663
1810
|
}
|
|
1664
1811
|
);
|
|
1665
1812
|
}
|
|
1666
|
-
return dialect.inListParameter(left,
|
|
1813
|
+
return dialect.inListParameter(left, chunkVCRRKBLN_cjs.sql.placeholder(parameterName), {
|
|
1667
1814
|
negated,
|
|
1668
1815
|
elementType
|
|
1669
1816
|
});
|
|
@@ -1679,30 +1826,30 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1679
1826
|
const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
|
|
1680
1827
|
switch (expr.op) {
|
|
1681
1828
|
case "isEmpty": {
|
|
1682
|
-
return
|
|
1829
|
+
return chunkVCRRKBLN_cjs.sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
|
|
1683
1830
|
}
|
|
1684
1831
|
case "isNotEmpty": {
|
|
1685
|
-
return
|
|
1832
|
+
return chunkVCRRKBLN_cjs.sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
|
|
1686
1833
|
}
|
|
1687
1834
|
case "lengthEq": {
|
|
1688
|
-
return
|
|
1835
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
|
|
1689
1836
|
}
|
|
1690
1837
|
case "lengthGt": {
|
|
1691
|
-
return
|
|
1838
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
|
|
1692
1839
|
}
|
|
1693
1840
|
case "lengthGte": {
|
|
1694
|
-
return
|
|
1841
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
|
|
1695
1842
|
}
|
|
1696
1843
|
case "lengthLt": {
|
|
1697
|
-
return
|
|
1844
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
|
|
1698
1845
|
}
|
|
1699
1846
|
case "lengthLte": {
|
|
1700
|
-
return
|
|
1847
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
|
|
1701
1848
|
}
|
|
1702
1849
|
case "contains": {
|
|
1703
1850
|
const value = values[0];
|
|
1704
1851
|
if (value === void 0) {
|
|
1705
|
-
return
|
|
1852
|
+
return chunkVCRRKBLN_cjs.sql.raw("1=0");
|
|
1706
1853
|
}
|
|
1707
1854
|
return dialect.jsonArrayContains(field, value);
|
|
1708
1855
|
}
|
|
@@ -1716,7 +1863,7 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1716
1863
|
}
|
|
1717
1864
|
function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
1718
1865
|
const basePointer = getFieldPointer(expr.field);
|
|
1719
|
-
const pointer =
|
|
1866
|
+
const pointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, expr.pointer);
|
|
1720
1867
|
const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
|
|
1721
1868
|
switch (expr.op) {
|
|
1722
1869
|
case "hasKey":
|
|
@@ -1725,13 +1872,13 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1725
1872
|
}
|
|
1726
1873
|
case "pathEquals": {
|
|
1727
1874
|
if (!expr.value) {
|
|
1728
|
-
throw new
|
|
1875
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1729
1876
|
"pathEquals requires a comparison value"
|
|
1730
1877
|
);
|
|
1731
1878
|
}
|
|
1732
1879
|
const valueType = resolvePredicateValueType(expr.valueType, expr.value);
|
|
1733
1880
|
if (valueType === "array" || valueType === "object") {
|
|
1734
|
-
throw new
|
|
1881
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1735
1882
|
"pathEquals is not supported for JSON arrays or objects"
|
|
1736
1883
|
);
|
|
1737
1884
|
}
|
|
@@ -1743,11 +1890,11 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1743
1890
|
pointer,
|
|
1744
1891
|
cteColumnPrefix
|
|
1745
1892
|
);
|
|
1746
|
-
return
|
|
1893
|
+
return chunkVCRRKBLN_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
|
|
1747
1894
|
}
|
|
1748
1895
|
case "pathContains": {
|
|
1749
1896
|
if (!expr.value) {
|
|
1750
|
-
throw new
|
|
1897
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1751
1898
|
"pathContains requires a comparison value"
|
|
1752
1899
|
);
|
|
1753
1900
|
}
|
|
@@ -1775,12 +1922,12 @@ function compileAggregatePredicate(expr, dialect) {
|
|
|
1775
1922
|
const aggregate = compileAggregateExpr(expr.aggregate, dialect);
|
|
1776
1923
|
const op = COMPARISON_OP_SQL[expr.op];
|
|
1777
1924
|
if (!op) {
|
|
1778
|
-
throw new
|
|
1925
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1779
1926
|
`Comparison operation "${expr.op}" is not supported for aggregate predicates`
|
|
1780
1927
|
);
|
|
1781
1928
|
}
|
|
1782
1929
|
const convertedValue = convertValueForSql(expr.value.value, dialect);
|
|
1783
|
-
return
|
|
1930
|
+
return chunkVCRRKBLN_cjs.sql`${aggregate} ${chunkVCRRKBLN_cjs.sql.raw(op)} ${convertedValue}`;
|
|
1784
1931
|
}
|
|
1785
1932
|
function compileAggregateExpr(expr, dialect) {
|
|
1786
1933
|
const cteAlias = `cte_${expr.field.alias}`;
|
|
@@ -1792,25 +1939,25 @@ function compileAggregateExpr(expr, dialect) {
|
|
|
1792
1939
|
);
|
|
1793
1940
|
switch (expr.function) {
|
|
1794
1941
|
case "count": {
|
|
1795
|
-
return
|
|
1942
|
+
return chunkVCRRKBLN_cjs.sql`COUNT(${field})`;
|
|
1796
1943
|
}
|
|
1797
1944
|
case "countDistinct": {
|
|
1798
|
-
return
|
|
1945
|
+
return chunkVCRRKBLN_cjs.sql`COUNT(DISTINCT ${field})`;
|
|
1799
1946
|
}
|
|
1800
1947
|
case "sum": {
|
|
1801
|
-
return
|
|
1948
|
+
return chunkVCRRKBLN_cjs.sql`SUM(${field})`;
|
|
1802
1949
|
}
|
|
1803
1950
|
case "avg": {
|
|
1804
|
-
return
|
|
1951
|
+
return chunkVCRRKBLN_cjs.sql`AVG(${field})`;
|
|
1805
1952
|
}
|
|
1806
1953
|
case "min": {
|
|
1807
|
-
return
|
|
1954
|
+
return chunkVCRRKBLN_cjs.sql`MIN(${field})`;
|
|
1808
1955
|
}
|
|
1809
1956
|
case "max": {
|
|
1810
|
-
return
|
|
1957
|
+
return chunkVCRRKBLN_cjs.sql`MAX(${field})`;
|
|
1811
1958
|
}
|
|
1812
1959
|
default: {
|
|
1813
|
-
throw new
|
|
1960
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1814
1961
|
`Unknown aggregate function: ${expr.function}`
|
|
1815
1962
|
);
|
|
1816
1963
|
}
|
|
@@ -1818,15 +1965,15 @@ function compileAggregateExpr(expr, dialect) {
|
|
|
1818
1965
|
}
|
|
1819
1966
|
function compileExistsSubquery(expr, ctx) {
|
|
1820
1967
|
if (expr.subquery.graphId === void 0) {
|
|
1821
|
-
throw new
|
|
1968
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
|
|
1822
1969
|
}
|
|
1823
1970
|
const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
|
|
1824
|
-
return expr.negated ?
|
|
1971
|
+
return expr.negated ? chunkVCRRKBLN_cjs.sql`NOT EXISTS (${subSql})` : chunkVCRRKBLN_cjs.sql`EXISTS (${subSql})`;
|
|
1825
1972
|
}
|
|
1826
1973
|
function compileInSubquery(expr, ctx) {
|
|
1827
1974
|
const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
|
|
1828
1975
|
if (subqueryColumnCount !== 1) {
|
|
1829
|
-
throw new
|
|
1976
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1830
1977
|
`IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
|
|
1831
1978
|
{ subqueryColumnCount }
|
|
1832
1979
|
);
|
|
@@ -1835,13 +1982,13 @@ function compileInSubquery(expr, ctx) {
|
|
|
1835
1982
|
const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
|
|
1836
1983
|
const resolvedValueType = fieldValueType ?? subqueryValueType;
|
|
1837
1984
|
if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
|
|
1838
|
-
throw new
|
|
1985
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1839
1986
|
`IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
|
|
1840
1987
|
{ valueType: resolvedValueType }
|
|
1841
1988
|
);
|
|
1842
1989
|
}
|
|
1843
1990
|
if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
|
|
1844
|
-
throw new
|
|
1991
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1845
1992
|
`IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
|
|
1846
1993
|
{
|
|
1847
1994
|
fieldValueType,
|
|
@@ -1851,7 +1998,7 @@ function compileInSubquery(expr, ctx) {
|
|
|
1851
1998
|
}
|
|
1852
1999
|
const valueType = fieldValueType ?? subqueryValueType;
|
|
1853
2000
|
if (expr.subquery.graphId === void 0) {
|
|
1854
|
-
throw new
|
|
2001
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1855
2002
|
"IN/NOT IN subquery must have a graphId"
|
|
1856
2003
|
);
|
|
1857
2004
|
}
|
|
@@ -1864,14 +2011,14 @@ function compileInSubquery(expr, ctx) {
|
|
|
1864
2011
|
ctx.cteColumnPrefix
|
|
1865
2012
|
);
|
|
1866
2013
|
const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
|
|
1867
|
-
return expr.negated ?
|
|
2014
|
+
return expr.negated ? chunkVCRRKBLN_cjs.sql`${fieldSql} NOT IN (${subSql})` : chunkVCRRKBLN_cjs.sql`${fieldSql} IN (${subSql})`;
|
|
1868
2015
|
}
|
|
1869
2016
|
function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
|
|
1870
2017
|
const results = [];
|
|
1871
2018
|
function visit(expr, inDisallowedBranch) {
|
|
1872
2019
|
if (isMatch(expr)) {
|
|
1873
2020
|
if (inDisallowedBranch) {
|
|
1874
|
-
throw new
|
|
2021
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(rejectionMessage);
|
|
1875
2022
|
}
|
|
1876
2023
|
results.push(expr);
|
|
1877
2024
|
return;
|
|
@@ -1925,9 +2072,9 @@ function extractFulltextMatchPredicates(predicates) {
|
|
|
1925
2072
|
// src/query/compiler/predicate-utils.ts
|
|
1926
2073
|
var EMPTY_PREDICATES = [];
|
|
1927
2074
|
function sqlValueList(values) {
|
|
1928
|
-
return
|
|
1929
|
-
values.map((value) =>
|
|
1930
|
-
|
|
2075
|
+
return chunkVCRRKBLN_cjs.sql.join(
|
|
2076
|
+
values.map((value) => chunkVCRRKBLN_cjs.sql`${value}`),
|
|
2077
|
+
chunkVCRRKBLN_cjs.sql`, `
|
|
1931
2078
|
);
|
|
1932
2079
|
}
|
|
1933
2080
|
function buildPredicateIndexKey(alias, targetType) {
|
|
@@ -1964,12 +2111,12 @@ function compilePredicateClauses(predicates, predicateContext) {
|
|
|
1964
2111
|
}
|
|
1965
2112
|
function compileKindFilter(column, kinds) {
|
|
1966
2113
|
if (kinds.length === 0) {
|
|
1967
|
-
return
|
|
2114
|
+
return chunkVCRRKBLN_cjs.sql`1 = 0`;
|
|
1968
2115
|
}
|
|
1969
2116
|
if (kinds.length === 1) {
|
|
1970
|
-
return
|
|
2117
|
+
return chunkVCRRKBLN_cjs.sql`${column} = ${kinds[0]}`;
|
|
1971
2118
|
}
|
|
1972
|
-
return
|
|
2119
|
+
return chunkVCRRKBLN_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
|
|
1973
2120
|
}
|
|
1974
2121
|
function getNodeKindsForAlias(ast, alias) {
|
|
1975
2122
|
if (alias === ast.start.alias) {
|
|
@@ -1980,7 +2127,7 @@ function getNodeKindsForAlias(ast, alias) {
|
|
|
1980
2127
|
return traversal.nodeKinds;
|
|
1981
2128
|
}
|
|
1982
2129
|
}
|
|
1983
|
-
throw new
|
|
2130
|
+
throw new chunkNI72YOJB_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
|
|
1984
2131
|
}
|
|
1985
2132
|
function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
|
|
1986
2133
|
if (!vectorPredicate || !fulltextPredicate) return void 0;
|
|
@@ -2009,7 +2156,7 @@ async function getRowsByIds(ids, policy) {
|
|
|
2009
2156
|
// src/store/edge-fetch.ts
|
|
2010
2157
|
async function getEdgeRowsByIds(backend, graphId, ids) {
|
|
2011
2158
|
return getRowsByIds(ids, {
|
|
2012
|
-
batch: backend.getEdges === void 0 ? void 0 : (batchIds) =>
|
|
2159
|
+
batch: backend.getEdges === void 0 ? void 0 : (batchIds) => chunkN66HCGCY_cjs.requireDefined(backend.getEdges)(graphId, batchIds),
|
|
2013
2160
|
one: (id) => backend.getEdge(graphId, id)
|
|
2014
2161
|
});
|
|
2015
2162
|
}
|
|
@@ -2017,7 +2164,7 @@ async function getEdgeRowsByIds(backend, graphId, ids) {
|
|
|
2017
2164
|
// src/store/node-fetch.ts
|
|
2018
2165
|
async function getNodeRowsByIds(backend, graphId, kind, ids) {
|
|
2019
2166
|
return getRowsByIds(ids, {
|
|
2020
|
-
batch: backend.getNodes === void 0 ? void 0 : (batchIds) =>
|
|
2167
|
+
batch: backend.getNodes === void 0 ? void 0 : (batchIds) => chunkN66HCGCY_cjs.requireDefined(backend.getNodes)(graphId, kind, batchIds),
|
|
2021
2168
|
one: (id) => backend.getNode(graphId, kind, id)
|
|
2022
2169
|
});
|
|
2023
2170
|
}
|
|
@@ -2065,13 +2212,36 @@ var RECORDED_EDGE_COLUMNS = [
|
|
|
2065
2212
|
"tx_id",
|
|
2066
2213
|
"meta"
|
|
2067
2214
|
];
|
|
2068
|
-
var
|
|
2069
|
-
|
|
2215
|
+
var RECORDED_IDENTITY_ASSERTION_COLUMNS = [
|
|
2216
|
+
"history_id",
|
|
2217
|
+
"graph_id",
|
|
2218
|
+
"id",
|
|
2219
|
+
"rel",
|
|
2220
|
+
"a_kind",
|
|
2221
|
+
"a_id",
|
|
2222
|
+
"b_kind",
|
|
2223
|
+
"b_id",
|
|
2224
|
+
"valid_from",
|
|
2225
|
+
"valid_to",
|
|
2226
|
+
"created_at",
|
|
2227
|
+
"updated_at",
|
|
2228
|
+
"deleted_at",
|
|
2229
|
+
"ended_by_kind",
|
|
2230
|
+
"ended_by_id",
|
|
2231
|
+
"recorded_from",
|
|
2232
|
+
"recorded_to",
|
|
2233
|
+
"op"
|
|
2234
|
+
];
|
|
2235
|
+
var RECORDED_NODE_COLUMN_LIST = chunkVCRRKBLN_cjs.sql.raw(RECORDED_NODE_COLUMNS.join(", "));
|
|
2236
|
+
var RECORDED_EDGE_COLUMN_LIST = chunkVCRRKBLN_cjs.sql.raw(RECORDED_EDGE_COLUMNS.join(", "));
|
|
2237
|
+
var RECORDED_IDENTITY_ASSERTION_COLUMN_LIST = chunkVCRRKBLN_cjs.sql.raw(
|
|
2238
|
+
RECORDED_IDENTITY_ASSERTION_COLUMNS.join(", ")
|
|
2239
|
+
);
|
|
2070
2240
|
var RECORDED_BIND_PARAM_BUDGET = 900;
|
|
2071
2241
|
function recordedBindParamBudget(target) {
|
|
2072
2242
|
const budget = target.capabilities.maxBindParameters ?? RECORDED_BIND_PARAM_BUDGET;
|
|
2073
2243
|
if (!Number.isSafeInteger(budget) || budget < 1) {
|
|
2074
|
-
throw new
|
|
2244
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2075
2245
|
`backend capabilities.maxBindParameters must be a positive integer, got: ${String(budget)}`,
|
|
2076
2246
|
{
|
|
2077
2247
|
code: "INVALID_BACKEND_CAPABILITY",
|
|
@@ -2087,44 +2257,64 @@ function recordedChunkSize(target, columnCount) {
|
|
|
2087
2257
|
return Math.max(1, Math.floor(budget / columnCount));
|
|
2088
2258
|
}
|
|
2089
2259
|
function sqlNull(value) {
|
|
2090
|
-
return value === void 0 ?
|
|
2260
|
+
return value === void 0 ? chunkVCRRKBLN_cjs.sql.raw("NULL") : chunkVCRRKBLN_cjs.sql`${value}`;
|
|
2091
2261
|
}
|
|
2092
2262
|
function recordedCommonCells() {
|
|
2093
2263
|
return {
|
|
2094
|
-
history_id: () =>
|
|
2095
|
-
graph_id: (row) =>
|
|
2096
|
-
id: (row) =>
|
|
2097
|
-
kind: (row) =>
|
|
2098
|
-
props: (row) =>
|
|
2099
|
-
valid_from: (row) =>
|
|
2100
|
-
valid_to: (row) =>
|
|
2101
|
-
created_at: (row) =>
|
|
2102
|
-
updated_at: (row) =>
|
|
2103
|
-
deleted_at: (row) =>
|
|
2104
|
-
recorded_from: (_row, recordedRevision) =>
|
|
2105
|
-
recorded_to: () =>
|
|
2106
|
-
op: (_row, _recordedCommit, operation) =>
|
|
2107
|
-
schema_version: () =>
|
|
2108
|
-
tx_id: () =>
|
|
2109
|
-
meta: () =>
|
|
2264
|
+
history_id: () => chunkVCRRKBLN_cjs.sql`${generateId()}`,
|
|
2265
|
+
graph_id: (row) => chunkVCRRKBLN_cjs.sql`${row.graph_id}`,
|
|
2266
|
+
id: (row) => chunkVCRRKBLN_cjs.sql`${row.id}`,
|
|
2267
|
+
kind: (row) => chunkVCRRKBLN_cjs.sql`${row.kind}`,
|
|
2268
|
+
props: (row) => chunkVCRRKBLN_cjs.sql`${chunkXBYVV3MP_cjs.rowPropsToJsonText(row.props)}`,
|
|
2269
|
+
valid_from: (row) => chunkVCRRKBLN_cjs.sql`${sqlNull(row.valid_from)}`,
|
|
2270
|
+
valid_to: (row) => chunkVCRRKBLN_cjs.sql`${sqlNull(row.valid_to)}`,
|
|
2271
|
+
created_at: (row) => chunkVCRRKBLN_cjs.sql`${row.created_at}`,
|
|
2272
|
+
updated_at: (row) => chunkVCRRKBLN_cjs.sql`${row.updated_at}`,
|
|
2273
|
+
deleted_at: (row) => chunkVCRRKBLN_cjs.sql`${sqlNull(row.deleted_at)}`,
|
|
2274
|
+
recorded_from: (_row, recordedRevision) => chunkVCRRKBLN_cjs.sql`${recordedRevision}`,
|
|
2275
|
+
recorded_to: () => chunkVCRRKBLN_cjs.sql`${chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION}`,
|
|
2276
|
+
op: (_row, _recordedCommit, operation) => chunkVCRRKBLN_cjs.sql`${operation}`,
|
|
2277
|
+
schema_version: () => chunkVCRRKBLN_cjs.sql`NULL`,
|
|
2278
|
+
tx_id: () => chunkVCRRKBLN_cjs.sql`NULL`,
|
|
2279
|
+
meta: () => chunkVCRRKBLN_cjs.sql`${RECORDED_HISTORY_META}`
|
|
2110
2280
|
};
|
|
2111
2281
|
}
|
|
2112
2282
|
var recordedNodeCells = {
|
|
2113
2283
|
...recordedCommonCells(),
|
|
2114
|
-
version: (row) =>
|
|
2284
|
+
version: (row) => chunkVCRRKBLN_cjs.sql`${row.version}`
|
|
2115
2285
|
};
|
|
2116
2286
|
var recordedEdgeCells = {
|
|
2117
2287
|
...recordedCommonCells(),
|
|
2118
|
-
from_kind: (row) =>
|
|
2119
|
-
from_id: (row) =>
|
|
2120
|
-
to_kind: (row) =>
|
|
2121
|
-
to_id: (row) =>
|
|
2288
|
+
from_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.from_kind}`,
|
|
2289
|
+
from_id: (row) => chunkVCRRKBLN_cjs.sql`${row.from_id}`,
|
|
2290
|
+
to_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.to_kind}`,
|
|
2291
|
+
to_id: (row) => chunkVCRRKBLN_cjs.sql`${row.to_id}`
|
|
2292
|
+
};
|
|
2293
|
+
var recordedIdentityAssertionCells = {
|
|
2294
|
+
history_id: () => chunkVCRRKBLN_cjs.sql`${generateId()}`,
|
|
2295
|
+
graph_id: (row) => chunkVCRRKBLN_cjs.sql`${row.graph_id}`,
|
|
2296
|
+
id: (row) => chunkVCRRKBLN_cjs.sql`${row.id}`,
|
|
2297
|
+
rel: (row) => chunkVCRRKBLN_cjs.sql`${row.rel}`,
|
|
2298
|
+
a_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.a_kind}`,
|
|
2299
|
+
a_id: (row) => chunkVCRRKBLN_cjs.sql`${row.a_id}`,
|
|
2300
|
+
b_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.b_kind}`,
|
|
2301
|
+
b_id: (row) => chunkVCRRKBLN_cjs.sql`${row.b_id}`,
|
|
2302
|
+
valid_from: (row) => chunkVCRRKBLN_cjs.sql`${row.valid_from}`,
|
|
2303
|
+
valid_to: (row) => chunkVCRRKBLN_cjs.sql`${row.valid_to ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
|
|
2304
|
+
created_at: (row) => chunkVCRRKBLN_cjs.sql`${row.created_at}`,
|
|
2305
|
+
updated_at: (row) => chunkVCRRKBLN_cjs.sql`${row.updated_at}`,
|
|
2306
|
+
deleted_at: (row) => chunkVCRRKBLN_cjs.sql`${row.deleted_at ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
|
|
2307
|
+
ended_by_kind: (row) => chunkVCRRKBLN_cjs.sql`${row.ended_by_kind ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
|
|
2308
|
+
ended_by_id: (row) => chunkVCRRKBLN_cjs.sql`${row.ended_by_id ?? chunkVCRRKBLN_cjs.sql.raw("NULL")}`,
|
|
2309
|
+
recorded_from: (_row, recordedRevision) => chunkVCRRKBLN_cjs.sql`${recordedRevision}`,
|
|
2310
|
+
recorded_to: () => chunkVCRRKBLN_cjs.sql`${chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION}`,
|
|
2311
|
+
op: (_row, _recordedRevision, operation) => chunkVCRRKBLN_cjs.sql`${operation}`
|
|
2122
2312
|
};
|
|
2123
2313
|
function recordedValuesTuple(columns, cells, row, recordedRevision, operation) {
|
|
2124
2314
|
const tuple = columns.map(
|
|
2125
2315
|
(column) => cells[column](row, recordedRevision, operation)
|
|
2126
2316
|
);
|
|
2127
|
-
return
|
|
2317
|
+
return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(tuple, chunkVCRRKBLN_cjs.sql`, `)})`;
|
|
2128
2318
|
}
|
|
2129
2319
|
async function insertRecordedRows(target, table, columnList, columns, cells, inserts, recordedRevision) {
|
|
2130
2320
|
if (inserts.length === 0) return;
|
|
@@ -2139,9 +2329,9 @@ async function insertRecordedRows(target, table, columnList, columns, cells, ins
|
|
|
2139
2329
|
);
|
|
2140
2330
|
await executeStatement(
|
|
2141
2331
|
target,
|
|
2142
|
-
|
|
2332
|
+
chunkVCRRKBLN_cjs.sql`
|
|
2143
2333
|
INSERT INTO ${table} (${columnList})
|
|
2144
|
-
VALUES ${
|
|
2334
|
+
VALUES ${chunkVCRRKBLN_cjs.sql.join(values, chunkVCRRKBLN_cjs.sql`, `)}
|
|
2145
2335
|
`
|
|
2146
2336
|
);
|
|
2147
2337
|
}
|
|
@@ -2151,6 +2341,9 @@ function recordedNodeChunkSize(target) {
|
|
|
2151
2341
|
function recordedEdgeChunkSize(target) {
|
|
2152
2342
|
return recordedChunkSize(target, RECORDED_EDGE_COLUMNS.length);
|
|
2153
2343
|
}
|
|
2344
|
+
function recordedIdentityAssertionChunkSize(target) {
|
|
2345
|
+
return recordedChunkSize(target, RECORDED_IDENTITY_ASSERTION_COLUMNS.length);
|
|
2346
|
+
}
|
|
2154
2347
|
function insertRecordedNodeRows(target, table, inserts, recordedRevision) {
|
|
2155
2348
|
return insertRecordedRows(
|
|
2156
2349
|
target,
|
|
@@ -2173,6 +2366,17 @@ function insertRecordedEdgeRows(target, table, inserts, recordedRevision) {
|
|
|
2173
2366
|
recordedRevision
|
|
2174
2367
|
);
|
|
2175
2368
|
}
|
|
2369
|
+
function insertRecordedIdentityAssertionRows(target, table, inserts, recordedRevision) {
|
|
2370
|
+
return insertRecordedRows(
|
|
2371
|
+
target,
|
|
2372
|
+
table,
|
|
2373
|
+
RECORDED_IDENTITY_ASSERTION_COLUMN_LIST,
|
|
2374
|
+
RECORDED_IDENTITY_ASSERTION_COLUMNS,
|
|
2375
|
+
recordedIdentityAssertionCells,
|
|
2376
|
+
inserts,
|
|
2377
|
+
recordedRevision
|
|
2378
|
+
);
|
|
2379
|
+
}
|
|
2176
2380
|
|
|
2177
2381
|
// src/store/recorded-capture/flush.ts
|
|
2178
2382
|
function entityKey(entity) {
|
|
@@ -2183,25 +2387,28 @@ function entityKey(entity) {
|
|
|
2183
2387
|
case "edge": {
|
|
2184
2388
|
return `edge\0${entity.graphId}\0${entity.id}`;
|
|
2185
2389
|
}
|
|
2390
|
+
case "identity": {
|
|
2391
|
+
return `identity\0${entity.graphId}\0${entity.id}`;
|
|
2392
|
+
}
|
|
2186
2393
|
}
|
|
2187
2394
|
}
|
|
2188
2395
|
async function closeOpenReturning(target, table, graphId, ids, recordedRevision, kind) {
|
|
2189
|
-
const kindFilter = kind === void 0 ?
|
|
2396
|
+
const kindFilter = kind === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`AND kind = ${kind}`;
|
|
2190
2397
|
const rows = await target.execute(
|
|
2191
|
-
|
|
2398
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2192
2399
|
UPDATE ${table}
|
|
2193
2400
|
SET recorded_to = ${recordedRevision}
|
|
2194
2401
|
WHERE graph_id = ${graphId}
|
|
2195
2402
|
${kindFilter}
|
|
2196
|
-
AND recorded_to = ${
|
|
2403
|
+
AND recorded_to = ${chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION}
|
|
2197
2404
|
AND id IN (${sqlValueList(ids)})
|
|
2198
2405
|
RETURNING id, deleted_at
|
|
2199
2406
|
`)
|
|
2200
2407
|
);
|
|
2201
|
-
return new Map(rows.map((row) => [row.id,
|
|
2408
|
+
return new Map(rows.map((row) => [row.id, chunkN66HCGCY_cjs.isPresent(row.deleted_at)]));
|
|
2202
2409
|
}
|
|
2203
2410
|
function recordedOp(hadOpenRow, priorRowWasTombstone, after) {
|
|
2204
|
-
if (
|
|
2411
|
+
if (chunkN66HCGCY_cjs.isPresent(after.deleted_at)) return "delete";
|
|
2205
2412
|
if (!hadOpenRow || priorRowWasTombstone) return "create";
|
|
2206
2413
|
return "update";
|
|
2207
2414
|
}
|
|
@@ -2238,7 +2445,7 @@ function recordedInsertsFor(afterById, closed) {
|
|
|
2238
2445
|
async function flushNodes(target, schema, graphId, entities, recordedRevision) {
|
|
2239
2446
|
const chunkSize = recordedNodeChunkSize(target);
|
|
2240
2447
|
for (const [kind, group] of groupNodesByKind(entities)) {
|
|
2241
|
-
for (const entityChunk of
|
|
2448
|
+
for (const entityChunk of chunkBSFJMMV3_cjs.chunk(group, chunkSize)) {
|
|
2242
2449
|
const ids = entityChunk.map((entity) => entity.id);
|
|
2243
2450
|
const closed = await closeOpenReturning(
|
|
2244
2451
|
target,
|
|
@@ -2263,7 +2470,7 @@ async function flushNodes(target, schema, graphId, entities, recordedRevision) {
|
|
|
2263
2470
|
}
|
|
2264
2471
|
async function flushEdges(target, schema, graphId, entities, recordedRevision) {
|
|
2265
2472
|
const chunkSize = recordedEdgeChunkSize(target);
|
|
2266
|
-
for (const entityChunk of
|
|
2473
|
+
for (const entityChunk of chunkBSFJMMV3_cjs.chunk(entities, chunkSize)) {
|
|
2267
2474
|
const ids = entityChunk.map((entity) => entity.id);
|
|
2268
2475
|
const closed = await closeOpenReturning(
|
|
2269
2476
|
target,
|
|
@@ -2284,27 +2491,63 @@ async function flushEdges(target, schema, graphId, entities, recordedRevision) {
|
|
|
2284
2491
|
);
|
|
2285
2492
|
}
|
|
2286
2493
|
}
|
|
2494
|
+
async function getIdentityAssertionRowsByIds(target, schema, graphId, ids) {
|
|
2495
|
+
if (ids.length === 0) return /* @__PURE__ */ new Map();
|
|
2496
|
+
const rows = await target.execute(
|
|
2497
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2498
|
+
SELECT ${IDENTITY_ASSERTION_COLUMNS}
|
|
2499
|
+
FROM ${schema.identityAssertionsTable}
|
|
2500
|
+
WHERE graph_id = ${graphId}
|
|
2501
|
+
AND id IN (${sqlValueList(ids)})
|
|
2502
|
+
`)
|
|
2503
|
+
);
|
|
2504
|
+
return new Map(rows.map((row) => [row.id, row]));
|
|
2505
|
+
}
|
|
2506
|
+
async function flushIdentityAssertions(target, schema, graphId, entities, recordedRevision) {
|
|
2507
|
+
if (entities.length === 0) return;
|
|
2508
|
+
const chunkSize = recordedIdentityAssertionChunkSize(target);
|
|
2509
|
+
for (const entityChunk of chunkBSFJMMV3_cjs.chunk(entities, chunkSize)) {
|
|
2510
|
+
const ids = entityChunk.map((entity) => entity.id);
|
|
2511
|
+
const closed = await closeOpenReturning(
|
|
2512
|
+
target,
|
|
2513
|
+
schema.recordedIdentityAssertionsTable,
|
|
2514
|
+
graphId,
|
|
2515
|
+
ids,
|
|
2516
|
+
recordedRevision
|
|
2517
|
+
);
|
|
2518
|
+
const afterById = await resolveAfterImages(
|
|
2519
|
+
entityChunk,
|
|
2520
|
+
(missing) => getIdentityAssertionRowsByIds(target, schema, graphId, missing)
|
|
2521
|
+
);
|
|
2522
|
+
await insertRecordedIdentityAssertionRows(
|
|
2523
|
+
target,
|
|
2524
|
+
schema.recordedIdentityAssertionsTable,
|
|
2525
|
+
recordedInsertsFor(afterById, closed),
|
|
2526
|
+
recordedRevision
|
|
2527
|
+
);
|
|
2528
|
+
}
|
|
2529
|
+
}
|
|
2287
2530
|
async function closeOpenByKind(target, table, graphId, kind, recordedRevision) {
|
|
2288
2531
|
await executeStatement(
|
|
2289
2532
|
target,
|
|
2290
|
-
|
|
2533
|
+
chunkVCRRKBLN_cjs.sql`
|
|
2291
2534
|
UPDATE ${table}
|
|
2292
2535
|
SET recorded_to = ${recordedRevision}
|
|
2293
2536
|
WHERE graph_id = ${graphId}
|
|
2294
2537
|
AND kind = ${kind}
|
|
2295
|
-
AND recorded_to = ${
|
|
2538
|
+
AND recorded_to = ${chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION}
|
|
2296
2539
|
`
|
|
2297
2540
|
);
|
|
2298
2541
|
}
|
|
2299
2542
|
async function closeOpenEdgesByNodeKind(target, schema, graphId, nodeKind, recordedRevision) {
|
|
2300
2543
|
await executeStatement(
|
|
2301
2544
|
target,
|
|
2302
|
-
|
|
2545
|
+
chunkVCRRKBLN_cjs.sql`
|
|
2303
2546
|
UPDATE ${schema.recordedEdgesTable}
|
|
2304
2547
|
SET recorded_to = ${recordedRevision}
|
|
2305
2548
|
WHERE graph_id = ${graphId}
|
|
2306
2549
|
AND (from_kind = ${nodeKind} OR to_kind = ${nodeKind})
|
|
2307
|
-
AND recorded_to = ${
|
|
2550
|
+
AND recorded_to = ${chunkMCLYU6BN_cjs.RECORDED_MAX_REVISION}
|
|
2308
2551
|
`
|
|
2309
2552
|
);
|
|
2310
2553
|
}
|
|
@@ -2342,7 +2585,7 @@ async function closeRecordedHardDeletedKind(target, schema, graphId, removal, ow
|
|
|
2342
2585
|
}
|
|
2343
2586
|
async function queryConnectedEdgeIds(target, schema, params) {
|
|
2344
2587
|
const rows = await target.execute(
|
|
2345
|
-
|
|
2588
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2346
2589
|
SELECT id
|
|
2347
2590
|
FROM ${schema.edgesTable}
|
|
2348
2591
|
WHERE graph_id = ${params.graphId}
|
|
@@ -2363,9 +2606,9 @@ function normalizedColumnType(value) {
|
|
|
2363
2606
|
}
|
|
2364
2607
|
async function readColumnTypes(backend, table) {
|
|
2365
2608
|
const rows = backend.dialect === "sqlite" ? await backend.execute(
|
|
2366
|
-
|
|
2609
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`PRAGMA table_info(${chunkVCRRKBLN_cjs.sql.identifier(table)})`)
|
|
2367
2610
|
) : await backend.execute(
|
|
2368
|
-
|
|
2611
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2369
2612
|
SELECT column_name AS name, data_type AS type
|
|
2370
2613
|
FROM information_schema.columns
|
|
2371
2614
|
WHERE table_schema = current_schema()
|
|
@@ -2388,7 +2631,19 @@ function isCompatibleColumnType(dialect, declaredType, kind) {
|
|
|
2388
2631
|
if (dialect === "sqlite") return hasSqliteAffinity(declaredType, kind);
|
|
2389
2632
|
return kind === "revision" ? declaredType === "bigint" : declaredType === "timestamp with time zone";
|
|
2390
2633
|
}
|
|
2391
|
-
function requiredRecordedColumns(schema) {
|
|
2634
|
+
function requiredRecordedColumns(schema, includeIdentity) {
|
|
2635
|
+
const identityColumns = includeIdentity ? [
|
|
2636
|
+
{
|
|
2637
|
+
table: schema.tables.recordedIdentityAssertions,
|
|
2638
|
+
column: "recorded_from",
|
|
2639
|
+
kind: "revision"
|
|
2640
|
+
},
|
|
2641
|
+
{
|
|
2642
|
+
table: schema.tables.recordedIdentityAssertions,
|
|
2643
|
+
column: "recorded_to",
|
|
2644
|
+
kind: "revision"
|
|
2645
|
+
}
|
|
2646
|
+
] : [];
|
|
2392
2647
|
return [
|
|
2393
2648
|
{
|
|
2394
2649
|
table: schema.tables.recordedNodes,
|
|
@@ -2419,11 +2674,12 @@ function requiredRecordedColumns(schema) {
|
|
|
2419
2674
|
table: schema.tables.recordedClock,
|
|
2420
2675
|
column: "recorded_at",
|
|
2421
2676
|
kind: "wall-time"
|
|
2422
|
-
}
|
|
2677
|
+
},
|
|
2678
|
+
...identityColumns
|
|
2423
2679
|
];
|
|
2424
2680
|
}
|
|
2425
|
-
async function assertCurrentRecordedSchema(backend, schema) {
|
|
2426
|
-
const requirements = requiredRecordedColumns(schema);
|
|
2681
|
+
async function assertCurrentRecordedSchema(backend, schema, includeIdentity = false) {
|
|
2682
|
+
const requirements = requiredRecordedColumns(schema, includeIdentity);
|
|
2427
2683
|
const tables = [...new Set(requirements.map((entry) => entry.table))];
|
|
2428
2684
|
const columnTypes = new Map(
|
|
2429
2685
|
await Promise.all(
|
|
@@ -2432,6 +2688,20 @@ async function assertCurrentRecordedSchema(backend, schema) {
|
|
|
2432
2688
|
)
|
|
2433
2689
|
)
|
|
2434
2690
|
);
|
|
2691
|
+
const recordedIdentityTable = schema.tables.recordedIdentityAssertions;
|
|
2692
|
+
if (includeIdentity && (columnTypes.get(recordedIdentityTable)?.size ?? 0) === 0) {
|
|
2693
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2694
|
+
"Recorded identity history is not provisioned for this database.",
|
|
2695
|
+
{
|
|
2696
|
+
code: "RECORDED_IDENTITY_SCHEMA_MISSING",
|
|
2697
|
+
dialect: backend.dialect,
|
|
2698
|
+
table: recordedIdentityTable
|
|
2699
|
+
},
|
|
2700
|
+
{
|
|
2701
|
+
suggestion: "Restore the missing recorded identity ledger from backup. If this is confirmed first-time identity enablement with no identity history to preserve, provision the relation through the backend's privileged setup path before reopening with history: true."
|
|
2702
|
+
}
|
|
2703
|
+
);
|
|
2704
|
+
}
|
|
2435
2705
|
const incompatible = requirements.flatMap((requirement) => {
|
|
2436
2706
|
const actual = columnTypes.get(requirement.table)?.get(requirement.column);
|
|
2437
2707
|
if (actual !== void 0 && isCompatibleColumnType(backend.dialect, actual, requirement.kind)) {
|
|
@@ -2440,7 +2710,7 @@ async function assertCurrentRecordedSchema(backend, schema) {
|
|
|
2440
2710
|
return [{ ...requirement, actual: actual ?? "missing" }];
|
|
2441
2711
|
});
|
|
2442
2712
|
if (incompatible.length === 0) return;
|
|
2443
|
-
throw new
|
|
2713
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2444
2714
|
"Recorded-time schema is incompatible with history capture.",
|
|
2445
2715
|
{
|
|
2446
2716
|
code: "RECORDED_SCHEMA_INCOMPATIBLE",
|
|
@@ -2488,7 +2758,7 @@ function edgeRowIdentityKey(row) {
|
|
|
2488
2758
|
return edgeIdentityKey(row.graph_id, row.id);
|
|
2489
2759
|
}
|
|
2490
2760
|
function recordedCaptureSealedError(details) {
|
|
2491
|
-
return new
|
|
2761
|
+
return new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2492
2762
|
"Recorded-time capture session is sealed: a graph write happened after the transaction's capture was flushed.",
|
|
2493
2763
|
details,
|
|
2494
2764
|
{
|
|
@@ -2519,9 +2789,12 @@ function createRecordedCaptureSession() {
|
|
|
2519
2789
|
touchEdge(graphId, id, afterImage) {
|
|
2520
2790
|
touch({ entity: "edge", graphId, id, afterImage });
|
|
2521
2791
|
},
|
|
2792
|
+
touchIdentityAssertion(graphId, id, afterImage) {
|
|
2793
|
+
touch({ entity: "identity", graphId, id, afterImage });
|
|
2794
|
+
},
|
|
2522
2795
|
async flush(target, schema, ownsWriteLock) {
|
|
2523
2796
|
if (sealed) {
|
|
2524
|
-
throw new
|
|
2797
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2525
2798
|
"Recorded-time capture session was already flushed.",
|
|
2526
2799
|
{},
|
|
2527
2800
|
{
|
|
@@ -2532,7 +2805,7 @@ function createRecordedCaptureSession() {
|
|
|
2532
2805
|
sealed = true;
|
|
2533
2806
|
if (touched.size === 0) return /* @__PURE__ */ new Map();
|
|
2534
2807
|
const recordedByGraph = /* @__PURE__ */ new Map();
|
|
2535
|
-
const byGraph =
|
|
2808
|
+
const byGraph = chunkBSFJMMV3_cjs.groupBy(touched.values(), (entity) => entity.graphId);
|
|
2536
2809
|
for (const [graphId, entities] of byGraph) {
|
|
2537
2810
|
const recordedCommit = await allocateRecordedCommit(
|
|
2538
2811
|
target,
|
|
@@ -2547,6 +2820,9 @@ function createRecordedCaptureSession() {
|
|
|
2547
2820
|
const edges = entities.filter(
|
|
2548
2821
|
(entity) => entity.entity === "edge"
|
|
2549
2822
|
);
|
|
2823
|
+
const identityAssertions = entities.filter(
|
|
2824
|
+
(entity) => entity.entity === "identity"
|
|
2825
|
+
);
|
|
2550
2826
|
await flushNodes(
|
|
2551
2827
|
target,
|
|
2552
2828
|
schema,
|
|
@@ -2561,12 +2837,33 @@ function createRecordedCaptureSession() {
|
|
|
2561
2837
|
edges,
|
|
2562
2838
|
recordedCommit.revision
|
|
2563
2839
|
);
|
|
2840
|
+
await flushIdentityAssertions(
|
|
2841
|
+
target,
|
|
2842
|
+
schema,
|
|
2843
|
+
graphId,
|
|
2844
|
+
identityAssertions,
|
|
2845
|
+
recordedCommit.revision
|
|
2846
|
+
);
|
|
2564
2847
|
}
|
|
2565
2848
|
touched.clear();
|
|
2566
2849
|
return recordedByGraph;
|
|
2567
2850
|
}
|
|
2568
2851
|
};
|
|
2569
2852
|
}
|
|
2853
|
+
var recordedIdentityBindings = /* @__PURE__ */ new WeakMap();
|
|
2854
|
+
function ignoreIdentityTouch() {
|
|
2855
|
+
return;
|
|
2856
|
+
}
|
|
2857
|
+
async function withRecordedIdentityMutationTarget(target, fn) {
|
|
2858
|
+
const binding = recordedIdentityBindings.get(target);
|
|
2859
|
+
if (binding === void 0) {
|
|
2860
|
+
return fn(target, ignoreIdentityTouch);
|
|
2861
|
+
}
|
|
2862
|
+
binding.session.assertOpen();
|
|
2863
|
+
return fn(binding.target, (graphId, id, afterImage) => {
|
|
2864
|
+
binding.session.touchIdentityAssertion(graphId, id, afterImage);
|
|
2865
|
+
});
|
|
2866
|
+
}
|
|
2570
2867
|
function createRecordedTransactionBackend(target, session, schema) {
|
|
2571
2868
|
const nodeDispatch = nodeInsertDispatch(target);
|
|
2572
2869
|
const edgeDispatch = edgeInsertDispatch(target);
|
|
@@ -2582,7 +2879,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2582
2879
|
await lockRecordedGraphWrite(target, graphId, graphLocks);
|
|
2583
2880
|
}
|
|
2584
2881
|
}
|
|
2585
|
-
const overlay =
|
|
2882
|
+
const overlay = chunkXBYVV3MP_cjs.createBackendOverlay(target, {
|
|
2586
2883
|
...rawWriteGuards(target, "tx.backend"),
|
|
2587
2884
|
async insertNode(params) {
|
|
2588
2885
|
session.assertOpen();
|
|
@@ -2639,7 +2936,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2639
2936
|
async updateNodeSet(params) {
|
|
2640
2937
|
session.assertOpen();
|
|
2641
2938
|
await lockGraph(params.graphId);
|
|
2642
|
-
const result = await
|
|
2939
|
+
const result = await chunkN66HCGCY_cjs.requireDefined(target.updateNodeSet)(params);
|
|
2643
2940
|
for (const row of result.rows) {
|
|
2644
2941
|
session.touchNode(row.graph_id, row.kind, row.id, row);
|
|
2645
2942
|
}
|
|
@@ -2732,7 +3029,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2732
3029
|
async deleteEdgesBatch(params) {
|
|
2733
3030
|
session.assertOpen();
|
|
2734
3031
|
await lockGraph(params.graphId);
|
|
2735
|
-
await
|
|
3032
|
+
await chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params);
|
|
2736
3033
|
for (const id of params.ids) {
|
|
2737
3034
|
session.touchEdge(params.graphId, id);
|
|
2738
3035
|
}
|
|
@@ -2742,7 +3039,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2742
3039
|
async hardDeleteEdgesBatch(params) {
|
|
2743
3040
|
session.assertOpen();
|
|
2744
3041
|
await lockGraph(params.graphId);
|
|
2745
|
-
await
|
|
3042
|
+
await chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
|
|
2746
3043
|
for (const id of params.ids) {
|
|
2747
3044
|
session.touchEdge(params.graphId, id);
|
|
2748
3045
|
}
|
|
@@ -2750,6 +3047,8 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2750
3047
|
}
|
|
2751
3048
|
});
|
|
2752
3049
|
registerRecordedGraphLockMemo(overlay, graphLocks);
|
|
3050
|
+
recordedIdentityBindings.set(overlay, { target, session });
|
|
3051
|
+
recordedIdentityBindings.set(target, { target, session });
|
|
2753
3052
|
return overlay;
|
|
2754
3053
|
}
|
|
2755
3054
|
function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
|
|
@@ -2759,7 +3058,7 @@ function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
|
|
|
2759
3058
|
return {
|
|
2760
3059
|
backend: createRecordedTransactionBackend(target, session, resolvedSchema),
|
|
2761
3060
|
async flush() {
|
|
2762
|
-
return
|
|
3061
|
+
return chunkBSFJMMV3_cjs.withRecordedRelationsPrecondition(
|
|
2763
3062
|
session.flush(target, resolvedSchema, ownsWriteLock),
|
|
2764
3063
|
{ dialect: target.dialect, surface: "capture-flush" }
|
|
2765
3064
|
);
|
|
@@ -2780,7 +3079,7 @@ function createRecordedBackend(backend, schema) {
|
|
|
2780
3079
|
assertCapturableBackend(backend);
|
|
2781
3080
|
const capture = (fn) => runCapturedAutocommit(backend, schema, fn);
|
|
2782
3081
|
const projectedBackend = createGraphBackendProjection(backend);
|
|
2783
|
-
return
|
|
3082
|
+
return chunkXBYVV3MP_cjs.createBackendOverlay(projectedBackend, {
|
|
2784
3083
|
...rawWriteGuards(backend, "backend"),
|
|
2785
3084
|
async insertNode(params) {
|
|
2786
3085
|
return capture((target) => target.insertNode(params));
|
|
@@ -2814,7 +3113,7 @@ function createRecordedBackend(backend, schema) {
|
|
|
2814
3113
|
return capture((target) => {
|
|
2815
3114
|
const updateNodeSet = target.updateNodeSet;
|
|
2816
3115
|
if (updateNodeSet === void 0) {
|
|
2817
|
-
throw new
|
|
3116
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2818
3117
|
"Recorded updateNodeSet capability disappeared inside a transaction",
|
|
2819
3118
|
{ operation: "updateNodeSet" }
|
|
2820
3119
|
);
|
|
@@ -2865,14 +3164,14 @@ function createRecordedBackend(backend, schema) {
|
|
|
2865
3164
|
...backend.deleteEdgesBatch === void 0 ? {} : {
|
|
2866
3165
|
async deleteEdgesBatch(params) {
|
|
2867
3166
|
await capture(
|
|
2868
|
-
(target) =>
|
|
3167
|
+
(target) => chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params)
|
|
2869
3168
|
);
|
|
2870
3169
|
}
|
|
2871
3170
|
},
|
|
2872
3171
|
...backend.hardDeleteEdgesBatch === void 0 ? {} : {
|
|
2873
3172
|
async hardDeleteEdgesBatch(params) {
|
|
2874
3173
|
await capture(
|
|
2875
|
-
(target) =>
|
|
3174
|
+
(target) => chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
|
|
2876
3175
|
);
|
|
2877
3176
|
}
|
|
2878
3177
|
},
|
|
@@ -2893,814 +3192,32 @@ function createRecordedBackend(backend, schema) {
|
|
|
2893
3192
|
});
|
|
2894
3193
|
}
|
|
2895
3194
|
|
|
2896
|
-
// src/
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
return;
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
if (isValidEmbeddingValue(value)) {
|
|
2917
|
-
await backend.upsertEmbedding({
|
|
2918
|
-
graphId: ctx.graphId,
|
|
2919
|
-
nodeKind: ctx.nodeKind,
|
|
2920
|
-
nodeId: ctx.nodeId,
|
|
2921
|
-
fieldPath: field.fieldPath,
|
|
2922
|
-
embedding: value,
|
|
2923
|
-
dimensions: field.dimensions,
|
|
2924
|
-
metric: field.metric,
|
|
2925
|
-
indexType: field.indexType
|
|
2926
|
-
});
|
|
2927
|
-
} else if (value === void 0) {
|
|
2928
|
-
await backend.deleteEmbedding({
|
|
2929
|
-
graphId: ctx.graphId,
|
|
2930
|
-
nodeKind: ctx.nodeKind,
|
|
2931
|
-
nodeId: ctx.nodeId,
|
|
2932
|
-
fieldPath: field.fieldPath,
|
|
2933
|
-
dimensions: field.dimensions,
|
|
2934
|
-
metric: field.metric,
|
|
2935
|
-
indexType: field.indexType
|
|
2936
|
-
});
|
|
2937
|
-
}
|
|
2938
|
-
}
|
|
2939
|
-
}
|
|
2940
|
-
async function syncEmbeddingsBatchForKind(args, schema, items) {
|
|
2941
|
-
const { graphId, nodeKind, backend } = args;
|
|
2942
|
-
if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
|
|
2943
|
-
return;
|
|
2944
|
-
}
|
|
2945
|
-
const embeddingFields = getEmbeddingFields(schema);
|
|
2946
|
-
if (embeddingFields.length === 0) {
|
|
2947
|
-
return;
|
|
2948
|
-
}
|
|
2949
|
-
for (const field of embeddingFields) {
|
|
2950
|
-
const rows = [];
|
|
2951
|
-
const deletionIds = [];
|
|
2952
|
-
for (const item of items) {
|
|
2953
|
-
const value = item.props[field.fieldPath];
|
|
2954
|
-
if (isValidEmbeddingValue(value)) {
|
|
2955
|
-
rows.push({ nodeId: item.nodeId, embedding: value });
|
|
2956
|
-
} else if (value === void 0) {
|
|
2957
|
-
deletionIds.push(item.nodeId);
|
|
2958
|
-
}
|
|
2959
|
-
}
|
|
2960
|
-
if (rows.length > 0) {
|
|
2961
|
-
if (backend.upsertEmbeddingBatch === void 0) {
|
|
2962
|
-
for (const row of rows) {
|
|
2963
|
-
await backend.upsertEmbedding({
|
|
2964
|
-
graphId,
|
|
2965
|
-
nodeKind,
|
|
2966
|
-
nodeId: row.nodeId,
|
|
2967
|
-
fieldPath: field.fieldPath,
|
|
2968
|
-
embedding: row.embedding,
|
|
2969
|
-
dimensions: field.dimensions,
|
|
2970
|
-
metric: field.metric,
|
|
2971
|
-
indexType: field.indexType
|
|
2972
|
-
});
|
|
2973
|
-
}
|
|
2974
|
-
} else {
|
|
2975
|
-
await backend.upsertEmbeddingBatch({
|
|
2976
|
-
graphId,
|
|
2977
|
-
nodeKind,
|
|
2978
|
-
fieldPath: field.fieldPath,
|
|
2979
|
-
dimensions: field.dimensions,
|
|
2980
|
-
metric: field.metric,
|
|
2981
|
-
indexType: field.indexType,
|
|
2982
|
-
rows
|
|
2983
|
-
});
|
|
2984
|
-
}
|
|
2985
|
-
}
|
|
2986
|
-
if (deletionIds.length > 0 && backend.deleteEmbeddingBatch !== void 0) {
|
|
2987
|
-
await backend.deleteEmbeddingBatch({
|
|
2988
|
-
graphId,
|
|
2989
|
-
nodeKind,
|
|
2990
|
-
nodeIds: deletionIds,
|
|
2991
|
-
fieldPath: field.fieldPath,
|
|
2992
|
-
dimensions: field.dimensions,
|
|
2993
|
-
metric: field.metric,
|
|
2994
|
-
indexType: field.indexType
|
|
2995
|
-
});
|
|
2996
|
-
} else {
|
|
2997
|
-
for (const nodeId of deletionIds) {
|
|
2998
|
-
await backend.deleteEmbedding({
|
|
2999
|
-
graphId,
|
|
3000
|
-
nodeKind,
|
|
3001
|
-
nodeId,
|
|
3002
|
-
fieldPath: field.fieldPath,
|
|
3003
|
-
dimensions: field.dimensions,
|
|
3004
|
-
metric: field.metric,
|
|
3005
|
-
indexType: field.indexType
|
|
3006
|
-
});
|
|
3007
|
-
}
|
|
3008
|
-
}
|
|
3009
|
-
}
|
|
3010
|
-
}
|
|
3011
|
-
async function deleteNodeEmbeddings(ctx, schema) {
|
|
3012
|
-
const { backend } = ctx;
|
|
3013
|
-
if (!backend.deleteEmbedding) {
|
|
3014
|
-
return;
|
|
3015
|
-
}
|
|
3016
|
-
const embeddingFields = getEmbeddingFields(schema);
|
|
3017
|
-
if (embeddingFields.length === 0) {
|
|
3018
|
-
return;
|
|
3019
|
-
}
|
|
3020
|
-
for (const field of embeddingFields) {
|
|
3021
|
-
await backend.deleteEmbedding({
|
|
3022
|
-
graphId: ctx.graphId,
|
|
3023
|
-
nodeKind: ctx.nodeKind,
|
|
3024
|
-
nodeId: ctx.nodeId,
|
|
3025
|
-
fieldPath: field.fieldPath,
|
|
3026
|
-
dimensions: field.dimensions,
|
|
3027
|
-
metric: field.metric,
|
|
3028
|
-
indexType: field.indexType
|
|
3029
|
-
});
|
|
3030
|
-
}
|
|
3031
|
-
}
|
|
3032
|
-
function isValidEmbeddingValue(value) {
|
|
3033
|
-
if (!Array.isArray(value)) {
|
|
3034
|
-
return false;
|
|
3035
|
-
}
|
|
3036
|
-
return value.every((n) => typeof n === "number" && Number.isFinite(n));
|
|
3037
|
-
}
|
|
3038
|
-
|
|
3039
|
-
// src/store/fulltext-sync.ts
|
|
3040
|
-
var FIELD_SEPARATOR = "\n";
|
|
3041
|
-
function resolveCombinedLanguage(fields) {
|
|
3042
|
-
return fields[0]?.metadata.language ?? chunkHAHNRASW_cjs.DEFAULT_SEARCHABLE_LANGUAGE;
|
|
3043
|
-
}
|
|
3044
|
-
function computeFulltextContent(schema, props) {
|
|
3045
|
-
const searchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema);
|
|
3046
|
-
if (searchableFields.length === 0) return void 0;
|
|
3047
|
-
const parts = [];
|
|
3048
|
-
for (const field of searchableFields) {
|
|
3049
|
-
const value = props[field.fieldPath];
|
|
3050
|
-
if (typeof value === "string" && value.length > 0) {
|
|
3051
|
-
parts.push(value);
|
|
3052
|
-
}
|
|
3053
|
-
}
|
|
3054
|
-
if (parts.length === 0) return void 0;
|
|
3055
|
-
return {
|
|
3056
|
-
content: parts.join(FIELD_SEPARATOR),
|
|
3057
|
-
language: resolveCombinedLanguage(searchableFields)
|
|
3058
|
-
};
|
|
3059
|
-
}
|
|
3060
|
-
async function syncFulltext(ctx, schema, props) {
|
|
3061
|
-
const { backend } = ctx;
|
|
3062
|
-
if (!backend.upsertFulltext || !backend.deleteFulltext) {
|
|
3063
|
-
return;
|
|
3064
|
-
}
|
|
3065
|
-
const computed = computeFulltextContent(schema, props);
|
|
3066
|
-
if (computed !== void 0) {
|
|
3067
|
-
await backend.upsertFulltext({
|
|
3068
|
-
graphId: ctx.graphId,
|
|
3069
|
-
nodeKind: ctx.nodeKind,
|
|
3070
|
-
nodeId: ctx.nodeId,
|
|
3071
|
-
content: computed.content,
|
|
3072
|
-
language: computed.language
|
|
3073
|
-
});
|
|
3074
|
-
return;
|
|
3075
|
-
}
|
|
3076
|
-
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) return;
|
|
3077
|
-
await backend.deleteFulltext({
|
|
3078
|
-
graphId: ctx.graphId,
|
|
3079
|
-
nodeKind: ctx.nodeKind,
|
|
3080
|
-
nodeId: ctx.nodeId
|
|
3081
|
-
});
|
|
3082
|
-
}
|
|
3083
|
-
async function syncFulltextBatchForKind(args, schema, items) {
|
|
3084
|
-
const { graphId, nodeKind, backend } = args;
|
|
3085
|
-
if (!backend.upsertFulltext || !backend.deleteFulltext) {
|
|
3086
|
-
return;
|
|
3087
|
-
}
|
|
3088
|
-
const rows = [];
|
|
3089
|
-
const emptyContentIds = [];
|
|
3090
|
-
const hasSearchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema).length > 0;
|
|
3091
|
-
for (const item of items) {
|
|
3092
|
-
const computed = computeFulltextContent(schema, item.props);
|
|
3093
|
-
if (computed !== void 0) {
|
|
3094
|
-
rows.push({
|
|
3095
|
-
nodeId: item.nodeId,
|
|
3096
|
-
content: computed.content,
|
|
3097
|
-
language: computed.language
|
|
3098
|
-
});
|
|
3099
|
-
} else if (hasSearchableFields) {
|
|
3100
|
-
emptyContentIds.push(item.nodeId);
|
|
3101
|
-
}
|
|
3102
|
-
}
|
|
3103
|
-
if (rows.length > 0) {
|
|
3104
|
-
if (backend.upsertFulltextBatch === void 0) {
|
|
3105
|
-
for (const row of rows) {
|
|
3106
|
-
await backend.upsertFulltext({
|
|
3107
|
-
graphId,
|
|
3108
|
-
nodeKind,
|
|
3109
|
-
nodeId: row.nodeId,
|
|
3110
|
-
content: row.content,
|
|
3111
|
-
language: row.language
|
|
3112
|
-
});
|
|
3113
|
-
}
|
|
3114
|
-
} else {
|
|
3115
|
-
await backend.upsertFulltextBatch({ graphId, nodeKind, rows });
|
|
3116
|
-
}
|
|
3117
|
-
}
|
|
3118
|
-
if (emptyContentIds.length > 0) {
|
|
3119
|
-
if (backend.deleteFulltextBatch === void 0) {
|
|
3120
|
-
for (const nodeId of emptyContentIds) {
|
|
3121
|
-
await backend.deleteFulltext({ graphId, nodeKind, nodeId });
|
|
3122
|
-
}
|
|
3123
|
-
} else {
|
|
3124
|
-
await backend.deleteFulltextBatch({
|
|
3125
|
-
graphId,
|
|
3126
|
-
nodeKind,
|
|
3127
|
-
nodeIds: emptyContentIds
|
|
3128
|
-
});
|
|
3129
|
-
}
|
|
3130
|
-
}
|
|
3131
|
-
}
|
|
3132
|
-
async function deleteNodeFulltext(ctx, schema) {
|
|
3133
|
-
const { backend } = ctx;
|
|
3134
|
-
if (!backend.deleteFulltext) {
|
|
3135
|
-
return;
|
|
3136
|
-
}
|
|
3137
|
-
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) {
|
|
3138
|
-
return;
|
|
3139
|
-
}
|
|
3140
|
-
await backend.deleteFulltext({
|
|
3141
|
-
graphId: ctx.graphId,
|
|
3142
|
-
nodeKind: ctx.nodeKind,
|
|
3143
|
-
nodeId: ctx.nodeId
|
|
3144
|
-
});
|
|
3145
|
-
}
|
|
3146
|
-
|
|
3147
|
-
// src/constraints/index.ts
|
|
3148
|
-
var UNIQUE_KEY_SEPARATOR = "";
|
|
3149
|
-
var UNIQUE_KEY_NULL_MARKER = "";
|
|
3150
|
-
function computeUniqueKey(props, fields, collation) {
|
|
3151
|
-
const values = fields.map((field) => {
|
|
3152
|
-
const value = props[field];
|
|
3153
|
-
if (value === void 0 || value === null) {
|
|
3154
|
-
return UNIQUE_KEY_NULL_MARKER;
|
|
3155
|
-
}
|
|
3156
|
-
const stringValue = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? value.toString() : JSON.stringify(value);
|
|
3157
|
-
return collation === "caseInsensitive" ? stringValue.toLowerCase() : stringValue;
|
|
3158
|
-
});
|
|
3159
|
-
return values.join(UNIQUE_KEY_SEPARATOR);
|
|
3160
|
-
}
|
|
3161
|
-
function checkWherePredicate(constraint, props) {
|
|
3162
|
-
if (!constraint.where) {
|
|
3163
|
-
return true;
|
|
3164
|
-
}
|
|
3165
|
-
const predicateBuilder = buildPredicateContext(props);
|
|
3166
|
-
const predicate2 = constraint.where(predicateBuilder);
|
|
3167
|
-
return evaluatePredicate(predicate2, props);
|
|
3168
|
-
}
|
|
3169
|
-
function buildPredicateContext(props) {
|
|
3170
|
-
const context = {};
|
|
3171
|
-
for (const key of Object.keys(props)) {
|
|
3172
|
-
context[key] = {
|
|
3173
|
-
isNull: () => ({
|
|
3174
|
-
__type: "unique_predicate",
|
|
3175
|
-
field: key,
|
|
3176
|
-
op: "isNull"
|
|
3177
|
-
}),
|
|
3178
|
-
isNotNull: () => ({
|
|
3179
|
-
__type: "unique_predicate",
|
|
3180
|
-
field: key,
|
|
3181
|
-
op: "isNotNull"
|
|
3182
|
-
})
|
|
3183
|
-
};
|
|
3184
|
-
}
|
|
3185
|
-
return context;
|
|
3186
|
-
}
|
|
3187
|
-
function evaluatePredicate(predicate2, props) {
|
|
3188
|
-
if (typeof predicate2 !== "object" || predicate2 === null || !("__type" in predicate2)) {
|
|
3189
|
-
return true;
|
|
3190
|
-
}
|
|
3191
|
-
const pred = predicate2;
|
|
3192
|
-
if (pred.__type !== "unique_predicate") {
|
|
3193
|
-
return true;
|
|
3194
|
-
}
|
|
3195
|
-
const value = props[pred.field];
|
|
3196
|
-
if (pred.op === "isNull") {
|
|
3197
|
-
return value === null || value === void 0;
|
|
3198
|
-
}
|
|
3199
|
-
return chunk764JHTLT_cjs.isPresent(value);
|
|
3200
|
-
}
|
|
3201
|
-
function getKindsForUniquenessCheck(baseKind, scope, registry) {
|
|
3202
|
-
if (scope === "kind") {
|
|
3203
|
-
return [baseKind];
|
|
3204
|
-
}
|
|
3205
|
-
const root = findRootAncestor(baseKind, registry);
|
|
3206
|
-
return registry.expandSubClasses(root);
|
|
3207
|
-
}
|
|
3208
|
-
function findRootAncestor(kind, registry) {
|
|
3209
|
-
const ancestors = registry.getAncestors(kind);
|
|
3210
|
-
if (ancestors.size === 0) {
|
|
3211
|
-
return kind;
|
|
3212
|
-
}
|
|
3213
|
-
for (const ancestor of ancestors) {
|
|
3214
|
-
if (registry.getAncestors(ancestor).size === 0) {
|
|
3215
|
-
return ancestor;
|
|
3216
|
-
}
|
|
3217
|
-
}
|
|
3218
|
-
const firstAncestor = [...ancestors][0];
|
|
3219
|
-
return firstAncestor ? findRootAncestor(firstAncestor, registry) : kind;
|
|
3220
|
-
}
|
|
3221
|
-
function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeCount, hasActiveEdge) {
|
|
3222
|
-
switch (cardinality) {
|
|
3223
|
-
case "many": {
|
|
3224
|
-
return void 0;
|
|
3225
|
-
}
|
|
3226
|
-
case "one": {
|
|
3227
|
-
if (existingEdgeCount > 0) {
|
|
3228
|
-
return new chunkC4F7VJ5D_cjs.CardinalityError({
|
|
3229
|
-
edgeKind,
|
|
3230
|
-
fromKind,
|
|
3231
|
-
fromId,
|
|
3232
|
-
cardinality: "one",
|
|
3233
|
-
existingCount: existingEdgeCount
|
|
3234
|
-
});
|
|
3235
|
-
}
|
|
3236
|
-
return void 0;
|
|
3237
|
-
}
|
|
3238
|
-
case "unique": {
|
|
3239
|
-
return void 0;
|
|
3240
|
-
}
|
|
3241
|
-
case "oneActive": {
|
|
3242
|
-
if (hasActiveEdge) {
|
|
3243
|
-
return new chunkC4F7VJ5D_cjs.CardinalityError({
|
|
3244
|
-
edgeKind,
|
|
3245
|
-
fromKind,
|
|
3246
|
-
fromId,
|
|
3247
|
-
cardinality: "oneActive",
|
|
3248
|
-
existingCount: 1
|
|
3249
|
-
});
|
|
3250
|
-
}
|
|
3251
|
-
return void 0;
|
|
3252
|
-
}
|
|
3253
|
-
}
|
|
3254
|
-
}
|
|
3255
|
-
function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCount) {
|
|
3256
|
-
if (existingCount > 0) {
|
|
3257
|
-
return new chunkC4F7VJ5D_cjs.CardinalityError({
|
|
3258
|
-
edgeKind,
|
|
3259
|
-
fromKind,
|
|
3260
|
-
fromId,
|
|
3261
|
-
cardinality: "unique",
|
|
3262
|
-
existingCount
|
|
3263
|
-
});
|
|
3264
|
-
}
|
|
3265
|
-
return void 0;
|
|
3266
|
-
}
|
|
3267
|
-
function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registry) {
|
|
3268
|
-
const validFromKinds = registration.from.map((node) => node.kind);
|
|
3269
|
-
if (!registry.isAssignableToAny(fromKind, validFromKinds)) {
|
|
3270
|
-
return new chunkC4F7VJ5D_cjs.EndpointError({
|
|
3271
|
-
edgeKind,
|
|
3272
|
-
endpoint: "from",
|
|
3273
|
-
actualKind: fromKind,
|
|
3274
|
-
expectedKinds: validFromKinds
|
|
3275
|
-
});
|
|
3276
|
-
}
|
|
3277
|
-
const validToKinds = registration.to.map((node) => node.kind);
|
|
3278
|
-
if (!registry.isAssignableToAny(toKind, validToKinds)) {
|
|
3279
|
-
return new chunkC4F7VJ5D_cjs.EndpointError({
|
|
3280
|
-
edgeKind,
|
|
3281
|
-
endpoint: "to",
|
|
3282
|
-
actualKind: toKind,
|
|
3283
|
-
expectedKinds: validToKinds
|
|
3284
|
-
});
|
|
3285
|
-
}
|
|
3286
|
-
return void 0;
|
|
3287
|
-
}
|
|
3288
|
-
function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
|
|
3289
|
-
for (const existingKind of existingKinds) {
|
|
3290
|
-
if (registry.areDisjoint(nodeKind, existingKind)) {
|
|
3291
|
-
return new chunkC4F7VJ5D_cjs.DisjointError({
|
|
3292
|
-
nodeId,
|
|
3293
|
-
attemptedKind: nodeKind,
|
|
3294
|
-
conflictingKind: existingKind
|
|
3295
|
-
});
|
|
3296
|
-
}
|
|
3297
|
-
}
|
|
3298
|
-
return void 0;
|
|
3299
|
-
}
|
|
3300
|
-
|
|
3301
|
-
// src/store/uniqueness.ts
|
|
3302
|
-
function createUniquenessContext(graphId, registry, backend) {
|
|
3303
|
-
return { graphId, registry, backend };
|
|
3304
|
-
}
|
|
3305
|
-
async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
|
|
3306
|
-
for (const constraint of constraints) {
|
|
3307
|
-
if (!checkWherePredicate(constraint, props)) {
|
|
3308
|
-
continue;
|
|
3309
|
-
}
|
|
3310
|
-
const key = computeUniqueKey(
|
|
3311
|
-
props,
|
|
3312
|
-
constraint.fields,
|
|
3313
|
-
constraint.collation
|
|
3314
|
-
);
|
|
3315
|
-
const kindsToCheck = getKindsForUniquenessCheck(
|
|
3316
|
-
kind,
|
|
3317
|
-
constraint.scope,
|
|
3318
|
-
ctx.registry
|
|
3319
|
-
);
|
|
3320
|
-
for (const kindToCheck of kindsToCheck) {
|
|
3321
|
-
const existing = await ctx.backend.checkUnique({
|
|
3322
|
-
graphId: ctx.graphId,
|
|
3323
|
-
nodeKind: kindToCheck,
|
|
3324
|
-
constraintName: constraint.name,
|
|
3325
|
-
key
|
|
3326
|
-
});
|
|
3327
|
-
if (existing && existing.node_id !== id) {
|
|
3328
|
-
throw new chunkC4F7VJ5D_cjs.UniquenessError({
|
|
3329
|
-
constraintName: constraint.name,
|
|
3330
|
-
kind: kindToCheck,
|
|
3331
|
-
existingId: existing.node_id,
|
|
3332
|
-
newId: id,
|
|
3333
|
-
fields: constraint.fields
|
|
3334
|
-
});
|
|
3335
|
-
}
|
|
3336
|
-
}
|
|
3337
|
-
}
|
|
3338
|
-
}
|
|
3339
|
-
async function insertUniquenessEntries(ctx, kind, id, props, constraints) {
|
|
3340
|
-
for (const constraint of constraints) {
|
|
3341
|
-
if (!checkWherePredicate(constraint, props)) {
|
|
3342
|
-
continue;
|
|
3343
|
-
}
|
|
3344
|
-
const key = computeUniqueKey(
|
|
3345
|
-
props,
|
|
3346
|
-
constraint.fields,
|
|
3347
|
-
constraint.collation
|
|
3348
|
-
);
|
|
3349
|
-
await ctx.backend.insertUnique({
|
|
3350
|
-
graphId: ctx.graphId,
|
|
3351
|
-
nodeKind: kind,
|
|
3352
|
-
constraintName: constraint.name,
|
|
3353
|
-
key,
|
|
3354
|
-
nodeId: id,
|
|
3355
|
-
concreteKind: kind
|
|
3356
|
-
});
|
|
3357
|
-
}
|
|
3358
|
-
}
|
|
3359
|
-
async function insertUniquenessEntriesBatch(ctx, items) {
|
|
3360
|
-
const entries = [];
|
|
3361
|
-
for (const item of items) {
|
|
3362
|
-
for (const constraint of item.constraints) {
|
|
3363
|
-
if (!checkWherePredicate(constraint, item.props)) {
|
|
3364
|
-
continue;
|
|
3365
|
-
}
|
|
3366
|
-
entries.push({
|
|
3367
|
-
graphId: ctx.graphId,
|
|
3368
|
-
nodeKind: item.kind,
|
|
3369
|
-
constraintName: constraint.name,
|
|
3370
|
-
key: computeUniqueKey(
|
|
3371
|
-
item.props,
|
|
3372
|
-
constraint.fields,
|
|
3373
|
-
constraint.collation
|
|
3374
|
-
),
|
|
3375
|
-
nodeId: item.id,
|
|
3376
|
-
concreteKind: item.kind
|
|
3377
|
-
});
|
|
3378
|
-
}
|
|
3379
|
-
}
|
|
3380
|
-
if (entries.length === 0) return;
|
|
3381
|
-
if (ctx.backend.insertUniqueBatch !== void 0) {
|
|
3382
|
-
await ctx.backend.insertUniqueBatch(entries);
|
|
3383
|
-
return;
|
|
3384
|
-
}
|
|
3385
|
-
for (const entry of entries) {
|
|
3386
|
-
await ctx.backend.insertUnique(entry);
|
|
3387
|
-
}
|
|
3388
|
-
}
|
|
3389
|
-
async function deleteUniquenessEntries(ctx, kind, props, constraints) {
|
|
3390
|
-
for (const constraint of constraints) {
|
|
3391
|
-
if (!checkWherePredicate(constraint, props)) {
|
|
3392
|
-
continue;
|
|
3393
|
-
}
|
|
3394
|
-
const key = computeUniqueKey(
|
|
3395
|
-
props,
|
|
3396
|
-
constraint.fields,
|
|
3397
|
-
constraint.collation
|
|
3398
|
-
);
|
|
3399
|
-
await ctx.backend.deleteUnique({
|
|
3400
|
-
graphId: ctx.graphId,
|
|
3401
|
-
nodeKind: kind,
|
|
3402
|
-
constraintName: constraint.name,
|
|
3403
|
-
key
|
|
3404
|
-
});
|
|
3405
|
-
}
|
|
3406
|
-
}
|
|
3407
|
-
async function updateUniquenessEntries(ctx, kind, id, oldProps, newProps, constraints) {
|
|
3408
|
-
const pending = [];
|
|
3409
|
-
for (const constraint of constraints) {
|
|
3410
|
-
const oldApplies = checkWherePredicate(constraint, oldProps);
|
|
3411
|
-
const newApplies = checkWherePredicate(constraint, newProps);
|
|
3412
|
-
const oldKey = oldApplies ? computeUniqueKey(oldProps, constraint.fields, constraint.collation) : void 0;
|
|
3413
|
-
const newKey = newApplies ? computeUniqueKey(newProps, constraint.fields, constraint.collation) : void 0;
|
|
3414
|
-
if (!oldApplies && !newApplies) {
|
|
3415
|
-
continue;
|
|
3416
|
-
}
|
|
3417
|
-
if (oldApplies && newApplies && oldKey === newKey) {
|
|
3418
|
-
continue;
|
|
3419
|
-
}
|
|
3420
|
-
if (newApplies && newKey !== void 0) {
|
|
3421
|
-
const kindsToCheck = getKindsForUniquenessCheck(
|
|
3422
|
-
kind,
|
|
3423
|
-
constraint.scope,
|
|
3424
|
-
ctx.registry
|
|
3425
|
-
);
|
|
3426
|
-
for (const kindToCheck of kindsToCheck) {
|
|
3427
|
-
const existing = await ctx.backend.checkUnique({
|
|
3428
|
-
graphId: ctx.graphId,
|
|
3429
|
-
nodeKind: kindToCheck,
|
|
3430
|
-
constraintName: constraint.name,
|
|
3431
|
-
key: newKey
|
|
3432
|
-
});
|
|
3433
|
-
if (existing && existing.node_id !== id) {
|
|
3434
|
-
throw new chunkC4F7VJ5D_cjs.UniquenessError({
|
|
3435
|
-
constraintName: constraint.name,
|
|
3436
|
-
kind: kindToCheck,
|
|
3437
|
-
existingId: existing.node_id,
|
|
3438
|
-
newId: id,
|
|
3439
|
-
fields: constraint.fields
|
|
3440
|
-
});
|
|
3441
|
-
}
|
|
3442
|
-
}
|
|
3443
|
-
}
|
|
3444
|
-
pending.push({ constraintName: constraint.name, oldKey, newKey });
|
|
3445
|
-
}
|
|
3446
|
-
for (const mutation of pending) {
|
|
3447
|
-
if (mutation.oldKey !== void 0) {
|
|
3448
|
-
await ctx.backend.deleteUnique({
|
|
3449
|
-
graphId: ctx.graphId,
|
|
3450
|
-
nodeKind: kind,
|
|
3451
|
-
constraintName: mutation.constraintName,
|
|
3452
|
-
key: mutation.oldKey
|
|
3453
|
-
});
|
|
3454
|
-
}
|
|
3455
|
-
}
|
|
3456
|
-
for (const mutation of pending) {
|
|
3457
|
-
if (mutation.newKey !== void 0) {
|
|
3458
|
-
await ctx.backend.insertUnique({
|
|
3459
|
-
graphId: ctx.graphId,
|
|
3460
|
-
nodeKind: kind,
|
|
3461
|
-
constraintName: mutation.constraintName,
|
|
3462
|
-
key: mutation.newKey,
|
|
3463
|
-
nodeId: id,
|
|
3464
|
-
concreteKind: kind
|
|
3465
|
-
});
|
|
3466
|
-
}
|
|
3467
|
-
}
|
|
3468
|
-
}
|
|
3469
|
-
|
|
3470
|
-
// src/store/operations/node-write-pipeline.ts
|
|
3471
|
-
function createNodeWriteContext(graphId, registry, lock) {
|
|
3472
|
-
return { graphId, registry, lock };
|
|
3473
|
-
}
|
|
3474
|
-
function uniquenessContext(ctx, backend) {
|
|
3475
|
-
return createUniquenessContext(ctx.graphId, ctx.registry, backend);
|
|
3476
|
-
}
|
|
3477
|
-
function nodeSyncContext(ctx, kind, id, backend) {
|
|
3478
|
-
return { graphId: ctx.graphId, nodeKind: kind, nodeId: id, backend };
|
|
3479
|
-
}
|
|
3480
|
-
async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
|
|
3481
|
-
if (policy?.enforceDeleteBehavior === false) return;
|
|
3482
|
-
const behavior = args.onDelete ?? "restrict";
|
|
3483
|
-
const connectedEdges = await backend.findEdgesConnectedTo({
|
|
3484
|
-
graphId: ctx.graphId,
|
|
3485
|
-
nodeKind: args.kind,
|
|
3486
|
-
nodeId: args.id
|
|
3487
|
-
});
|
|
3488
|
-
if (connectedEdges.length === 0) return;
|
|
3489
|
-
switch (behavior) {
|
|
3490
|
-
case "restrict": {
|
|
3491
|
-
throw new chunkC4F7VJ5D_cjs.RestrictedDeleteError({
|
|
3492
|
-
nodeKind: args.kind,
|
|
3493
|
-
nodeId: args.id,
|
|
3494
|
-
edgeCount: connectedEdges.length,
|
|
3495
|
-
edgeKinds: [...new Set(connectedEdges.map((edge) => edge.kind))]
|
|
3496
|
-
});
|
|
3497
|
-
}
|
|
3498
|
-
case "cascade":
|
|
3499
|
-
case "disconnect": {
|
|
3500
|
-
const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
|
|
3501
|
-
if (batchDelete !== void 0) {
|
|
3502
|
-
await batchDelete({
|
|
3503
|
-
graphId: ctx.graphId,
|
|
3504
|
-
ids: connectedEdges.map((edge) => edge.id)
|
|
3505
|
-
});
|
|
3506
|
-
break;
|
|
3507
|
-
}
|
|
3508
|
-
for (const edge of connectedEdges) {
|
|
3509
|
-
await (args.mode === "hard" ? backend.hardDeleteEdge({ graphId: ctx.graphId, id: edge.id }) : backend.deleteEdge({ graphId: ctx.graphId, id: edge.id }));
|
|
3510
|
-
}
|
|
3511
|
-
break;
|
|
3512
|
-
}
|
|
3513
|
-
}
|
|
3514
|
-
}
|
|
3515
|
-
async function applyNodeInsertSideEffects(ctx, args, backend) {
|
|
3516
|
-
await insertUniquenessEntries(
|
|
3517
|
-
uniquenessContext(ctx, backend),
|
|
3518
|
-
args.kind,
|
|
3519
|
-
args.id,
|
|
3520
|
-
args.props,
|
|
3521
|
-
args.uniqueConstraints
|
|
3522
|
-
);
|
|
3523
|
-
await Promise.all([
|
|
3524
|
-
syncEmbeddings(
|
|
3525
|
-
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
3526
|
-
args.schema,
|
|
3527
|
-
args.props
|
|
3528
|
-
),
|
|
3529
|
-
syncFulltext(
|
|
3530
|
-
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
3531
|
-
args.schema,
|
|
3532
|
-
args.props
|
|
3533
|
-
)
|
|
3534
|
-
]);
|
|
3535
|
-
}
|
|
3536
|
-
async function applyNodeInsertSideEffectsBatch(ctx, items, backend) {
|
|
3537
|
-
if (items.length === 0) return;
|
|
3538
|
-
await insertUniquenessEntriesBatch(
|
|
3539
|
-
uniquenessContext(ctx, backend),
|
|
3540
|
-
items.map((item) => ({
|
|
3541
|
-
kind: item.kind,
|
|
3542
|
-
id: item.id,
|
|
3543
|
-
props: item.props,
|
|
3544
|
-
constraints: item.uniqueConstraints
|
|
3545
|
-
}))
|
|
3546
|
-
);
|
|
3547
|
-
const byKind = /* @__PURE__ */ new Map();
|
|
3548
|
-
for (const item of items) {
|
|
3549
|
-
const group = byKind.get(item.kind) ?? { schema: item.schema, rows: [] };
|
|
3550
|
-
group.rows.push({ nodeId: item.id, props: item.props });
|
|
3551
|
-
byKind.set(item.kind, group);
|
|
3552
|
-
}
|
|
3553
|
-
await Promise.all(
|
|
3554
|
-
[...byKind.entries()].flatMap(([kind, group]) => {
|
|
3555
|
-
const syncArguments = { graphId: ctx.graphId, nodeKind: kind, backend };
|
|
3556
|
-
return [
|
|
3557
|
-
syncEmbeddingsBatchForKind(syncArguments, group.schema, group.rows),
|
|
3558
|
-
syncFulltextBatchForKind(syncArguments, group.schema, group.rows)
|
|
3559
|
-
];
|
|
3560
|
-
})
|
|
3561
|
-
);
|
|
3562
|
-
}
|
|
3563
|
-
function parseRowProps(row) {
|
|
3564
|
-
return chunkEKFUG4G7_cjs.rowPropsToObject(row.props);
|
|
3565
|
-
}
|
|
3566
|
-
async function applyNodeUpdate(ctx, args, backend) {
|
|
3567
|
-
const { kind, id } = args.existing;
|
|
3568
|
-
if (args.existing.deleted_at === void 0) {
|
|
3569
|
-
await updateUniquenessEntries(
|
|
3570
|
-
uniquenessContext(ctx, backend),
|
|
3571
|
-
kind,
|
|
3572
|
-
id,
|
|
3573
|
-
parseRowProps(args.existing),
|
|
3574
|
-
args.validatedProps,
|
|
3575
|
-
args.uniqueConstraints
|
|
3576
|
-
);
|
|
3577
|
-
} else {
|
|
3578
|
-
await checkUniquenessConstraints(
|
|
3579
|
-
uniquenessContext(ctx, backend),
|
|
3580
|
-
kind,
|
|
3581
|
-
id,
|
|
3582
|
-
args.validatedProps,
|
|
3583
|
-
args.uniqueConstraints
|
|
3584
|
-
);
|
|
3585
|
-
await insertUniquenessEntries(
|
|
3586
|
-
uniquenessContext(ctx, backend),
|
|
3587
|
-
kind,
|
|
3588
|
-
id,
|
|
3589
|
-
args.validatedProps,
|
|
3590
|
-
args.uniqueConstraints
|
|
3591
|
-
);
|
|
3592
|
-
}
|
|
3593
|
-
const updateParams = {
|
|
3594
|
-
graphId: ctx.graphId,
|
|
3595
|
-
kind,
|
|
3596
|
-
id,
|
|
3597
|
-
props: args.validatedProps,
|
|
3598
|
-
incrementVersion: true
|
|
3599
|
-
};
|
|
3600
|
-
if (args.validTo !== void 0) updateParams.validTo = args.validTo;
|
|
3601
|
-
if (args.clearDeleted) updateParams.clearDeleted = true;
|
|
3602
|
-
const row = await backend.updateNode(updateParams);
|
|
3603
|
-
await Promise.all([
|
|
3604
|
-
syncEmbeddings(
|
|
3605
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3606
|
-
args.schema,
|
|
3607
|
-
args.validatedProps
|
|
3608
|
-
),
|
|
3609
|
-
syncFulltext(
|
|
3610
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3611
|
-
args.schema,
|
|
3612
|
-
args.validatedProps
|
|
3613
|
-
)
|
|
3614
|
-
]);
|
|
3615
|
-
return row;
|
|
3616
|
-
}
|
|
3617
|
-
async function applyNodeSoftDelete(ctx, args, backend, policy) {
|
|
3618
|
-
const { kind, id } = args.existing;
|
|
3619
|
-
await enforceNodeDeleteBehavior(
|
|
3620
|
-
ctx,
|
|
3621
|
-
{ kind, id, mode: "soft", onDelete: args.onDelete },
|
|
3622
|
-
backend,
|
|
3623
|
-
policy
|
|
3624
|
-
);
|
|
3625
|
-
await backend.deleteNode({
|
|
3626
|
-
graphId: ctx.graphId,
|
|
3627
|
-
kind,
|
|
3628
|
-
id
|
|
3629
|
-
});
|
|
3630
|
-
await deleteUniquenessEntries(
|
|
3631
|
-
uniquenessContext(ctx, backend),
|
|
3632
|
-
kind,
|
|
3633
|
-
parseRowProps(args.existing),
|
|
3634
|
-
args.uniqueConstraints
|
|
3635
|
-
);
|
|
3636
|
-
await deleteNodeEmbeddings(
|
|
3637
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3638
|
-
args.schema
|
|
3639
|
-
);
|
|
3640
|
-
await deleteNodeFulltext(
|
|
3641
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3642
|
-
args.schema
|
|
3643
|
-
);
|
|
3644
|
-
}
|
|
3645
|
-
async function applyNodeHardDelete(ctx, args, backend) {
|
|
3646
|
-
await enforceNodeDeleteBehavior(
|
|
3647
|
-
ctx,
|
|
3648
|
-
{ kind: args.kind, id: args.id, mode: "hard", onDelete: args.onDelete },
|
|
3649
|
-
backend
|
|
3650
|
-
);
|
|
3651
|
-
await backend.hardDeleteNode({
|
|
3652
|
-
graphId: ctx.graphId,
|
|
3653
|
-
kind: args.kind,
|
|
3654
|
-
id: args.id
|
|
3655
|
-
});
|
|
3656
|
-
await deleteNodeEmbeddings(
|
|
3657
|
-
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
3658
|
-
args.schema
|
|
3659
|
-
);
|
|
3660
|
-
}
|
|
3661
|
-
async function applyNodeResurrect(ctx, args, backend) {
|
|
3662
|
-
const { kind, id } = args.existing;
|
|
3663
|
-
const props = parseRowProps(args.existing);
|
|
3664
|
-
await checkUniquenessConstraints(
|
|
3665
|
-
uniquenessContext(ctx, backend),
|
|
3666
|
-
kind,
|
|
3667
|
-
id,
|
|
3668
|
-
props,
|
|
3669
|
-
args.uniqueConstraints
|
|
3670
|
-
);
|
|
3671
|
-
await insertUniquenessEntries(
|
|
3672
|
-
uniquenessContext(ctx, backend),
|
|
3673
|
-
kind,
|
|
3674
|
-
id,
|
|
3675
|
-
props,
|
|
3676
|
-
args.uniqueConstraints
|
|
3677
|
-
);
|
|
3678
|
-
const row = await backend.updateNode({
|
|
3679
|
-
graphId: ctx.graphId,
|
|
3680
|
-
kind,
|
|
3681
|
-
id,
|
|
3682
|
-
props,
|
|
3683
|
-
incrementVersion: true,
|
|
3684
|
-
clearDeleted: true
|
|
3685
|
-
});
|
|
3686
|
-
await Promise.all([
|
|
3687
|
-
syncEmbeddings(nodeSyncContext(ctx, kind, id, backend), args.schema, props),
|
|
3688
|
-
syncFulltext(nodeSyncContext(ctx, kind, id, backend), args.schema, props)
|
|
3689
|
-
]);
|
|
3690
|
-
return row;
|
|
3195
|
+
// src/utils/compare.ts
|
|
3196
|
+
function compareStrings(left, right) {
|
|
3197
|
+
if (left < right) return -1;
|
|
3198
|
+
return left > right ? 1 : 0;
|
|
3199
|
+
}
|
|
3200
|
+
function compareCodePoints(left, right) {
|
|
3201
|
+
if (left === right) return 0;
|
|
3202
|
+
let leftIndex = 0;
|
|
3203
|
+
let rightIndex = 0;
|
|
3204
|
+
while (leftIndex < left.length && rightIndex < right.length) {
|
|
3205
|
+
const leftPoint = chunkN66HCGCY_cjs.requireDefined(left.codePointAt(leftIndex));
|
|
3206
|
+
const rightPoint = chunkN66HCGCY_cjs.requireDefined(right.codePointAt(rightIndex));
|
|
3207
|
+
if (leftPoint !== rightPoint) return leftPoint < rightPoint ? -1 : 1;
|
|
3208
|
+
leftIndex += leftPoint > 65535 ? 2 : 1;
|
|
3209
|
+
rightIndex += rightPoint > 65535 ? 2 : 1;
|
|
3210
|
+
}
|
|
3211
|
+
const leftExhausted = leftIndex >= left.length;
|
|
3212
|
+
const rightExhausted = rightIndex >= right.length;
|
|
3213
|
+
if (leftExhausted && rightExhausted) return 0;
|
|
3214
|
+
return leftExhausted ? -1 : 1;
|
|
3691
3215
|
}
|
|
3692
3216
|
|
|
3693
|
-
exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
|
|
3694
3217
|
exports.CURRENT_READ_INSTANT_PLACEHOLDER = CURRENT_READ_INSTANT_PLACEHOLDER;
|
|
3695
|
-
exports.
|
|
3696
|
-
exports.
|
|
3218
|
+
exports.IDENTITY_ASSERTION_COLUMNS = IDENTITY_ASSERTION_COLUMNS;
|
|
3219
|
+
exports.IDENTITY_PEER_CLASS_COLUMNS = IDENTITY_PEER_CLASS_COLUMNS;
|
|
3697
3220
|
exports.advanceRevisionClock = advanceRevisionClock;
|
|
3698
|
-
exports.applyNodeHardDelete = applyNodeHardDelete;
|
|
3699
|
-
exports.applyNodeInsertSideEffects = applyNodeInsertSideEffects;
|
|
3700
|
-
exports.applyNodeInsertSideEffectsBatch = applyNodeInsertSideEffectsBatch;
|
|
3701
|
-
exports.applyNodeResurrect = applyNodeResurrect;
|
|
3702
|
-
exports.applyNodeSoftDelete = applyNodeSoftDelete;
|
|
3703
|
-
exports.applyNodeUpdate = applyNodeUpdate;
|
|
3704
3221
|
exports.arrayField = arrayField;
|
|
3705
3222
|
exports.assertCurrentRecordedSchema = assertCurrentRecordedSchema;
|
|
3706
3223
|
exports.assertRecordedCaptureTransactionIsolation = assertRecordedCaptureTransactionIsolation;
|
|
@@ -3708,25 +3225,18 @@ exports.assertRevisionTrackableBackend = assertRevisionTrackableBackend;
|
|
|
3708
3225
|
exports.baseField = baseField;
|
|
3709
3226
|
exports.buildFieldBuilderForTypeInfo = buildFieldBuilderForTypeInfo;
|
|
3710
3227
|
exports.buildPredicateIndex = buildPredicateIndex;
|
|
3711
|
-
exports.checkCardinality = checkCardinality;
|
|
3712
|
-
exports.checkDisjointness = checkDisjointness;
|
|
3713
|
-
exports.checkUniqueEdge = checkUniqueEdge;
|
|
3714
|
-
exports.checkUniquenessConstraints = checkUniquenessConstraints;
|
|
3715
|
-
exports.checkWherePredicate = checkWherePredicate;
|
|
3716
3228
|
exports.closeRecordedHardDeletedKind = closeRecordedHardDeletedKind;
|
|
3229
|
+
exports.compareCodePoints = compareCodePoints;
|
|
3230
|
+
exports.compareStrings = compareStrings;
|
|
3717
3231
|
exports.compileFieldValue = compileFieldValue;
|
|
3718
3232
|
exports.compileKindFilter = compileKindFilter;
|
|
3719
3233
|
exports.compilePredicateClauses = compilePredicateClauses;
|
|
3720
3234
|
exports.compilePredicateExpression = compilePredicateExpression;
|
|
3721
3235
|
exports.compileTemporalFilter = compileTemporalFilter;
|
|
3722
|
-
exports.computeFulltextContent = computeFulltextContent;
|
|
3723
|
-
exports.computeUniqueKey = computeUniqueKey;
|
|
3724
3236
|
exports.createFulltextAccessor = createFulltextAccessor;
|
|
3725
3237
|
exports.createGraphBackendProjection = createGraphBackendProjection;
|
|
3726
|
-
exports.createNodeWriteContext = createNodeWriteContext;
|
|
3727
3238
|
exports.createRecordedBackend = createRecordedBackend;
|
|
3728
3239
|
exports.createRecordedTransactionScope = createRecordedTransactionScope;
|
|
3729
|
-
exports.createUniquenessContext = createUniquenessContext;
|
|
3730
3240
|
exports.currentReadInstant = currentReadInstant;
|
|
3731
3241
|
exports.currentReadInstantFor = currentReadInstantFor;
|
|
3732
3242
|
exports.dateField = dateField;
|
|
@@ -3739,13 +3249,17 @@ exports.extractVectorSimilarityPredicates = extractVectorSimilarityPredicates;
|
|
|
3739
3249
|
exports.fieldRef = fieldRef;
|
|
3740
3250
|
exports.generateId = generateId;
|
|
3741
3251
|
exports.getEdgeRowsByIds = getEdgeRowsByIds;
|
|
3742
|
-
exports.getEmbeddingFields = getEmbeddingFields;
|
|
3743
3252
|
exports.getFieldPointer = getFieldPointer;
|
|
3744
3253
|
exports.getHybridTargetAlias = getHybridTargetAlias;
|
|
3745
|
-
exports.getKindsForUniquenessCheck = getKindsForUniquenessCheck;
|
|
3746
3254
|
exports.getNodeKindsForAlias = getNodeKindsForAlias;
|
|
3747
3255
|
exports.getNodeRowsByIds = getNodeRowsByIds;
|
|
3748
3256
|
exports.getPredicatesForAlias = getPredicatesForAlias;
|
|
3257
|
+
exports.historicalIdentityPeerClassQuery = historicalIdentityPeerClassQuery;
|
|
3258
|
+
exports.historicalIdentityReconstructionCtes = historicalIdentityReconstructionCtes;
|
|
3259
|
+
exports.identityAssertionSnapshotSource = identityAssertionSnapshotSource;
|
|
3260
|
+
exports.identityNodeSnapshotSource = identityNodeSnapshotSource;
|
|
3261
|
+
exports.identityNodeVisibilitySql = identityNodeVisibilitySql;
|
|
3262
|
+
exports.identitySqlCoordinate = identitySqlCoordinate;
|
|
3749
3263
|
exports.inSubquery = inSubquery;
|
|
3750
3264
|
exports.isParameterRef = isParameterRef;
|
|
3751
3265
|
exports.lockRecordedGraphWrite = lockRecordedGraphWrite;
|
|
@@ -3765,16 +3279,12 @@ exports.runInsertBatch = runInsertBatch;
|
|
|
3765
3279
|
exports.runInsertBatchReturning = runInsertBatchReturning;
|
|
3766
3280
|
exports.runInsertNoReturn = runInsertNoReturn;
|
|
3767
3281
|
exports.sqlValueList = sqlValueList;
|
|
3768
|
-
exports.storeBackend = storeBackend;
|
|
3769
|
-
exports.storeRuntime = storeRuntime;
|
|
3770
3282
|
exports.stringField = stringField;
|
|
3771
3283
|
exports.throwHistoryUnsafeSqlAccess = throwHistoryUnsafeSqlAccess;
|
|
3772
3284
|
exports.throwRevisionTrackingUnsafeSqlAccess = throwRevisionTrackingUnsafeSqlAccess;
|
|
3773
|
-
exports.transactionBackend = transactionBackend;
|
|
3774
|
-
exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
|
|
3775
3285
|
exports.uncapturedGraphWriteLock = uncapturedGraphWriteLock;
|
|
3776
|
-
exports.validateEdgeEndpoints = validateEdgeEndpoints;
|
|
3777
3286
|
exports.withPinnedReadInstant = withPinnedReadInstant;
|
|
3778
3287
|
exports.withRecordedFlushObserver = withRecordedFlushObserver;
|
|
3779
|
-
|
|
3780
|
-
//# sourceMappingURL=chunk-
|
|
3288
|
+
exports.withRecordedIdentityMutationTarget = withRecordedIdentityMutationTarget;
|
|
3289
|
+
//# sourceMappingURL=chunk-PF6F5NLJ.cjs.map
|
|
3290
|
+
//# sourceMappingURL=chunk-PF6F5NLJ.cjs.map
|