@nicia-ai/typegraph 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/drizzle/indexes.cjs +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 -43
- 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 -39
- 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 -44
- 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 -40
- 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-XMYJY7NI.js → chunk-2LG2XB2M.js} +3 -3
- package/dist/{chunk-XMYJY7NI.js.map → chunk-2LG2XB2M.js.map} +1 -1
- package/dist/{chunk-QGKILWGZ.cjs → chunk-2NA5DYLO.cjs} +4 -4
- package/dist/{chunk-QGKILWGZ.cjs.map → chunk-2NA5DYLO.cjs.map} +1 -1
- package/dist/{chunk-5MUSU4ZP.cjs → chunk-3DHZCOT7.cjs} +20 -20
- package/dist/chunk-3DHZCOT7.cjs.map +1 -0
- package/dist/{chunk-OVUUTCPJ.cjs → chunk-4UGOKMI5.cjs} +268 -150
- package/dist/chunk-4UGOKMI5.cjs.map +1 -0
- package/dist/{chunk-FRHHDHKH.js → chunk-5262ZMTR.js} +26 -5
- package/dist/chunk-5262ZMTR.js.map +1 -0
- package/dist/{chunk-HOIFFY4M.js → chunk-5763DULU.js} +248 -76
- package/dist/chunk-5763DULU.js.map +1 -0
- package/dist/{chunk-7G32LIQM.js → chunk-5UVRGXD3.js} +277 -7
- package/dist/chunk-5UVRGXD3.js.map +1 -0
- package/dist/{chunk-IIT5K7SK.cjs → chunk-62ZP23AW.cjs} +15 -15
- package/dist/{chunk-IIT5K7SK.cjs.map → chunk-62ZP23AW.cjs.map} +1 -1
- package/dist/{chunk-S4KQ5LV4.js → chunk-775A4ZMN.js} +40 -6
- package/dist/chunk-775A4ZMN.js.map +1 -0
- package/dist/{chunk-QYWINYEA.cjs → chunk-7BQXPCGN.cjs} +830 -170
- 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-7GT72YHH.cjs +1979 -0
- package/dist/chunk-7GT72YHH.cjs.map +1 -0
- package/dist/{chunk-SQRD2CYF.js → chunk-7VQXLT5O.js} +717 -76
- package/dist/chunk-7VQXLT5O.js.map +1 -0
- package/dist/{chunk-BCP7LLOY.js → chunk-7Z5OR7KO.js} +2706 -625
- package/dist/chunk-7Z5OR7KO.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-FMMIX6N4.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-PAW2XUZN.js → chunk-ASTI57H3.js} +3 -3
- package/dist/{chunk-PAW2XUZN.js.map → chunk-ASTI57H3.js.map} +1 -1
- package/dist/{chunk-FMGEZBAQ.js → chunk-BKCUOV7A.js} +27 -5
- package/dist/chunk-BKCUOV7A.js.map +1 -0
- package/dist/chunk-BSFJMMV3.cjs +268 -0
- package/dist/chunk-BSFJMMV3.cjs.map +1 -0
- package/dist/{chunk-63KCKSSH.js → chunk-C23WSN5E.js} +209 -24
- package/dist/chunk-C23WSN5E.js.map +1 -0
- package/dist/{chunk-JRP3VGHS.js → chunk-CBTIUB76.js} +3 -3
- package/dist/{chunk-JRP3VGHS.js.map → chunk-CBTIUB76.js.map} +1 -1
- package/dist/chunk-CNV4TXJG.js +58 -0
- package/dist/chunk-CNV4TXJG.js.map +1 -0
- package/dist/{chunk-QB6VMOJ2.cjs → chunk-CXBHOOIQ.cjs} +45 -10
- package/dist/chunk-CXBHOOIQ.cjs.map +1 -0
- package/dist/{chunk-46GDII45.js → chunk-DCQVHAYQ.js} +5 -5
- package/dist/{chunk-46GDII45.js.map → chunk-DCQVHAYQ.js.map} +1 -1
- package/dist/chunk-DLNROMQ7.js +306 -0
- package/dist/chunk-DLNROMQ7.js.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-BNUFUFAU.js → chunk-HFHTMECK.js} +7 -7
- package/dist/chunk-HFHTMECK.js.map +1 -0
- package/dist/{chunk-TFMVL4QH.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-JIVMTW7W.js +3393 -0
- package/dist/chunk-JIVMTW7W.js.map +1 -0
- package/dist/{chunk-2Y4IFKW7.js → chunk-JXA2ZP2Q.js} +6 -17
- 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-K5ELX2GT.js +248 -0
- package/dist/chunk-K5ELX2GT.js.map +1 -0
- package/dist/chunk-LBJKZXDE.cjs +257 -0
- package/dist/chunk-LBJKZXDE.cjs.map +1 -0
- package/dist/{chunk-FGO5JFVJ.cjs → chunk-M4BDU5RX.cjs} +12 -12
- package/dist/{chunk-FGO5JFVJ.cjs.map → chunk-M4BDU5RX.cjs.map} +1 -1
- package/dist/{chunk-MIJKEVV7.js → chunk-MSY7FSX4.js} +37 -4
- package/dist/chunk-MSY7FSX4.js.map +1 -0
- package/dist/{chunk-ST3LPB2V.cjs → chunk-MUK4BU7K.cjs} +788 -146
- package/dist/chunk-MUK4BU7K.cjs.map +1 -0
- package/dist/{chunk-MCHP7RHZ.cjs → chunk-MXJDTH5B.cjs} +64 -41
- package/dist/chunk-MXJDTH5B.cjs.map +1 -0
- package/dist/{chunk-2VLBGQBY.cjs → chunk-N3257XE6.cjs} +724 -577
- package/dist/chunk-N3257XE6.cjs.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-EE7N5XXQ.cjs → chunk-NK5Q7UNE.cjs} +10 -21
- package/dist/chunk-NK5Q7UNE.cjs.map +1 -0
- package/dist/{chunk-PHXITZE4.js → chunk-NMWDXFPH.js} +4 -4
- package/dist/{chunk-PHXITZE4.js.map → chunk-NMWDXFPH.js.map} +1 -1
- package/dist/{chunk-FSXTPBRN.js → chunk-NQ6BRJBE.js} +416 -850
- package/dist/chunk-NQ6BRJBE.js.map +1 -0
- package/dist/chunk-OH5E5KIO.js +2057 -0
- package/dist/chunk-OH5E5KIO.js.map +1 -0
- package/dist/chunk-ONU3HIED.cjs +2082 -0
- package/dist/chunk-ONU3HIED.cjs.map +1 -0
- package/dist/{chunk-STQ3BSED.cjs → chunk-PNN7RHVR.cjs} +66 -44
- package/dist/chunk-PNN7RHVR.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-ACSVZPK7.cjs → chunk-PWLJ77UV.cjs} +5 -3
- package/dist/chunk-PWLJ77UV.cjs.map +1 -0
- package/dist/chunk-Q7Q4WSLJ.cjs +328 -0
- package/dist/chunk-Q7Q4WSLJ.cjs.map +1 -0
- package/dist/{chunk-BEFM74L2.js → chunk-QLRESYPU.js} +637 -493
- package/dist/chunk-QLRESYPU.js.map +1 -0
- package/dist/{chunk-SBPC5IP3.js → chunk-QWX5YA3K.js} +784 -202
- package/dist/chunk-QWX5YA3K.js.map +1 -0
- package/dist/{chunk-TCRIQMBU.js → chunk-RJS7DECT.js} +8 -9
- package/dist/chunk-RJS7DECT.js.map +1 -0
- package/dist/{chunk-6JZUSDY2.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-IJTLXNGJ.js → chunk-T4XNKYXB.js} +780 -127
- package/dist/chunk-T4XNKYXB.js.map +1 -0
- package/dist/{chunk-PDGEXGS6.cjs → chunk-TQR4KBY2.cjs} +354 -182
- package/dist/chunk-TQR4KBY2.cjs.map +1 -0
- package/dist/chunk-TTAITEPJ.cjs +755 -0
- package/dist/chunk-TTAITEPJ.cjs.map +1 -0
- package/dist/{chunk-NN3QSOVS.cjs → chunk-U5SON7R2.cjs} +27 -27
- package/dist/{chunk-NN3QSOVS.cjs.map → chunk-U5SON7R2.cjs.map} +1 -1
- package/dist/{chunk-A2I2XO52.cjs → chunk-U63GDNRC.cjs} +32 -26
- package/dist/chunk-U63GDNRC.cjs.map +1 -0
- package/dist/{chunk-YNULOIR5.cjs → chunk-UDISNXDL.cjs} +64 -43
- package/dist/chunk-UDISNXDL.cjs.map +1 -0
- package/dist/{chunk-GWEDD3DH.js → chunk-UV3SN74I.js} +5 -5
- package/dist/{chunk-GWEDD3DH.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-EFELJVLA.js → chunk-VGTJPTIC.js} +28 -5
- package/dist/chunk-VGTJPTIC.js.map +1 -0
- package/dist/chunk-VQH4VAWD.cjs +12 -0
- package/dist/{chunk-EPTSMFH7.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-WEVQJ5LH.js +736 -0
- package/dist/chunk-WEVQJ5LH.js.map +1 -0
- package/dist/{chunk-3PRKZW6D.cjs → chunk-XBYVV3MP.cjs} +60 -5
- package/dist/chunk-XBYVV3MP.cjs.map +1 -0
- package/dist/{chunk-GFRGG2US.cjs → chunk-XCAGZAKP.cjs} +7 -7
- package/dist/{chunk-GFRGG2US.cjs.map → chunk-XCAGZAKP.cjs.map} +1 -1
- package/dist/{chunk-XR4YZFKW.cjs → chunk-XDF2UPEQ.cjs} +3864 -1783
- package/dist/chunk-XDF2UPEQ.cjs.map +1 -0
- package/dist/{chunk-7V2FGGI2.cjs → chunk-XMQSEJCF.cjs} +632 -1080
- package/dist/chunk-XMQSEJCF.cjs.map +1 -0
- package/dist/chunk-XNLIZYRZ.cjs +3432 -0
- package/dist/chunk-XNLIZYRZ.cjs.map +1 -0
- package/dist/{chunk-66UVLHQA.cjs → chunk-XNSI2FJO.cjs} +99 -100
- package/dist/chunk-XNSI2FJO.cjs.map +1 -0
- package/dist/chunk-XQSCL77R.cjs +60 -0
- package/dist/chunk-XQSCL77R.cjs.map +1 -0
- package/dist/{chunk-SVJ5GEXW.cjs → chunk-XUO3KQFO.cjs} +2 -2
- package/dist/chunk-XUO3KQFO.cjs.map +1 -0
- package/dist/{chunk-HJH3RMXG.cjs → chunk-YAAM3M2S.cjs} +10 -10
- package/dist/{chunk-HJH3RMXG.cjs.map → chunk-YAAM3M2S.cjs.map} +1 -1
- package/dist/{chunk-ATLN63JA.js → chunk-YBFHZUXX.js} +6 -6
- package/dist/{chunk-ATLN63JA.js.map → chunk-YBFHZUXX.js.map} +1 -1
- package/dist/{chunk-K3BUWSFR.js → chunk-YDFDBE6D.js} +119 -6
- package/dist/chunk-YDFDBE6D.js.map +1 -0
- package/dist/{chunk-OSZPLZIV.cjs → chunk-YVWGEQJE.cjs} +318 -132
- 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 -41
- package/dist/core/index.d.cts +4 -5
- package/dist/core/index.d.ts +4 -5
- package/dist/core/index.js +8 -9
- package/dist/{ddl-eWg7hx6R.d.cts → ddl-BJcOp4WZ.d.cts} +3 -3
- package/dist/{ddl-D5369kOY.d.ts → ddl-BXfGHbPN.d.ts} +3 -3
- package/dist/graph-extension/index.cjs +26 -23
- 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 -8
- package/dist/graph-merge/index.cjs +2459 -655
- 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 -468
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-By89Sezh.d.ts → index-BSHvKfok.d.ts} +221 -10
- package/dist/{index-DcQ3Sxs-.d.cts → index-DxaYCv8Y.d.cts} +221 -10
- package/dist/index.cjs +330 -269
- 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 -50
- 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 -50
- 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 -24
- package/dist/interchange/index.js.map +1 -1
- package/dist/{manager-B0KjKE93.d.ts → manager-CfZAimti.d.ts} +36 -5
- package/dist/{manager-Cn0NFIhN.d.cts → manager-HGk6E_HW.d.cts} +36 -5
- package/dist/{materialize-indexes-BD4V3svD.d.ts → materialize-indexes-6A7dWGtb.d.cts} +10 -2
- package/dist/{materialize-indexes-DVRhd5h4.d.cts → materialize-indexes-BMJP6Tms.d.ts} +10 -2
- package/dist/{postgres-DaEWvN4x.d.cts → postgres-DFYWENdR.d.cts} +1961 -439
- package/dist/{postgres-u0a0HN2D.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 -49
- package/dist/schema/index.d.cts +9 -16
- package/dist/schema/index.d.ts +9 -16
- package/dist/schema/index.js +23 -22
- package/dist/{searchable-CnYEancP.d.ts → searchable-9OQoPuRs.d.ts} +1 -2
- package/dist/{searchable-BT7j9_IK.d.cts → searchable-CIje5XYD.d.cts} +1 -2
- package/dist/{sqlite-BrMoSsI7.d.cts → sqlite-DerU5tc7.d.ts} +2029 -347
- package/dist/{sqlite-CHhZUyO5.d.ts → sqlite-DitnISa9.d.cts} +2029 -347
- package/dist/{store-view-Bvdku0Ht.d.ts → store-DawaWWjJ.d.ts} +3145 -2556
- package/dist/{store-view-w-md0nQ4.d.cts → store-RwTJx8LX.d.cts} +3145 -2556
- package/dist/{temporal-BCORwUau.d.cts → temporal-Bn-Fi8FJ.d.cts} +1 -1
- package/dist/{temporal--x9T8K4S.d.ts → temporal-BtM4UALv.d.ts} +1 -1
- package/dist/{types-6-WJmSD4.d.cts → types-CoIx8HX5.d.cts} +1 -1
- package/dist/{types-Cjvkj0jA.d.ts → types-HkveCCx0.d.cts} +866 -21
- package/dist/{types-Cjvkj0jA.d.cts → types-HkveCCx0.d.ts} +866 -21
- package/dist/{types-COODtTJU.d.ts → types-KFfk-8Ah.d.ts} +1 -1
- package/dist/{where-CUQmCR6d.d.cts → where--fk7_0kv.d.cts} +1 -1
- package/dist/{where-5xVawAwL.d.ts → where-ws5hf-Ov.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-2BIG7U6E.cjs +0 -83
- package/dist/chunk-2BIG7U6E.cjs.map +0 -1
- package/dist/chunk-2L54C2C2.js +0 -144
- package/dist/chunk-2L54C2C2.js.map +0 -1
- package/dist/chunk-2VLBGQBY.cjs.map +0 -1
- package/dist/chunk-2WDD2NO3.js +0 -59
- package/dist/chunk-2WDD2NO3.js.map +0 -1
- package/dist/chunk-2Y4IFKW7.js.map +0 -1
- package/dist/chunk-35S6P5ZU.js +0 -27
- package/dist/chunk-35S6P5ZU.js.map +0 -1
- package/dist/chunk-3PRKZW6D.cjs.map +0 -1
- package/dist/chunk-4MB3AQAQ.js.map +0 -1
- package/dist/chunk-4SZ6XPTG.cjs +0 -12
- package/dist/chunk-5MUSU4ZP.cjs.map +0 -1
- package/dist/chunk-63KCKSSH.js.map +0 -1
- package/dist/chunk-66UVLHQA.cjs.map +0 -1
- package/dist/chunk-6JZUSDY2.cjs.map +0 -1
- package/dist/chunk-764JHTLT.cjs +0 -15
- package/dist/chunk-764JHTLT.cjs.map +0 -1
- package/dist/chunk-7G32LIQM.js.map +0 -1
- package/dist/chunk-7V2FGGI2.cjs.map +0 -1
- package/dist/chunk-A2I2XO52.cjs.map +0 -1
- package/dist/chunk-A4PBRX4C.cjs +0 -100
- package/dist/chunk-A4PBRX4C.cjs.map +0 -1
- package/dist/chunk-ACSVZPK7.cjs.map +0 -1
- package/dist/chunk-ALFUGRYB.cjs +0 -1282
- package/dist/chunk-ALFUGRYB.cjs.map +0 -1
- package/dist/chunk-B75XRV3O.js +0 -125
- package/dist/chunk-B75XRV3O.js.map +0 -1
- package/dist/chunk-BCP7LLOY.js.map +0 -1
- package/dist/chunk-BEFM74L2.js.map +0 -1
- package/dist/chunk-BNUFUFAU.js.map +0 -1
- package/dist/chunk-C4F7VJ5D.cjs.map +0 -1
- package/dist/chunk-CPEL3YIR.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-EE7N5XXQ.cjs.map +0 -1
- package/dist/chunk-EFELJVLA.js.map +0 -1
- package/dist/chunk-EPTSMFH7.cjs +0 -12
- 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-FMGEZBAQ.js.map +0 -1
- package/dist/chunk-FMMIX6N4.js.map +0 -1
- package/dist/chunk-FRHHDHKH.js.map +0 -1
- package/dist/chunk-FSXTPBRN.js.map +0 -1
- package/dist/chunk-G6Q5UM7U.js.map +0 -1
- package/dist/chunk-GYA4JRP5.js.map +0 -1
- package/dist/chunk-HOHAJ2NR.cjs +0 -61
- package/dist/chunk-HOHAJ2NR.cjs.map +0 -1
- package/dist/chunk-HOIFFY4M.js.map +0 -1
- package/dist/chunk-IIMQJYAM.js +0 -81
- package/dist/chunk-IIMQJYAM.js.map +0 -1
- package/dist/chunk-IJTLXNGJ.js.map +0 -1
- package/dist/chunk-ITE4IXAK.js +0 -25
- package/dist/chunk-ITE4IXAK.js.map +0 -1
- package/dist/chunk-K3BUWSFR.js.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-MCHP7RHZ.cjs.map +0 -1
- package/dist/chunk-MIJKEVV7.js.map +0 -1
- package/dist/chunk-NCX65HBY.cjs +0 -1396
- package/dist/chunk-NCX65HBY.cjs.map +0 -1
- package/dist/chunk-OSZPLZIV.cjs.map +0 -1
- package/dist/chunk-OVUUTCPJ.cjs.map +0 -1
- package/dist/chunk-PDGEXGS6.cjs.map +0 -1
- package/dist/chunk-QB6VMOJ2.cjs.map +0 -1
- package/dist/chunk-QMQLUA66.js +0 -12
- package/dist/chunk-QMQLUA66.js.map +0 -1
- package/dist/chunk-QYWINYEA.cjs.map +0 -1
- package/dist/chunk-S4KQ5LV4.js.map +0 -1
- package/dist/chunk-SBPC5IP3.js.map +0 -1
- package/dist/chunk-SJDMVITW.cjs.map +0 -1
- package/dist/chunk-SNXVDZAJ.js.map +0 -1
- package/dist/chunk-SQRD2CYF.js.map +0 -1
- package/dist/chunk-ST3LPB2V.cjs.map +0 -1
- package/dist/chunk-STQ3BSED.cjs.map +0 -1
- package/dist/chunk-SVJ5GEXW.cjs.map +0 -1
- package/dist/chunk-TCRIQMBU.js.map +0 -1
- package/dist/chunk-TDXIBCGY.cjs.map +0 -1
- package/dist/chunk-TFMVL4QH.js.map +0 -1
- package/dist/chunk-TRF4EBJT.cjs +0 -30
- package/dist/chunk-TRF4EBJT.cjs.map +0 -1
- package/dist/chunk-TVLKA4AY.js +0 -94
- package/dist/chunk-TVLKA4AY.js.map +0 -1
- package/dist/chunk-UR7W5YQK.js.map +0 -1
- package/dist/chunk-VITTKBWF.js +0 -1263
- package/dist/chunk-VITTKBWF.js.map +0 -1
- package/dist/chunk-WBUFJ7BS.cjs +0 -131
- package/dist/chunk-WBUFJ7BS.cjs.map +0 -1
- package/dist/chunk-XR4YZFKW.cjs.map +0 -1
- package/dist/chunk-YNULOIR5.cjs.map +0 -1
- package/dist/chunk-ZDH3DX3C.cjs +0 -30
- package/dist/chunk-ZDH3DX3C.cjs.map +0 -1
- package/dist/chunk-ZTAJL4DT.cjs +0 -85
- package/dist/chunk-ZTAJL4DT.cjs.map +0 -1
- package/dist/define-graph-DVF-oN1i.d.cts +0 -173
- package/dist/define-graph-SvYXOl78.d.ts +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 chunkQ7Q4WSLJ_cjs = require('./chunk-Q7Q4WSLJ.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 = chunkQ7Q4WSLJ_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 ?? chunkQ7Q4WSLJ_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 = chunkQ7Q4WSLJ_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 >= chunkQ7Q4WSLJ_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 chunkQ7Q4WSLJ_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 = chunkQ7Q4WSLJ_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 : chunkQ7Q4WSLJ_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) : chunkQ7Q4WSLJ_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 >= chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION) {
|
|
1075
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
1076
|
+
`Recorded commit clock reached the open revision sentinel ${chunkQ7Q4WSLJ_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 = chunkQ7Q4WSLJ_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) {
|
|
@@ -1139,6 +1110,7 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
|
1139
1110
|
"insertNodesBatch",
|
|
1140
1111
|
"insertNodesBatchReturning",
|
|
1141
1112
|
"updateNode",
|
|
1113
|
+
"updateNodeSet",
|
|
1142
1114
|
"deleteNode",
|
|
1143
1115
|
"hardDeleteNode",
|
|
1144
1116
|
"getNode",
|
|
@@ -1161,10 +1133,12 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
|
1161
1133
|
"countNodesByKind",
|
|
1162
1134
|
"findEdgesByKind",
|
|
1163
1135
|
"findEdgesByEndpointSet",
|
|
1136
|
+
"findEdgesByHeterogeneousEndpointSet",
|
|
1164
1137
|
"countEdgesByKind",
|
|
1165
1138
|
"insertUnique",
|
|
1166
1139
|
"insertUniqueBatch",
|
|
1167
1140
|
"deleteUnique",
|
|
1141
|
+
"hardDeleteUniquesByNodeIds",
|
|
1168
1142
|
"checkUnique",
|
|
1169
1143
|
"checkUniqueBatch",
|
|
1170
1144
|
"getActiveSchema",
|
|
@@ -1172,11 +1146,13 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
|
1172
1146
|
"commitSchemaVersion",
|
|
1173
1147
|
"commitSchemaVersionIfKindsEmpty",
|
|
1174
1148
|
"lockSchemaVersionForWrite",
|
|
1149
|
+
"commitSchemaVersionWithPreflight",
|
|
1175
1150
|
"setActiveVersion",
|
|
1176
1151
|
"schemaWriteTransaction",
|
|
1177
1152
|
"upsertEmbedding",
|
|
1178
1153
|
"upsertEmbeddingBatch",
|
|
1179
1154
|
"deleteEmbedding",
|
|
1155
|
+
"deleteEmbeddingBatch",
|
|
1180
1156
|
"vectorSearch",
|
|
1181
1157
|
"createVectorIndex",
|
|
1182
1158
|
"dropVectorIndex",
|
|
@@ -1209,7 +1185,12 @@ var GRAPH_BACKEND_PROJECTION_KEYS = [
|
|
|
1209
1185
|
"assertVectorSlotsInitialized",
|
|
1210
1186
|
"deleteVectorSlotContribution",
|
|
1211
1187
|
"verifyContributions",
|
|
1188
|
+
"repairContributions",
|
|
1189
|
+
"probeContributions",
|
|
1190
|
+
"rebuildContribution",
|
|
1212
1191
|
"ensureFulltextTable",
|
|
1192
|
+
"ensureIdentityTables",
|
|
1193
|
+
"identityTableDdl",
|
|
1213
1194
|
"getReconciliationMarker",
|
|
1214
1195
|
"setReconciliationMarker",
|
|
1215
1196
|
"clearGraph",
|
|
@@ -1230,7 +1211,9 @@ function projectBackendMembers(backend, keys) {
|
|
|
1230
1211
|
if (!Reflect.has(backend, key)) return [];
|
|
1231
1212
|
return [[key, Reflect.get(backend, key)]];
|
|
1232
1213
|
});
|
|
1233
|
-
|
|
1214
|
+
const projection = Object.fromEntries(entries);
|
|
1215
|
+
chunkXBYVV3MP_cjs.inheritSerializedTransactionResource(projection, backend);
|
|
1216
|
+
return projection;
|
|
1234
1217
|
}
|
|
1235
1218
|
function createGraphBackendProjection(backend) {
|
|
1236
1219
|
return projectBackendMembers(backend, GRAPH_BACKEND_PROJECTION_KEYS);
|
|
@@ -1240,17 +1223,17 @@ function createGraphBackendProjection(backend) {
|
|
|
1240
1223
|
function nodeInsertDispatch(backend) {
|
|
1241
1224
|
return {
|
|
1242
1225
|
one: (params) => backend.insertNode(params),
|
|
1243
|
-
oneNoReturn: backend.insertNodeNoReturn === void 0 ? void 0 : (params) =>
|
|
1244
|
-
batch: backend.insertNodesBatch === void 0 ? void 0 : (params) =>
|
|
1245
|
-
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)
|
|
1246
1229
|
};
|
|
1247
1230
|
}
|
|
1248
1231
|
function edgeInsertDispatch(backend) {
|
|
1249
1232
|
return {
|
|
1250
1233
|
one: (params) => backend.insertEdge(params),
|
|
1251
|
-
oneNoReturn: backend.insertEdgeNoReturn === void 0 ? void 0 : (params) =>
|
|
1252
|
-
batch: backend.insertEdgesBatch === void 0 ? void 0 : (params) =>
|
|
1253
|
-
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)
|
|
1254
1237
|
};
|
|
1255
1238
|
}
|
|
1256
1239
|
async function runInsertNoReturn(dispatch, params) {
|
|
@@ -1271,6 +1254,7 @@ async function runInsertBatch(dispatch, params) {
|
|
|
1271
1254
|
}
|
|
1272
1255
|
}
|
|
1273
1256
|
async function runInsertBatchReturning(dispatch, params) {
|
|
1257
|
+
if (params.length === 0) return [];
|
|
1274
1258
|
if (dispatch.batchReturning !== void 0) {
|
|
1275
1259
|
return dispatch.batchReturning(params);
|
|
1276
1260
|
}
|
|
@@ -1281,6 +1265,174 @@ async function runInsertBatchReturning(dispatch, params) {
|
|
|
1281
1265
|
return rows;
|
|
1282
1266
|
}
|
|
1283
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: chunkQ7Q4WSLJ_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
|
+
|
|
1284
1436
|
// src/query/compiler/predicates.ts
|
|
1285
1437
|
var COMPARISON_OP_SQL = {
|
|
1286
1438
|
eq: "=",
|
|
@@ -1294,35 +1446,35 @@ function compileFieldColumn(field, cteAlias, cteColumnPrefix) {
|
|
|
1294
1446
|
if (cteColumnPrefix !== void 0) {
|
|
1295
1447
|
const qualifier2 = cteColumnPrefix === "" ? "" : `${cteColumnPrefix}.`;
|
|
1296
1448
|
if (field.path.length === 1 && field.path[0] === "id") {
|
|
1297
|
-
return
|
|
1449
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}id`);
|
|
1298
1450
|
}
|
|
1299
1451
|
if (field.path.length === 1 && field.path[0] === "kind") {
|
|
1300
|
-
return
|
|
1452
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}kind`);
|
|
1301
1453
|
}
|
|
1302
1454
|
if (field.path.length > 0 && field.path[0] === "props") {
|
|
1303
|
-
return
|
|
1455
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}props`);
|
|
1304
1456
|
}
|
|
1305
|
-
return
|
|
1457
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier2}${field.path.join("_")}`);
|
|
1306
1458
|
}
|
|
1307
1459
|
const prefix = field.alias;
|
|
1308
1460
|
const qualifier = cteAlias ? `${cteAlias}.` : "";
|
|
1309
1461
|
if (field.path.length === 1 && field.path[0] === "id") {
|
|
1310
|
-
return
|
|
1462
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_id`);
|
|
1311
1463
|
}
|
|
1312
1464
|
if (field.path.length === 1 && field.path[0] === "kind") {
|
|
1313
|
-
return
|
|
1465
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_kind`);
|
|
1314
1466
|
}
|
|
1315
1467
|
if (field.path.length > 0 && field.path[0] === "props") {
|
|
1316
|
-
return
|
|
1468
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_props`);
|
|
1317
1469
|
}
|
|
1318
|
-
return
|
|
1470
|
+
return chunkVCRRKBLN_cjs.sql.raw(`${qualifier}${prefix}_${field.path.join("_")}`);
|
|
1319
1471
|
}
|
|
1320
1472
|
function getFieldPointer(field) {
|
|
1321
1473
|
if (field.jsonPointer !== void 0) {
|
|
1322
1474
|
return field.jsonPointer;
|
|
1323
1475
|
}
|
|
1324
1476
|
if (field.path.length > 1 && field.path[0] === "props") {
|
|
1325
|
-
return
|
|
1477
|
+
return chunkA7J2YDDI_cjs.jsonPointer(field.path.slice(1));
|
|
1326
1478
|
}
|
|
1327
1479
|
return void 0;
|
|
1328
1480
|
}
|
|
@@ -1401,7 +1553,7 @@ function resolveLiteralValueTypes(literals) {
|
|
|
1401
1553
|
}
|
|
1402
1554
|
}
|
|
1403
1555
|
if (resolved.size > 1) {
|
|
1404
|
-
throw new
|
|
1556
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1405
1557
|
"Mixed literal value types are not supported in predicates",
|
|
1406
1558
|
{ valueTypes: [...resolved] }
|
|
1407
1559
|
);
|
|
@@ -1435,9 +1587,9 @@ function convertValueForSql(value, dialect) {
|
|
|
1435
1587
|
}
|
|
1436
1588
|
function compileStringPattern(op, pattern) {
|
|
1437
1589
|
const escaped = pattern.replaceAll(
|
|
1438
|
-
|
|
1439
|
-
`${
|
|
1440
|
-
).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}_`);
|
|
1441
1593
|
switch (op) {
|
|
1442
1594
|
case "contains": {
|
|
1443
1595
|
return `%${escaped}%`;
|
|
@@ -1458,22 +1610,22 @@ function compileStringPattern(op, pattern) {
|
|
|
1458
1610
|
}
|
|
1459
1611
|
}
|
|
1460
1612
|
function escapeLikePatternParameter(parameter) {
|
|
1461
|
-
const doubledEscape = `${
|
|
1462
|
-
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}_`})`;
|
|
1463
1615
|
}
|
|
1464
1616
|
function compileParameterizedStringPattern(op, parameter) {
|
|
1465
1617
|
switch (op) {
|
|
1466
1618
|
case "contains": {
|
|
1467
1619
|
const escaped = escapeLikePatternParameter(parameter);
|
|
1468
|
-
return
|
|
1620
|
+
return chunkVCRRKBLN_cjs.sql`'%' || ${escaped} || '%'`;
|
|
1469
1621
|
}
|
|
1470
1622
|
case "startsWith": {
|
|
1471
1623
|
const escaped = escapeLikePatternParameter(parameter);
|
|
1472
|
-
return
|
|
1624
|
+
return chunkVCRRKBLN_cjs.sql`${escaped} || '%'`;
|
|
1473
1625
|
}
|
|
1474
1626
|
case "endsWith": {
|
|
1475
1627
|
const escaped = escapeLikePatternParameter(parameter);
|
|
1476
|
-
return
|
|
1628
|
+
return chunkVCRRKBLN_cjs.sql`'%' || ${escaped}`;
|
|
1477
1629
|
}
|
|
1478
1630
|
case "like":
|
|
1479
1631
|
case "ilike": {
|
|
@@ -1500,18 +1652,18 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1500
1652
|
cteColumnPrefix
|
|
1501
1653
|
);
|
|
1502
1654
|
if (isParameterRef(expr.pattern)) {
|
|
1503
|
-
const placeholder =
|
|
1655
|
+
const placeholder = chunkVCRRKBLN_cjs.sql`${chunkVCRRKBLN_cjs.sql.placeholder(expr.pattern.name)}`;
|
|
1504
1656
|
const pattern2 = compileParameterizedStringPattern(expr.op, placeholder);
|
|
1505
1657
|
if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
|
|
1506
1658
|
return dialect.ilike(field, pattern2);
|
|
1507
1659
|
}
|
|
1508
|
-
return
|
|
1660
|
+
return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern2} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
|
|
1509
1661
|
}
|
|
1510
1662
|
const pattern = compileStringPattern(expr.op, expr.pattern);
|
|
1511
1663
|
if (expr.op === "ilike" || expr.op === "contains" || expr.op === "startsWith" || expr.op === "endsWith") {
|
|
1512
1664
|
return dialect.ilike(field, pattern);
|
|
1513
1665
|
}
|
|
1514
|
-
return
|
|
1666
|
+
return chunkVCRRKBLN_cjs.sql`${field} LIKE ${pattern} ${chunkVCRRKBLN_cjs.likeEscapeClause}`;
|
|
1515
1667
|
}
|
|
1516
1668
|
case "null_check": {
|
|
1517
1669
|
const field = compileFieldTextValue(
|
|
@@ -1521,7 +1673,7 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1521
1673
|
void 0,
|
|
1522
1674
|
cteColumnPrefix
|
|
1523
1675
|
);
|
|
1524
|
-
return expr.op === "isNull" ?
|
|
1676
|
+
return expr.op === "isNull" ? chunkVCRRKBLN_cjs.sql`${field} IS NULL` : chunkVCRRKBLN_cjs.sql`${field} IS NOT NULL`;
|
|
1525
1677
|
}
|
|
1526
1678
|
case "between": {
|
|
1527
1679
|
const lowerIsParam = isParameterRef(expr.lower);
|
|
@@ -1531,7 +1683,7 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1531
1683
|
if (!upperIsParam) boundsForType.push(expr.upper);
|
|
1532
1684
|
const valueType = boundsForType.length > 0 ? resolveComparisonValueType(expr.field, boundsForType) : normalizeValueType2(expr.field.valueType);
|
|
1533
1685
|
if (valueType === "array" || valueType === "object") {
|
|
1534
|
-
throw new
|
|
1686
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1535
1687
|
"Between comparisons are not supported for JSON arrays or objects"
|
|
1536
1688
|
);
|
|
1537
1689
|
}
|
|
@@ -1543,25 +1695,25 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1543
1695
|
void 0,
|
|
1544
1696
|
cteColumnPrefix
|
|
1545
1697
|
);
|
|
1546
|
-
const lower = lowerIsParam ?
|
|
1547
|
-
const upper = upperIsParam ?
|
|
1548
|
-
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}`;
|
|
1549
1701
|
}
|
|
1550
1702
|
case "and": {
|
|
1551
1703
|
const parts = expr.predicates.map(
|
|
1552
1704
|
(p) => compilePredicateExpression(p, ctx)
|
|
1553
1705
|
);
|
|
1554
|
-
return
|
|
1706
|
+
return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(parts, chunkVCRRKBLN_cjs.sql` AND `)})`;
|
|
1555
1707
|
}
|
|
1556
1708
|
case "or": {
|
|
1557
1709
|
const parts = expr.predicates.map(
|
|
1558
1710
|
(p) => compilePredicateExpression(p, ctx)
|
|
1559
1711
|
);
|
|
1560
|
-
return
|
|
1712
|
+
return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(parts, chunkVCRRKBLN_cjs.sql` OR `)})`;
|
|
1561
1713
|
}
|
|
1562
1714
|
case "not": {
|
|
1563
1715
|
const inner = compilePredicateExpression(expr.predicate, ctx);
|
|
1564
|
-
return
|
|
1716
|
+
return chunkVCRRKBLN_cjs.sql`NOT (${inner})`;
|
|
1565
1717
|
}
|
|
1566
1718
|
case "array_op": {
|
|
1567
1719
|
return compileArrayPredicate(expr, dialect, cteColumnPrefix);
|
|
@@ -1584,7 +1736,7 @@ function compilePredicateExpression(expr, ctx) {
|
|
|
1584
1736
|
}
|
|
1585
1737
|
}
|
|
1586
1738
|
}
|
|
1587
|
-
var STRUCTURAL_PREDICATE_NOOP =
|
|
1739
|
+
var STRUCTURAL_PREDICATE_NOOP = chunkVCRRKBLN_cjs.sql.raw("1=1");
|
|
1588
1740
|
function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
1589
1741
|
if (isParameterRef(expr.right)) {
|
|
1590
1742
|
const parameterValueType = resolveParameterValueType(expr.left, expr.right);
|
|
@@ -1607,15 +1759,15 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1607
1759
|
}
|
|
1608
1760
|
const opSql2 = COMPARISON_OP_SQL[expr.op];
|
|
1609
1761
|
if (!opSql2) {
|
|
1610
|
-
throw new
|
|
1762
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1611
1763
|
`Comparison operation "${expr.op}" is not supported for parameterized predicates`
|
|
1612
1764
|
);
|
|
1613
1765
|
}
|
|
1614
|
-
return
|
|
1766
|
+
return chunkVCRRKBLN_cjs.sql`${left2} ${chunkVCRRKBLN_cjs.sql.raw(opSql2)} ${chunkVCRRKBLN_cjs.sql.placeholder(expr.right.name)}`;
|
|
1615
1767
|
}
|
|
1616
1768
|
const valueType = resolveComparisonValueType(expr.left, expr.right);
|
|
1617
1769
|
if (valueType === "array" || valueType === "object") {
|
|
1618
|
-
throw new
|
|
1770
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1619
1771
|
`Comparison operation "${expr.op}" is not supported for ${valueType} values`
|
|
1620
1772
|
);
|
|
1621
1773
|
}
|
|
@@ -1630,7 +1782,7 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1630
1782
|
if (expr.op === "in" || expr.op === "notIn") {
|
|
1631
1783
|
const values = Array.isArray(expr.right) ? expr.right : [expr.right];
|
|
1632
1784
|
if (values.length === 0) {
|
|
1633
|
-
return expr.op === "in" ?
|
|
1785
|
+
return expr.op === "in" ? chunkVCRRKBLN_cjs.sql.raw("1=0") : chunkVCRRKBLN_cjs.sql.raw("1=1");
|
|
1634
1786
|
}
|
|
1635
1787
|
const convertedValues = values.map(
|
|
1636
1788
|
(value) => convertValueForSql(value.value, dialect)
|
|
@@ -1638,19 +1790,19 @@ function compileComparisonPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1638
1790
|
return dialect.inList(left, convertedValues, expr.op === "notIn");
|
|
1639
1791
|
}
|
|
1640
1792
|
const right = expr.right;
|
|
1641
|
-
const rightValue = Array.isArray(right) ?
|
|
1793
|
+
const rightValue = Array.isArray(right) ? chunkN66HCGCY_cjs.requireDefined(right[0]) : right;
|
|
1642
1794
|
const convertedRight = convertValueForSql(rightValue.value, dialect);
|
|
1643
1795
|
const opSql = COMPARISON_OP_SQL[expr.op];
|
|
1644
1796
|
if (!opSql) {
|
|
1645
|
-
throw new
|
|
1797
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1646
1798
|
`Comparison operation "${expr.op}" is not supported`
|
|
1647
1799
|
);
|
|
1648
1800
|
}
|
|
1649
|
-
return
|
|
1801
|
+
return chunkVCRRKBLN_cjs.sql`${left} ${chunkVCRRKBLN_cjs.sql.raw(opSql)} ${convertedRight}`;
|
|
1650
1802
|
}
|
|
1651
1803
|
function compileListParameterPredicate(left, parameterName, elementType, negated, dialect) {
|
|
1652
1804
|
if (elementType === "array" || elementType === "object" || elementType === "embedding") {
|
|
1653
|
-
throw new
|
|
1805
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1654
1806
|
`IN/NOT IN is not supported for ${elementType} values`,
|
|
1655
1807
|
{ valueType: elementType },
|
|
1656
1808
|
{
|
|
@@ -1658,7 +1810,7 @@ function compileListParameterPredicate(left, parameterName, elementType, negated
|
|
|
1658
1810
|
}
|
|
1659
1811
|
);
|
|
1660
1812
|
}
|
|
1661
|
-
return dialect.inListParameter(left,
|
|
1813
|
+
return dialect.inListParameter(left, chunkVCRRKBLN_cjs.sql.placeholder(parameterName), {
|
|
1662
1814
|
negated,
|
|
1663
1815
|
elementType
|
|
1664
1816
|
});
|
|
@@ -1674,30 +1826,30 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1674
1826
|
const values = expr.values?.map((v) => convertValueForSql(v.value, dialect)) ?? [];
|
|
1675
1827
|
switch (expr.op) {
|
|
1676
1828
|
case "isEmpty": {
|
|
1677
|
-
return
|
|
1829
|
+
return chunkVCRRKBLN_cjs.sql`(${field} IS NULL OR ${dialect.jsonArrayLength(field)} = 0)`;
|
|
1678
1830
|
}
|
|
1679
1831
|
case "isNotEmpty": {
|
|
1680
|
-
return
|
|
1832
|
+
return chunkVCRRKBLN_cjs.sql`(${field} IS NOT NULL AND ${dialect.jsonArrayLength(field)} > 0)`;
|
|
1681
1833
|
}
|
|
1682
1834
|
case "lengthEq": {
|
|
1683
|
-
return
|
|
1835
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} = ${expr.length}`;
|
|
1684
1836
|
}
|
|
1685
1837
|
case "lengthGt": {
|
|
1686
|
-
return
|
|
1838
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} > ${expr.length}`;
|
|
1687
1839
|
}
|
|
1688
1840
|
case "lengthGte": {
|
|
1689
|
-
return
|
|
1841
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} >= ${expr.length}`;
|
|
1690
1842
|
}
|
|
1691
1843
|
case "lengthLt": {
|
|
1692
|
-
return
|
|
1844
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} < ${expr.length}`;
|
|
1693
1845
|
}
|
|
1694
1846
|
case "lengthLte": {
|
|
1695
|
-
return
|
|
1847
|
+
return chunkVCRRKBLN_cjs.sql`${dialect.jsonArrayLength(field)} <= ${expr.length}`;
|
|
1696
1848
|
}
|
|
1697
1849
|
case "contains": {
|
|
1698
1850
|
const value = values[0];
|
|
1699
1851
|
if (value === void 0) {
|
|
1700
|
-
return
|
|
1852
|
+
return chunkVCRRKBLN_cjs.sql.raw("1=0");
|
|
1701
1853
|
}
|
|
1702
1854
|
return dialect.jsonArrayContains(field, value);
|
|
1703
1855
|
}
|
|
@@ -1711,7 +1863,7 @@ function compileArrayPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1711
1863
|
}
|
|
1712
1864
|
function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
1713
1865
|
const basePointer = getFieldPointer(expr.field);
|
|
1714
|
-
const pointer =
|
|
1866
|
+
const pointer = chunkA7J2YDDI_cjs.joinJsonPointers(basePointer, expr.pointer);
|
|
1715
1867
|
const column = compileFieldColumn(expr.field, void 0, cteColumnPrefix);
|
|
1716
1868
|
switch (expr.op) {
|
|
1717
1869
|
case "hasKey":
|
|
@@ -1720,13 +1872,13 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1720
1872
|
}
|
|
1721
1873
|
case "pathEquals": {
|
|
1722
1874
|
if (!expr.value) {
|
|
1723
|
-
throw new
|
|
1875
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1724
1876
|
"pathEquals requires a comparison value"
|
|
1725
1877
|
);
|
|
1726
1878
|
}
|
|
1727
1879
|
const valueType = resolvePredicateValueType(expr.valueType, expr.value);
|
|
1728
1880
|
if (valueType === "array" || valueType === "object") {
|
|
1729
|
-
throw new
|
|
1881
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1730
1882
|
"pathEquals is not supported for JSON arrays or objects"
|
|
1731
1883
|
);
|
|
1732
1884
|
}
|
|
@@ -1738,11 +1890,11 @@ function compileObjectPredicate(expr, dialect, cteColumnPrefix) {
|
|
|
1738
1890
|
pointer,
|
|
1739
1891
|
cteColumnPrefix
|
|
1740
1892
|
);
|
|
1741
|
-
return
|
|
1893
|
+
return chunkVCRRKBLN_cjs.sql`${left} = ${convertValueForSql(expr.value.value, dialect)}`;
|
|
1742
1894
|
}
|
|
1743
1895
|
case "pathContains": {
|
|
1744
1896
|
if (!expr.value) {
|
|
1745
|
-
throw new
|
|
1897
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1746
1898
|
"pathContains requires a comparison value"
|
|
1747
1899
|
);
|
|
1748
1900
|
}
|
|
@@ -1770,12 +1922,12 @@ function compileAggregatePredicate(expr, dialect) {
|
|
|
1770
1922
|
const aggregate = compileAggregateExpr(expr.aggregate, dialect);
|
|
1771
1923
|
const op = COMPARISON_OP_SQL[expr.op];
|
|
1772
1924
|
if (!op) {
|
|
1773
|
-
throw new
|
|
1925
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1774
1926
|
`Comparison operation "${expr.op}" is not supported for aggregate predicates`
|
|
1775
1927
|
);
|
|
1776
1928
|
}
|
|
1777
1929
|
const convertedValue = convertValueForSql(expr.value.value, dialect);
|
|
1778
|
-
return
|
|
1930
|
+
return chunkVCRRKBLN_cjs.sql`${aggregate} ${chunkVCRRKBLN_cjs.sql.raw(op)} ${convertedValue}`;
|
|
1779
1931
|
}
|
|
1780
1932
|
function compileAggregateExpr(expr, dialect) {
|
|
1781
1933
|
const cteAlias = `cte_${expr.field.alias}`;
|
|
@@ -1787,25 +1939,25 @@ function compileAggregateExpr(expr, dialect) {
|
|
|
1787
1939
|
);
|
|
1788
1940
|
switch (expr.function) {
|
|
1789
1941
|
case "count": {
|
|
1790
|
-
return
|
|
1942
|
+
return chunkVCRRKBLN_cjs.sql`COUNT(${field})`;
|
|
1791
1943
|
}
|
|
1792
1944
|
case "countDistinct": {
|
|
1793
|
-
return
|
|
1945
|
+
return chunkVCRRKBLN_cjs.sql`COUNT(DISTINCT ${field})`;
|
|
1794
1946
|
}
|
|
1795
1947
|
case "sum": {
|
|
1796
|
-
return
|
|
1948
|
+
return chunkVCRRKBLN_cjs.sql`SUM(${field})`;
|
|
1797
1949
|
}
|
|
1798
1950
|
case "avg": {
|
|
1799
|
-
return
|
|
1951
|
+
return chunkVCRRKBLN_cjs.sql`AVG(${field})`;
|
|
1800
1952
|
}
|
|
1801
1953
|
case "min": {
|
|
1802
|
-
return
|
|
1954
|
+
return chunkVCRRKBLN_cjs.sql`MIN(${field})`;
|
|
1803
1955
|
}
|
|
1804
1956
|
case "max": {
|
|
1805
|
-
return
|
|
1957
|
+
return chunkVCRRKBLN_cjs.sql`MAX(${field})`;
|
|
1806
1958
|
}
|
|
1807
1959
|
default: {
|
|
1808
|
-
throw new
|
|
1960
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1809
1961
|
`Unknown aggregate function: ${expr.function}`
|
|
1810
1962
|
);
|
|
1811
1963
|
}
|
|
@@ -1813,15 +1965,15 @@ function compileAggregateExpr(expr, dialect) {
|
|
|
1813
1965
|
}
|
|
1814
1966
|
function compileExistsSubquery(expr, ctx) {
|
|
1815
1967
|
if (expr.subquery.graphId === void 0) {
|
|
1816
|
-
throw new
|
|
1968
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError("EXISTS subquery must have a graphId");
|
|
1817
1969
|
}
|
|
1818
1970
|
const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
|
|
1819
|
-
return expr.negated ?
|
|
1971
|
+
return expr.negated ? chunkVCRRKBLN_cjs.sql`NOT EXISTS (${subSql})` : chunkVCRRKBLN_cjs.sql`EXISTS (${subSql})`;
|
|
1820
1972
|
}
|
|
1821
1973
|
function compileInSubquery(expr, ctx) {
|
|
1822
1974
|
const subqueryColumnCount = getSubqueryColumnCount(expr.subquery);
|
|
1823
1975
|
if (subqueryColumnCount !== 1) {
|
|
1824
|
-
throw new
|
|
1976
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1825
1977
|
`IN/NOT IN subquery must project exactly 1 column, but got ${subqueryColumnCount}`,
|
|
1826
1978
|
{ subqueryColumnCount }
|
|
1827
1979
|
);
|
|
@@ -1830,13 +1982,13 @@ function compileInSubquery(expr, ctx) {
|
|
|
1830
1982
|
const subqueryValueType = getSingleSubqueryColumnValueType(expr.subquery);
|
|
1831
1983
|
const resolvedValueType = fieldValueType ?? subqueryValueType;
|
|
1832
1984
|
if (isUnsupportedInSubqueryValueType(resolvedValueType)) {
|
|
1833
|
-
throw new
|
|
1985
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1834
1986
|
`IN/NOT IN subquery does not support ${String(resolvedValueType)} values`,
|
|
1835
1987
|
{ valueType: resolvedValueType }
|
|
1836
1988
|
);
|
|
1837
1989
|
}
|
|
1838
1990
|
if (!isInSubqueryTypeCompatible(fieldValueType, subqueryValueType)) {
|
|
1839
|
-
throw new
|
|
1991
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1840
1992
|
`IN/NOT IN type mismatch: field type "${String(fieldValueType)}" does not match subquery column type "${String(subqueryValueType)}"`,
|
|
1841
1993
|
{
|
|
1842
1994
|
fieldValueType,
|
|
@@ -1846,7 +1998,7 @@ function compileInSubquery(expr, ctx) {
|
|
|
1846
1998
|
}
|
|
1847
1999
|
const valueType = fieldValueType ?? subqueryValueType;
|
|
1848
2000
|
if (expr.subquery.graphId === void 0) {
|
|
1849
|
-
throw new
|
|
2001
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(
|
|
1850
2002
|
"IN/NOT IN subquery must have a graphId"
|
|
1851
2003
|
);
|
|
1852
2004
|
}
|
|
@@ -1859,14 +2011,14 @@ function compileInSubquery(expr, ctx) {
|
|
|
1859
2011
|
ctx.cteColumnPrefix
|
|
1860
2012
|
);
|
|
1861
2013
|
const subSql = ctx.compileQuery(expr.subquery, expr.subquery.graphId);
|
|
1862
|
-
return expr.negated ?
|
|
2014
|
+
return expr.negated ? chunkVCRRKBLN_cjs.sql`${fieldSql} NOT IN (${subSql})` : chunkVCRRKBLN_cjs.sql`${fieldSql} IN (${subSql})`;
|
|
1863
2015
|
}
|
|
1864
2016
|
function extractStructuralPredicates(predicates, isMatch, rejectionMessage) {
|
|
1865
2017
|
const results = [];
|
|
1866
2018
|
function visit(expr, inDisallowedBranch) {
|
|
1867
2019
|
if (isMatch(expr)) {
|
|
1868
2020
|
if (inDisallowedBranch) {
|
|
1869
|
-
throw new
|
|
2021
|
+
throw new chunkNI72YOJB_cjs.UnsupportedPredicateError(rejectionMessage);
|
|
1870
2022
|
}
|
|
1871
2023
|
results.push(expr);
|
|
1872
2024
|
return;
|
|
@@ -1920,9 +2072,9 @@ function extractFulltextMatchPredicates(predicates) {
|
|
|
1920
2072
|
// src/query/compiler/predicate-utils.ts
|
|
1921
2073
|
var EMPTY_PREDICATES = [];
|
|
1922
2074
|
function sqlValueList(values) {
|
|
1923
|
-
return
|
|
1924
|
-
values.map((value) =>
|
|
1925
|
-
|
|
2075
|
+
return chunkVCRRKBLN_cjs.sql.join(
|
|
2076
|
+
values.map((value) => chunkVCRRKBLN_cjs.sql`${value}`),
|
|
2077
|
+
chunkVCRRKBLN_cjs.sql`, `
|
|
1926
2078
|
);
|
|
1927
2079
|
}
|
|
1928
2080
|
function buildPredicateIndexKey(alias, targetType) {
|
|
@@ -1959,12 +2111,12 @@ function compilePredicateClauses(predicates, predicateContext) {
|
|
|
1959
2111
|
}
|
|
1960
2112
|
function compileKindFilter(column, kinds) {
|
|
1961
2113
|
if (kinds.length === 0) {
|
|
1962
|
-
return
|
|
2114
|
+
return chunkVCRRKBLN_cjs.sql`1 = 0`;
|
|
1963
2115
|
}
|
|
1964
2116
|
if (kinds.length === 1) {
|
|
1965
|
-
return
|
|
2117
|
+
return chunkVCRRKBLN_cjs.sql`${column} = ${kinds[0]}`;
|
|
1966
2118
|
}
|
|
1967
|
-
return
|
|
2119
|
+
return chunkVCRRKBLN_cjs.sql`${column} IN (${sqlValueList(kinds)})`;
|
|
1968
2120
|
}
|
|
1969
2121
|
function getNodeKindsForAlias(ast, alias) {
|
|
1970
2122
|
if (alias === ast.start.alias) {
|
|
@@ -1975,7 +2127,7 @@ function getNodeKindsForAlias(ast, alias) {
|
|
|
1975
2127
|
return traversal.nodeKinds;
|
|
1976
2128
|
}
|
|
1977
2129
|
}
|
|
1978
|
-
throw new
|
|
2130
|
+
throw new chunkNI72YOJB_cjs.CompilerInvariantError(`Unknown traversal source alias: ${alias}`);
|
|
1979
2131
|
}
|
|
1980
2132
|
function getHybridTargetAlias(vectorPredicate, fulltextPredicate) {
|
|
1981
2133
|
if (!vectorPredicate || !fulltextPredicate) return void 0;
|
|
@@ -2004,7 +2156,7 @@ async function getRowsByIds(ids, policy) {
|
|
|
2004
2156
|
// src/store/edge-fetch.ts
|
|
2005
2157
|
async function getEdgeRowsByIds(backend, graphId, ids) {
|
|
2006
2158
|
return getRowsByIds(ids, {
|
|
2007
|
-
batch: backend.getEdges === void 0 ? void 0 : (batchIds) =>
|
|
2159
|
+
batch: backend.getEdges === void 0 ? void 0 : (batchIds) => chunkN66HCGCY_cjs.requireDefined(backend.getEdges)(graphId, batchIds),
|
|
2008
2160
|
one: (id) => backend.getEdge(graphId, id)
|
|
2009
2161
|
});
|
|
2010
2162
|
}
|
|
@@ -2012,7 +2164,7 @@ async function getEdgeRowsByIds(backend, graphId, ids) {
|
|
|
2012
2164
|
// src/store/node-fetch.ts
|
|
2013
2165
|
async function getNodeRowsByIds(backend, graphId, kind, ids) {
|
|
2014
2166
|
return getRowsByIds(ids, {
|
|
2015
|
-
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),
|
|
2016
2168
|
one: (id) => backend.getNode(graphId, kind, id)
|
|
2017
2169
|
});
|
|
2018
2170
|
}
|
|
@@ -2060,13 +2212,36 @@ var RECORDED_EDGE_COLUMNS = [
|
|
|
2060
2212
|
"tx_id",
|
|
2061
2213
|
"meta"
|
|
2062
2214
|
];
|
|
2063
|
-
var
|
|
2064
|
-
|
|
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
|
+
);
|
|
2065
2240
|
var RECORDED_BIND_PARAM_BUDGET = 900;
|
|
2066
2241
|
function recordedBindParamBudget(target) {
|
|
2067
2242
|
const budget = target.capabilities.maxBindParameters ?? RECORDED_BIND_PARAM_BUDGET;
|
|
2068
2243
|
if (!Number.isSafeInteger(budget) || budget < 1) {
|
|
2069
|
-
throw new
|
|
2244
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2070
2245
|
`backend capabilities.maxBindParameters must be a positive integer, got: ${String(budget)}`,
|
|
2071
2246
|
{
|
|
2072
2247
|
code: "INVALID_BACKEND_CAPABILITY",
|
|
@@ -2082,44 +2257,64 @@ function recordedChunkSize(target, columnCount) {
|
|
|
2082
2257
|
return Math.max(1, Math.floor(budget / columnCount));
|
|
2083
2258
|
}
|
|
2084
2259
|
function sqlNull(value) {
|
|
2085
|
-
return value === void 0 ?
|
|
2260
|
+
return value === void 0 ? chunkVCRRKBLN_cjs.sql.raw("NULL") : chunkVCRRKBLN_cjs.sql`${value}`;
|
|
2086
2261
|
}
|
|
2087
2262
|
function recordedCommonCells() {
|
|
2088
2263
|
return {
|
|
2089
|
-
history_id: () =>
|
|
2090
|
-
graph_id: (row) =>
|
|
2091
|
-
id: (row) =>
|
|
2092
|
-
kind: (row) =>
|
|
2093
|
-
props: (row) =>
|
|
2094
|
-
valid_from: (row) =>
|
|
2095
|
-
valid_to: (row) =>
|
|
2096
|
-
created_at: (row) =>
|
|
2097
|
-
updated_at: (row) =>
|
|
2098
|
-
deleted_at: (row) =>
|
|
2099
|
-
recorded_from: (_row, recordedRevision) =>
|
|
2100
|
-
recorded_to: () =>
|
|
2101
|
-
op: (_row, _recordedCommit, operation) =>
|
|
2102
|
-
schema_version: () =>
|
|
2103
|
-
tx_id: () =>
|
|
2104
|
-
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`${chunkQ7Q4WSLJ_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}`
|
|
2105
2280
|
};
|
|
2106
2281
|
}
|
|
2107
2282
|
var recordedNodeCells = {
|
|
2108
2283
|
...recordedCommonCells(),
|
|
2109
|
-
version: (row) =>
|
|
2284
|
+
version: (row) => chunkVCRRKBLN_cjs.sql`${row.version}`
|
|
2110
2285
|
};
|
|
2111
2286
|
var recordedEdgeCells = {
|
|
2112
2287
|
...recordedCommonCells(),
|
|
2113
|
-
from_kind: (row) =>
|
|
2114
|
-
from_id: (row) =>
|
|
2115
|
-
to_kind: (row) =>
|
|
2116
|
-
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`${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}`,
|
|
2311
|
+
op: (_row, _recordedRevision, operation) => chunkVCRRKBLN_cjs.sql`${operation}`
|
|
2117
2312
|
};
|
|
2118
2313
|
function recordedValuesTuple(columns, cells, row, recordedRevision, operation) {
|
|
2119
2314
|
const tuple = columns.map(
|
|
2120
2315
|
(column) => cells[column](row, recordedRevision, operation)
|
|
2121
2316
|
);
|
|
2122
|
-
return
|
|
2317
|
+
return chunkVCRRKBLN_cjs.sql`(${chunkVCRRKBLN_cjs.sql.join(tuple, chunkVCRRKBLN_cjs.sql`, `)})`;
|
|
2123
2318
|
}
|
|
2124
2319
|
async function insertRecordedRows(target, table, columnList, columns, cells, inserts, recordedRevision) {
|
|
2125
2320
|
if (inserts.length === 0) return;
|
|
@@ -2134,9 +2329,9 @@ async function insertRecordedRows(target, table, columnList, columns, cells, ins
|
|
|
2134
2329
|
);
|
|
2135
2330
|
await executeStatement(
|
|
2136
2331
|
target,
|
|
2137
|
-
|
|
2332
|
+
chunkVCRRKBLN_cjs.sql`
|
|
2138
2333
|
INSERT INTO ${table} (${columnList})
|
|
2139
|
-
VALUES ${
|
|
2334
|
+
VALUES ${chunkVCRRKBLN_cjs.sql.join(values, chunkVCRRKBLN_cjs.sql`, `)}
|
|
2140
2335
|
`
|
|
2141
2336
|
);
|
|
2142
2337
|
}
|
|
@@ -2146,6 +2341,9 @@ function recordedNodeChunkSize(target) {
|
|
|
2146
2341
|
function recordedEdgeChunkSize(target) {
|
|
2147
2342
|
return recordedChunkSize(target, RECORDED_EDGE_COLUMNS.length);
|
|
2148
2343
|
}
|
|
2344
|
+
function recordedIdentityAssertionChunkSize(target) {
|
|
2345
|
+
return recordedChunkSize(target, RECORDED_IDENTITY_ASSERTION_COLUMNS.length);
|
|
2346
|
+
}
|
|
2149
2347
|
function insertRecordedNodeRows(target, table, inserts, recordedRevision) {
|
|
2150
2348
|
return insertRecordedRows(
|
|
2151
2349
|
target,
|
|
@@ -2168,6 +2366,17 @@ function insertRecordedEdgeRows(target, table, inserts, recordedRevision) {
|
|
|
2168
2366
|
recordedRevision
|
|
2169
2367
|
);
|
|
2170
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
|
+
}
|
|
2171
2380
|
|
|
2172
2381
|
// src/store/recorded-capture/flush.ts
|
|
2173
2382
|
function entityKey(entity) {
|
|
@@ -2178,25 +2387,28 @@ function entityKey(entity) {
|
|
|
2178
2387
|
case "edge": {
|
|
2179
2388
|
return `edge\0${entity.graphId}\0${entity.id}`;
|
|
2180
2389
|
}
|
|
2390
|
+
case "identity": {
|
|
2391
|
+
return `identity\0${entity.graphId}\0${entity.id}`;
|
|
2392
|
+
}
|
|
2181
2393
|
}
|
|
2182
2394
|
}
|
|
2183
2395
|
async function closeOpenReturning(target, table, graphId, ids, recordedRevision, kind) {
|
|
2184
|
-
const kindFilter = kind === void 0 ?
|
|
2396
|
+
const kindFilter = kind === void 0 ? chunkVCRRKBLN_cjs.sql`` : chunkVCRRKBLN_cjs.sql`AND kind = ${kind}`;
|
|
2185
2397
|
const rows = await target.execute(
|
|
2186
|
-
|
|
2398
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2187
2399
|
UPDATE ${table}
|
|
2188
2400
|
SET recorded_to = ${recordedRevision}
|
|
2189
2401
|
WHERE graph_id = ${graphId}
|
|
2190
2402
|
${kindFilter}
|
|
2191
|
-
AND recorded_to = ${
|
|
2403
|
+
AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
|
|
2192
2404
|
AND id IN (${sqlValueList(ids)})
|
|
2193
2405
|
RETURNING id, deleted_at
|
|
2194
2406
|
`)
|
|
2195
2407
|
);
|
|
2196
|
-
return new Map(rows.map((row) => [row.id,
|
|
2408
|
+
return new Map(rows.map((row) => [row.id, chunkN66HCGCY_cjs.isPresent(row.deleted_at)]));
|
|
2197
2409
|
}
|
|
2198
2410
|
function recordedOp(hadOpenRow, priorRowWasTombstone, after) {
|
|
2199
|
-
if (
|
|
2411
|
+
if (chunkN66HCGCY_cjs.isPresent(after.deleted_at)) return "delete";
|
|
2200
2412
|
if (!hadOpenRow || priorRowWasTombstone) return "create";
|
|
2201
2413
|
return "update";
|
|
2202
2414
|
}
|
|
@@ -2233,7 +2445,7 @@ function recordedInsertsFor(afterById, closed) {
|
|
|
2233
2445
|
async function flushNodes(target, schema, graphId, entities, recordedRevision) {
|
|
2234
2446
|
const chunkSize = recordedNodeChunkSize(target);
|
|
2235
2447
|
for (const [kind, group] of groupNodesByKind(entities)) {
|
|
2236
|
-
for (const entityChunk of
|
|
2448
|
+
for (const entityChunk of chunkBSFJMMV3_cjs.chunk(group, chunkSize)) {
|
|
2237
2449
|
const ids = entityChunk.map((entity) => entity.id);
|
|
2238
2450
|
const closed = await closeOpenReturning(
|
|
2239
2451
|
target,
|
|
@@ -2258,7 +2470,7 @@ async function flushNodes(target, schema, graphId, entities, recordedRevision) {
|
|
|
2258
2470
|
}
|
|
2259
2471
|
async function flushEdges(target, schema, graphId, entities, recordedRevision) {
|
|
2260
2472
|
const chunkSize = recordedEdgeChunkSize(target);
|
|
2261
|
-
for (const entityChunk of
|
|
2473
|
+
for (const entityChunk of chunkBSFJMMV3_cjs.chunk(entities, chunkSize)) {
|
|
2262
2474
|
const ids = entityChunk.map((entity) => entity.id);
|
|
2263
2475
|
const closed = await closeOpenReturning(
|
|
2264
2476
|
target,
|
|
@@ -2279,27 +2491,63 @@ async function flushEdges(target, schema, graphId, entities, recordedRevision) {
|
|
|
2279
2491
|
);
|
|
2280
2492
|
}
|
|
2281
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
|
+
}
|
|
2282
2530
|
async function closeOpenByKind(target, table, graphId, kind, recordedRevision) {
|
|
2283
2531
|
await executeStatement(
|
|
2284
2532
|
target,
|
|
2285
|
-
|
|
2533
|
+
chunkVCRRKBLN_cjs.sql`
|
|
2286
2534
|
UPDATE ${table}
|
|
2287
2535
|
SET recorded_to = ${recordedRevision}
|
|
2288
2536
|
WHERE graph_id = ${graphId}
|
|
2289
2537
|
AND kind = ${kind}
|
|
2290
|
-
AND recorded_to = ${
|
|
2538
|
+
AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
|
|
2291
2539
|
`
|
|
2292
2540
|
);
|
|
2293
2541
|
}
|
|
2294
2542
|
async function closeOpenEdgesByNodeKind(target, schema, graphId, nodeKind, recordedRevision) {
|
|
2295
2543
|
await executeStatement(
|
|
2296
2544
|
target,
|
|
2297
|
-
|
|
2545
|
+
chunkVCRRKBLN_cjs.sql`
|
|
2298
2546
|
UPDATE ${schema.recordedEdgesTable}
|
|
2299
2547
|
SET recorded_to = ${recordedRevision}
|
|
2300
2548
|
WHERE graph_id = ${graphId}
|
|
2301
2549
|
AND (from_kind = ${nodeKind} OR to_kind = ${nodeKind})
|
|
2302
|
-
AND recorded_to = ${
|
|
2550
|
+
AND recorded_to = ${chunkQ7Q4WSLJ_cjs.RECORDED_MAX_REVISION}
|
|
2303
2551
|
`
|
|
2304
2552
|
);
|
|
2305
2553
|
}
|
|
@@ -2337,7 +2585,7 @@ async function closeRecordedHardDeletedKind(target, schema, graphId, removal, ow
|
|
|
2337
2585
|
}
|
|
2338
2586
|
async function queryConnectedEdgeIds(target, schema, params) {
|
|
2339
2587
|
const rows = await target.execute(
|
|
2340
|
-
|
|
2588
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2341
2589
|
SELECT id
|
|
2342
2590
|
FROM ${schema.edgesTable}
|
|
2343
2591
|
WHERE graph_id = ${params.graphId}
|
|
@@ -2358,9 +2606,9 @@ function normalizedColumnType(value) {
|
|
|
2358
2606
|
}
|
|
2359
2607
|
async function readColumnTypes(backend, table) {
|
|
2360
2608
|
const rows = backend.dialect === "sqlite" ? await backend.execute(
|
|
2361
|
-
|
|
2609
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`PRAGMA table_info(${chunkVCRRKBLN_cjs.sql.identifier(table)})`)
|
|
2362
2610
|
) : await backend.execute(
|
|
2363
|
-
|
|
2611
|
+
chunkVCRRKBLN_cjs.asCompiledRowsSql(chunkVCRRKBLN_cjs.sql`
|
|
2364
2612
|
SELECT column_name AS name, data_type AS type
|
|
2365
2613
|
FROM information_schema.columns
|
|
2366
2614
|
WHERE table_schema = current_schema()
|
|
@@ -2383,7 +2631,19 @@ function isCompatibleColumnType(dialect, declaredType, kind) {
|
|
|
2383
2631
|
if (dialect === "sqlite") return hasSqliteAffinity(declaredType, kind);
|
|
2384
2632
|
return kind === "revision" ? declaredType === "bigint" : declaredType === "timestamp with time zone";
|
|
2385
2633
|
}
|
|
2386
|
-
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
|
+
] : [];
|
|
2387
2647
|
return [
|
|
2388
2648
|
{
|
|
2389
2649
|
table: schema.tables.recordedNodes,
|
|
@@ -2414,11 +2674,12 @@ function requiredRecordedColumns(schema) {
|
|
|
2414
2674
|
table: schema.tables.recordedClock,
|
|
2415
2675
|
column: "recorded_at",
|
|
2416
2676
|
kind: "wall-time"
|
|
2417
|
-
}
|
|
2677
|
+
},
|
|
2678
|
+
...identityColumns
|
|
2418
2679
|
];
|
|
2419
2680
|
}
|
|
2420
|
-
async function assertCurrentRecordedSchema(backend, schema) {
|
|
2421
|
-
const requirements = requiredRecordedColumns(schema);
|
|
2681
|
+
async function assertCurrentRecordedSchema(backend, schema, includeIdentity = false) {
|
|
2682
|
+
const requirements = requiredRecordedColumns(schema, includeIdentity);
|
|
2422
2683
|
const tables = [...new Set(requirements.map((entry) => entry.table))];
|
|
2423
2684
|
const columnTypes = new Map(
|
|
2424
2685
|
await Promise.all(
|
|
@@ -2427,6 +2688,20 @@ async function assertCurrentRecordedSchema(backend, schema) {
|
|
|
2427
2688
|
)
|
|
2428
2689
|
)
|
|
2429
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
|
+
}
|
|
2430
2705
|
const incompatible = requirements.flatMap((requirement) => {
|
|
2431
2706
|
const actual = columnTypes.get(requirement.table)?.get(requirement.column);
|
|
2432
2707
|
if (actual !== void 0 && isCompatibleColumnType(backend.dialect, actual, requirement.kind)) {
|
|
@@ -2435,7 +2710,7 @@ async function assertCurrentRecordedSchema(backend, schema) {
|
|
|
2435
2710
|
return [{ ...requirement, actual: actual ?? "missing" }];
|
|
2436
2711
|
});
|
|
2437
2712
|
if (incompatible.length === 0) return;
|
|
2438
|
-
throw new
|
|
2713
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2439
2714
|
"Recorded-time schema is incompatible with history capture.",
|
|
2440
2715
|
{
|
|
2441
2716
|
code: "RECORDED_SCHEMA_INCOMPATIBLE",
|
|
@@ -2483,7 +2758,7 @@ function edgeRowIdentityKey(row) {
|
|
|
2483
2758
|
return edgeIdentityKey(row.graph_id, row.id);
|
|
2484
2759
|
}
|
|
2485
2760
|
function recordedCaptureSealedError(details) {
|
|
2486
|
-
return new
|
|
2761
|
+
return new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2487
2762
|
"Recorded-time capture session is sealed: a graph write happened after the transaction's capture was flushed.",
|
|
2488
2763
|
details,
|
|
2489
2764
|
{
|
|
@@ -2514,9 +2789,12 @@ function createRecordedCaptureSession() {
|
|
|
2514
2789
|
touchEdge(graphId, id, afterImage) {
|
|
2515
2790
|
touch({ entity: "edge", graphId, id, afterImage });
|
|
2516
2791
|
},
|
|
2792
|
+
touchIdentityAssertion(graphId, id, afterImage) {
|
|
2793
|
+
touch({ entity: "identity", graphId, id, afterImage });
|
|
2794
|
+
},
|
|
2517
2795
|
async flush(target, schema, ownsWriteLock) {
|
|
2518
2796
|
if (sealed) {
|
|
2519
|
-
throw new
|
|
2797
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
2520
2798
|
"Recorded-time capture session was already flushed.",
|
|
2521
2799
|
{},
|
|
2522
2800
|
{
|
|
@@ -2527,7 +2805,7 @@ function createRecordedCaptureSession() {
|
|
|
2527
2805
|
sealed = true;
|
|
2528
2806
|
if (touched.size === 0) return /* @__PURE__ */ new Map();
|
|
2529
2807
|
const recordedByGraph = /* @__PURE__ */ new Map();
|
|
2530
|
-
const byGraph =
|
|
2808
|
+
const byGraph = chunkBSFJMMV3_cjs.groupBy(touched.values(), (entity) => entity.graphId);
|
|
2531
2809
|
for (const [graphId, entities] of byGraph) {
|
|
2532
2810
|
const recordedCommit = await allocateRecordedCommit(
|
|
2533
2811
|
target,
|
|
@@ -2542,6 +2820,9 @@ function createRecordedCaptureSession() {
|
|
|
2542
2820
|
const edges = entities.filter(
|
|
2543
2821
|
(entity) => entity.entity === "edge"
|
|
2544
2822
|
);
|
|
2823
|
+
const identityAssertions = entities.filter(
|
|
2824
|
+
(entity) => entity.entity === "identity"
|
|
2825
|
+
);
|
|
2545
2826
|
await flushNodes(
|
|
2546
2827
|
target,
|
|
2547
2828
|
schema,
|
|
@@ -2556,12 +2837,33 @@ function createRecordedCaptureSession() {
|
|
|
2556
2837
|
edges,
|
|
2557
2838
|
recordedCommit.revision
|
|
2558
2839
|
);
|
|
2840
|
+
await flushIdentityAssertions(
|
|
2841
|
+
target,
|
|
2842
|
+
schema,
|
|
2843
|
+
graphId,
|
|
2844
|
+
identityAssertions,
|
|
2845
|
+
recordedCommit.revision
|
|
2846
|
+
);
|
|
2559
2847
|
}
|
|
2560
2848
|
touched.clear();
|
|
2561
2849
|
return recordedByGraph;
|
|
2562
2850
|
}
|
|
2563
2851
|
};
|
|
2564
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
|
+
}
|
|
2565
2867
|
function createRecordedTransactionBackend(target, session, schema) {
|
|
2566
2868
|
const nodeDispatch = nodeInsertDispatch(target);
|
|
2567
2869
|
const edgeDispatch = edgeInsertDispatch(target);
|
|
@@ -2577,7 +2879,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2577
2879
|
await lockRecordedGraphWrite(target, graphId, graphLocks);
|
|
2578
2880
|
}
|
|
2579
2881
|
}
|
|
2580
|
-
const overlay =
|
|
2882
|
+
const overlay = chunkXBYVV3MP_cjs.createBackendOverlay(target, {
|
|
2581
2883
|
...rawWriteGuards(target, "tx.backend"),
|
|
2582
2884
|
async insertNode(params) {
|
|
2583
2885
|
session.assertOpen();
|
|
@@ -2630,6 +2932,17 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2630
2932
|
session.touchNode(params.graphId, params.kind, params.id, row);
|
|
2631
2933
|
return row;
|
|
2632
2934
|
},
|
|
2935
|
+
...target.updateNodeSet === void 0 ? {} : {
|
|
2936
|
+
async updateNodeSet(params) {
|
|
2937
|
+
session.assertOpen();
|
|
2938
|
+
await lockGraph(params.graphId);
|
|
2939
|
+
const result = await chunkN66HCGCY_cjs.requireDefined(target.updateNodeSet)(params);
|
|
2940
|
+
for (const row of result.rows) {
|
|
2941
|
+
session.touchNode(row.graph_id, row.kind, row.id, row);
|
|
2942
|
+
}
|
|
2943
|
+
return result;
|
|
2944
|
+
}
|
|
2945
|
+
},
|
|
2633
2946
|
async deleteNode(params) {
|
|
2634
2947
|
session.assertOpen();
|
|
2635
2948
|
await lockGraph(params.graphId);
|
|
@@ -2716,7 +3029,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2716
3029
|
async deleteEdgesBatch(params) {
|
|
2717
3030
|
session.assertOpen();
|
|
2718
3031
|
await lockGraph(params.graphId);
|
|
2719
|
-
await
|
|
3032
|
+
await chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params);
|
|
2720
3033
|
for (const id of params.ids) {
|
|
2721
3034
|
session.touchEdge(params.graphId, id);
|
|
2722
3035
|
}
|
|
@@ -2726,7 +3039,7 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2726
3039
|
async hardDeleteEdgesBatch(params) {
|
|
2727
3040
|
session.assertOpen();
|
|
2728
3041
|
await lockGraph(params.graphId);
|
|
2729
|
-
await
|
|
3042
|
+
await chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params);
|
|
2730
3043
|
for (const id of params.ids) {
|
|
2731
3044
|
session.touchEdge(params.graphId, id);
|
|
2732
3045
|
}
|
|
@@ -2734,6 +3047,8 @@ function createRecordedTransactionBackend(target, session, schema) {
|
|
|
2734
3047
|
}
|
|
2735
3048
|
});
|
|
2736
3049
|
registerRecordedGraphLockMemo(overlay, graphLocks);
|
|
3050
|
+
recordedIdentityBindings.set(overlay, { target, session });
|
|
3051
|
+
recordedIdentityBindings.set(target, { target, session });
|
|
2737
3052
|
return overlay;
|
|
2738
3053
|
}
|
|
2739
3054
|
function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
|
|
@@ -2743,7 +3058,7 @@ function createRecordedTransactionScope(target, schema, ownsWriteLock = false) {
|
|
|
2743
3058
|
return {
|
|
2744
3059
|
backend: createRecordedTransactionBackend(target, session, resolvedSchema),
|
|
2745
3060
|
async flush() {
|
|
2746
|
-
return
|
|
3061
|
+
return chunkBSFJMMV3_cjs.withRecordedRelationsPrecondition(
|
|
2747
3062
|
session.flush(target, resolvedSchema, ownsWriteLock),
|
|
2748
3063
|
{ dialect: target.dialect, surface: "capture-flush" }
|
|
2749
3064
|
);
|
|
@@ -2764,7 +3079,7 @@ function createRecordedBackend(backend, schema) {
|
|
|
2764
3079
|
assertCapturableBackend(backend);
|
|
2765
3080
|
const capture = (fn) => runCapturedAutocommit(backend, schema, fn);
|
|
2766
3081
|
const projectedBackend = createGraphBackendProjection(backend);
|
|
2767
|
-
return
|
|
3082
|
+
return chunkXBYVV3MP_cjs.createBackendOverlay(projectedBackend, {
|
|
2768
3083
|
...rawWriteGuards(backend, "backend"),
|
|
2769
3084
|
async insertNode(params) {
|
|
2770
3085
|
return capture((target) => target.insertNode(params));
|
|
@@ -2793,6 +3108,20 @@ function createRecordedBackend(backend, schema) {
|
|
|
2793
3108
|
async updateNode(params) {
|
|
2794
3109
|
return capture((target) => target.updateNode(params));
|
|
2795
3110
|
},
|
|
3111
|
+
...backend.updateNodeSet === void 0 ? {} : {
|
|
3112
|
+
async updateNodeSet(params) {
|
|
3113
|
+
return capture((target) => {
|
|
3114
|
+
const updateNodeSet = target.updateNodeSet;
|
|
3115
|
+
if (updateNodeSet === void 0) {
|
|
3116
|
+
throw new chunkNI72YOJB_cjs.ConfigurationError(
|
|
3117
|
+
"Recorded updateNodeSet capability disappeared inside a transaction",
|
|
3118
|
+
{ operation: "updateNodeSet" }
|
|
3119
|
+
);
|
|
3120
|
+
}
|
|
3121
|
+
return updateNodeSet(params);
|
|
3122
|
+
});
|
|
3123
|
+
}
|
|
3124
|
+
},
|
|
2796
3125
|
async deleteNode(params) {
|
|
2797
3126
|
await capture((target) => target.deleteNode(params));
|
|
2798
3127
|
},
|
|
@@ -2835,14 +3164,14 @@ function createRecordedBackend(backend, schema) {
|
|
|
2835
3164
|
...backend.deleteEdgesBatch === void 0 ? {} : {
|
|
2836
3165
|
async deleteEdgesBatch(params) {
|
|
2837
3166
|
await capture(
|
|
2838
|
-
(target) =>
|
|
3167
|
+
(target) => chunkN66HCGCY_cjs.requireDefined(target.deleteEdgesBatch)(params)
|
|
2839
3168
|
);
|
|
2840
3169
|
}
|
|
2841
3170
|
},
|
|
2842
3171
|
...backend.hardDeleteEdgesBatch === void 0 ? {} : {
|
|
2843
3172
|
async hardDeleteEdgesBatch(params) {
|
|
2844
3173
|
await capture(
|
|
2845
|
-
(target) =>
|
|
3174
|
+
(target) => chunkN66HCGCY_cjs.requireDefined(target.hardDeleteEdgesBatch)(params)
|
|
2846
3175
|
);
|
|
2847
3176
|
}
|
|
2848
3177
|
},
|
|
@@ -2863,802 +3192,32 @@ function createRecordedBackend(backend, schema) {
|
|
|
2863
3192
|
});
|
|
2864
3193
|
}
|
|
2865
3194
|
|
|
2866
|
-
// src/
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
return;
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
if (isValidEmbeddingValue(value)) {
|
|
2887
|
-
await backend.upsertEmbedding({
|
|
2888
|
-
graphId: ctx.graphId,
|
|
2889
|
-
nodeKind: ctx.nodeKind,
|
|
2890
|
-
nodeId: ctx.nodeId,
|
|
2891
|
-
fieldPath: field.fieldPath,
|
|
2892
|
-
embedding: value,
|
|
2893
|
-
dimensions: field.dimensions,
|
|
2894
|
-
metric: field.metric,
|
|
2895
|
-
indexType: field.indexType
|
|
2896
|
-
});
|
|
2897
|
-
} else if (value === void 0) {
|
|
2898
|
-
await backend.deleteEmbedding({
|
|
2899
|
-
graphId: ctx.graphId,
|
|
2900
|
-
nodeKind: ctx.nodeKind,
|
|
2901
|
-
nodeId: ctx.nodeId,
|
|
2902
|
-
fieldPath: field.fieldPath,
|
|
2903
|
-
dimensions: field.dimensions,
|
|
2904
|
-
metric: field.metric,
|
|
2905
|
-
indexType: field.indexType
|
|
2906
|
-
});
|
|
2907
|
-
}
|
|
2908
|
-
}
|
|
2909
|
-
}
|
|
2910
|
-
async function syncEmbeddingsBatchForKind(args, schema, items) {
|
|
2911
|
-
const { graphId, nodeKind, backend } = args;
|
|
2912
|
-
if (!backend.upsertEmbedding || !backend.deleteEmbedding) {
|
|
2913
|
-
return;
|
|
2914
|
-
}
|
|
2915
|
-
const embeddingFields = getEmbeddingFields(schema);
|
|
2916
|
-
if (embeddingFields.length === 0) {
|
|
2917
|
-
return;
|
|
2918
|
-
}
|
|
2919
|
-
for (const field of embeddingFields) {
|
|
2920
|
-
const rows = [];
|
|
2921
|
-
const deletionIds = [];
|
|
2922
|
-
for (const item of items) {
|
|
2923
|
-
const value = item.props[field.fieldPath];
|
|
2924
|
-
if (isValidEmbeddingValue(value)) {
|
|
2925
|
-
rows.push({ nodeId: item.nodeId, embedding: value });
|
|
2926
|
-
} else if (value === void 0) {
|
|
2927
|
-
deletionIds.push(item.nodeId);
|
|
2928
|
-
}
|
|
2929
|
-
}
|
|
2930
|
-
if (rows.length > 0) {
|
|
2931
|
-
if (backend.upsertEmbeddingBatch === void 0) {
|
|
2932
|
-
for (const row of rows) {
|
|
2933
|
-
await backend.upsertEmbedding({
|
|
2934
|
-
graphId,
|
|
2935
|
-
nodeKind,
|
|
2936
|
-
nodeId: row.nodeId,
|
|
2937
|
-
fieldPath: field.fieldPath,
|
|
2938
|
-
embedding: row.embedding,
|
|
2939
|
-
dimensions: field.dimensions,
|
|
2940
|
-
metric: field.metric,
|
|
2941
|
-
indexType: field.indexType
|
|
2942
|
-
});
|
|
2943
|
-
}
|
|
2944
|
-
} else {
|
|
2945
|
-
await backend.upsertEmbeddingBatch({
|
|
2946
|
-
graphId,
|
|
2947
|
-
nodeKind,
|
|
2948
|
-
fieldPath: field.fieldPath,
|
|
2949
|
-
dimensions: field.dimensions,
|
|
2950
|
-
metric: field.metric,
|
|
2951
|
-
indexType: field.indexType,
|
|
2952
|
-
rows
|
|
2953
|
-
});
|
|
2954
|
-
}
|
|
2955
|
-
}
|
|
2956
|
-
for (const nodeId of deletionIds) {
|
|
2957
|
-
await backend.deleteEmbedding({
|
|
2958
|
-
graphId,
|
|
2959
|
-
nodeKind,
|
|
2960
|
-
nodeId,
|
|
2961
|
-
fieldPath: field.fieldPath,
|
|
2962
|
-
dimensions: field.dimensions,
|
|
2963
|
-
metric: field.metric,
|
|
2964
|
-
indexType: field.indexType
|
|
2965
|
-
});
|
|
2966
|
-
}
|
|
2967
|
-
}
|
|
2968
|
-
}
|
|
2969
|
-
async function deleteNodeEmbeddings(ctx, schema) {
|
|
2970
|
-
const { backend } = ctx;
|
|
2971
|
-
if (!backend.deleteEmbedding) {
|
|
2972
|
-
return;
|
|
2973
|
-
}
|
|
2974
|
-
const embeddingFields = getEmbeddingFields(schema);
|
|
2975
|
-
if (embeddingFields.length === 0) {
|
|
2976
|
-
return;
|
|
2977
|
-
}
|
|
2978
|
-
for (const field of embeddingFields) {
|
|
2979
|
-
await backend.deleteEmbedding({
|
|
2980
|
-
graphId: ctx.graphId,
|
|
2981
|
-
nodeKind: ctx.nodeKind,
|
|
2982
|
-
nodeId: ctx.nodeId,
|
|
2983
|
-
fieldPath: field.fieldPath,
|
|
2984
|
-
dimensions: field.dimensions,
|
|
2985
|
-
metric: field.metric,
|
|
2986
|
-
indexType: field.indexType
|
|
2987
|
-
});
|
|
2988
|
-
}
|
|
2989
|
-
}
|
|
2990
|
-
function isValidEmbeddingValue(value) {
|
|
2991
|
-
if (!Array.isArray(value)) {
|
|
2992
|
-
return false;
|
|
2993
|
-
}
|
|
2994
|
-
return value.every((n) => typeof n === "number" && Number.isFinite(n));
|
|
2995
|
-
}
|
|
2996
|
-
|
|
2997
|
-
// src/store/fulltext-sync.ts
|
|
2998
|
-
var FIELD_SEPARATOR = "\n";
|
|
2999
|
-
function resolveCombinedLanguage(fields) {
|
|
3000
|
-
return fields[0]?.metadata.language ?? chunkHAHNRASW_cjs.DEFAULT_SEARCHABLE_LANGUAGE;
|
|
3001
|
-
}
|
|
3002
|
-
function computeFulltextContent(schema, props) {
|
|
3003
|
-
const searchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema);
|
|
3004
|
-
if (searchableFields.length === 0) return void 0;
|
|
3005
|
-
const parts = [];
|
|
3006
|
-
for (const field of searchableFields) {
|
|
3007
|
-
const value = props[field.fieldPath];
|
|
3008
|
-
if (typeof value === "string" && value.length > 0) {
|
|
3009
|
-
parts.push(value);
|
|
3010
|
-
}
|
|
3011
|
-
}
|
|
3012
|
-
if (parts.length === 0) return void 0;
|
|
3013
|
-
return {
|
|
3014
|
-
content: parts.join(FIELD_SEPARATOR),
|
|
3015
|
-
language: resolveCombinedLanguage(searchableFields)
|
|
3016
|
-
};
|
|
3017
|
-
}
|
|
3018
|
-
async function syncFulltext(ctx, schema, props) {
|
|
3019
|
-
const { backend } = ctx;
|
|
3020
|
-
if (!backend.upsertFulltext || !backend.deleteFulltext) {
|
|
3021
|
-
return;
|
|
3022
|
-
}
|
|
3023
|
-
const computed = computeFulltextContent(schema, props);
|
|
3024
|
-
if (computed !== void 0) {
|
|
3025
|
-
await backend.upsertFulltext({
|
|
3026
|
-
graphId: ctx.graphId,
|
|
3027
|
-
nodeKind: ctx.nodeKind,
|
|
3028
|
-
nodeId: ctx.nodeId,
|
|
3029
|
-
content: computed.content,
|
|
3030
|
-
language: computed.language
|
|
3031
|
-
});
|
|
3032
|
-
return;
|
|
3033
|
-
}
|
|
3034
|
-
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) return;
|
|
3035
|
-
await backend.deleteFulltext({
|
|
3036
|
-
graphId: ctx.graphId,
|
|
3037
|
-
nodeKind: ctx.nodeKind,
|
|
3038
|
-
nodeId: ctx.nodeId
|
|
3039
|
-
});
|
|
3040
|
-
}
|
|
3041
|
-
async function syncFulltextBatchForKind(args, schema, items) {
|
|
3042
|
-
const { graphId, nodeKind, backend } = args;
|
|
3043
|
-
if (!backend.upsertFulltext || !backend.deleteFulltext) {
|
|
3044
|
-
return;
|
|
3045
|
-
}
|
|
3046
|
-
const rows = [];
|
|
3047
|
-
const emptyContentIds = [];
|
|
3048
|
-
const hasSearchableFields = chunkHAHNRASW_cjs.getSearchableFields(schema).length > 0;
|
|
3049
|
-
for (const item of items) {
|
|
3050
|
-
const computed = computeFulltextContent(schema, item.props);
|
|
3051
|
-
if (computed !== void 0) {
|
|
3052
|
-
rows.push({
|
|
3053
|
-
nodeId: item.nodeId,
|
|
3054
|
-
content: computed.content,
|
|
3055
|
-
language: computed.language
|
|
3056
|
-
});
|
|
3057
|
-
} else if (hasSearchableFields) {
|
|
3058
|
-
emptyContentIds.push(item.nodeId);
|
|
3059
|
-
}
|
|
3060
|
-
}
|
|
3061
|
-
if (rows.length > 0) {
|
|
3062
|
-
if (backend.upsertFulltextBatch === void 0) {
|
|
3063
|
-
for (const row of rows) {
|
|
3064
|
-
await backend.upsertFulltext({
|
|
3065
|
-
graphId,
|
|
3066
|
-
nodeKind,
|
|
3067
|
-
nodeId: row.nodeId,
|
|
3068
|
-
content: row.content,
|
|
3069
|
-
language: row.language
|
|
3070
|
-
});
|
|
3071
|
-
}
|
|
3072
|
-
} else {
|
|
3073
|
-
await backend.upsertFulltextBatch({ graphId, nodeKind, rows });
|
|
3074
|
-
}
|
|
3075
|
-
}
|
|
3076
|
-
if (emptyContentIds.length > 0) {
|
|
3077
|
-
if (backend.deleteFulltextBatch === void 0) {
|
|
3078
|
-
for (const nodeId of emptyContentIds) {
|
|
3079
|
-
await backend.deleteFulltext({ graphId, nodeKind, nodeId });
|
|
3080
|
-
}
|
|
3081
|
-
} else {
|
|
3082
|
-
await backend.deleteFulltextBatch({
|
|
3083
|
-
graphId,
|
|
3084
|
-
nodeKind,
|
|
3085
|
-
nodeIds: emptyContentIds
|
|
3086
|
-
});
|
|
3087
|
-
}
|
|
3088
|
-
}
|
|
3089
|
-
}
|
|
3090
|
-
async function deleteNodeFulltext(ctx, schema) {
|
|
3091
|
-
const { backend } = ctx;
|
|
3092
|
-
if (!backend.deleteFulltext) {
|
|
3093
|
-
return;
|
|
3094
|
-
}
|
|
3095
|
-
if (chunkHAHNRASW_cjs.getSearchableFields(schema).length === 0) {
|
|
3096
|
-
return;
|
|
3097
|
-
}
|
|
3098
|
-
await backend.deleteFulltext({
|
|
3099
|
-
graphId: ctx.graphId,
|
|
3100
|
-
nodeKind: ctx.nodeKind,
|
|
3101
|
-
nodeId: ctx.nodeId
|
|
3102
|
-
});
|
|
3103
|
-
}
|
|
3104
|
-
|
|
3105
|
-
// src/constraints/index.ts
|
|
3106
|
-
var UNIQUE_KEY_SEPARATOR = "";
|
|
3107
|
-
var UNIQUE_KEY_NULL_MARKER = "";
|
|
3108
|
-
function computeUniqueKey(props, fields, collation) {
|
|
3109
|
-
const values = fields.map((field) => {
|
|
3110
|
-
const value = props[field];
|
|
3111
|
-
if (value === void 0 || value === null) {
|
|
3112
|
-
return UNIQUE_KEY_NULL_MARKER;
|
|
3113
|
-
}
|
|
3114
|
-
const stringValue = typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? value.toString() : JSON.stringify(value);
|
|
3115
|
-
return collation === "caseInsensitive" ? stringValue.toLowerCase() : stringValue;
|
|
3116
|
-
});
|
|
3117
|
-
return values.join(UNIQUE_KEY_SEPARATOR);
|
|
3118
|
-
}
|
|
3119
|
-
function checkWherePredicate(constraint, props) {
|
|
3120
|
-
if (!constraint.where) {
|
|
3121
|
-
return true;
|
|
3122
|
-
}
|
|
3123
|
-
const predicateBuilder = buildPredicateContext(props);
|
|
3124
|
-
const predicate2 = constraint.where(predicateBuilder);
|
|
3125
|
-
return evaluatePredicate(predicate2, props);
|
|
3126
|
-
}
|
|
3127
|
-
function buildPredicateContext(props) {
|
|
3128
|
-
const context = {};
|
|
3129
|
-
for (const key of Object.keys(props)) {
|
|
3130
|
-
context[key] = {
|
|
3131
|
-
isNull: () => ({
|
|
3132
|
-
__type: "unique_predicate",
|
|
3133
|
-
field: key,
|
|
3134
|
-
op: "isNull"
|
|
3135
|
-
}),
|
|
3136
|
-
isNotNull: () => ({
|
|
3137
|
-
__type: "unique_predicate",
|
|
3138
|
-
field: key,
|
|
3139
|
-
op: "isNotNull"
|
|
3140
|
-
})
|
|
3141
|
-
};
|
|
3142
|
-
}
|
|
3143
|
-
return context;
|
|
3144
|
-
}
|
|
3145
|
-
function evaluatePredicate(predicate2, props) {
|
|
3146
|
-
if (typeof predicate2 !== "object" || predicate2 === null || !("__type" in predicate2)) {
|
|
3147
|
-
return true;
|
|
3148
|
-
}
|
|
3149
|
-
const pred = predicate2;
|
|
3150
|
-
if (pred.__type !== "unique_predicate") {
|
|
3151
|
-
return true;
|
|
3152
|
-
}
|
|
3153
|
-
const value = props[pred.field];
|
|
3154
|
-
if (pred.op === "isNull") {
|
|
3155
|
-
return value === null || value === void 0;
|
|
3156
|
-
}
|
|
3157
|
-
return chunk764JHTLT_cjs.isPresent(value);
|
|
3158
|
-
}
|
|
3159
|
-
function getKindsForUniquenessCheck(baseKind, scope, registry) {
|
|
3160
|
-
if (scope === "kind") {
|
|
3161
|
-
return [baseKind];
|
|
3162
|
-
}
|
|
3163
|
-
const root = findRootAncestor(baseKind, registry);
|
|
3164
|
-
return registry.expandSubClasses(root);
|
|
3165
|
-
}
|
|
3166
|
-
function findRootAncestor(kind, registry) {
|
|
3167
|
-
const ancestors = registry.getAncestors(kind);
|
|
3168
|
-
if (ancestors.size === 0) {
|
|
3169
|
-
return kind;
|
|
3170
|
-
}
|
|
3171
|
-
for (const ancestor of ancestors) {
|
|
3172
|
-
if (registry.getAncestors(ancestor).size === 0) {
|
|
3173
|
-
return ancestor;
|
|
3174
|
-
}
|
|
3175
|
-
}
|
|
3176
|
-
const firstAncestor = [...ancestors][0];
|
|
3177
|
-
return firstAncestor ? findRootAncestor(firstAncestor, registry) : kind;
|
|
3178
|
-
}
|
|
3179
|
-
function checkCardinality(edgeKind, fromKind, fromId, cardinality, existingEdgeCount, hasActiveEdge) {
|
|
3180
|
-
switch (cardinality) {
|
|
3181
|
-
case "many": {
|
|
3182
|
-
return void 0;
|
|
3183
|
-
}
|
|
3184
|
-
case "one": {
|
|
3185
|
-
if (existingEdgeCount > 0) {
|
|
3186
|
-
return new chunkC4F7VJ5D_cjs.CardinalityError({
|
|
3187
|
-
edgeKind,
|
|
3188
|
-
fromKind,
|
|
3189
|
-
fromId,
|
|
3190
|
-
cardinality: "one",
|
|
3191
|
-
existingCount: existingEdgeCount
|
|
3192
|
-
});
|
|
3193
|
-
}
|
|
3194
|
-
return void 0;
|
|
3195
|
-
}
|
|
3196
|
-
case "unique": {
|
|
3197
|
-
return void 0;
|
|
3198
|
-
}
|
|
3199
|
-
case "oneActive": {
|
|
3200
|
-
if (hasActiveEdge) {
|
|
3201
|
-
return new chunkC4F7VJ5D_cjs.CardinalityError({
|
|
3202
|
-
edgeKind,
|
|
3203
|
-
fromKind,
|
|
3204
|
-
fromId,
|
|
3205
|
-
cardinality: "oneActive",
|
|
3206
|
-
existingCount: 1
|
|
3207
|
-
});
|
|
3208
|
-
}
|
|
3209
|
-
return void 0;
|
|
3210
|
-
}
|
|
3211
|
-
}
|
|
3212
|
-
}
|
|
3213
|
-
function checkUniqueEdge(edgeKind, fromKind, fromId, _toKind, _toId, existingCount) {
|
|
3214
|
-
if (existingCount > 0) {
|
|
3215
|
-
return new chunkC4F7VJ5D_cjs.CardinalityError({
|
|
3216
|
-
edgeKind,
|
|
3217
|
-
fromKind,
|
|
3218
|
-
fromId,
|
|
3219
|
-
cardinality: "unique",
|
|
3220
|
-
existingCount
|
|
3221
|
-
});
|
|
3222
|
-
}
|
|
3223
|
-
return void 0;
|
|
3224
|
-
}
|
|
3225
|
-
function validateEdgeEndpoints(edgeKind, fromKind, toKind, registration, registry) {
|
|
3226
|
-
const validFromKinds = registration.from.map((node) => node.kind);
|
|
3227
|
-
if (!registry.isAssignableToAny(fromKind, validFromKinds)) {
|
|
3228
|
-
return new chunkC4F7VJ5D_cjs.EndpointError({
|
|
3229
|
-
edgeKind,
|
|
3230
|
-
endpoint: "from",
|
|
3231
|
-
actualKind: fromKind,
|
|
3232
|
-
expectedKinds: validFromKinds
|
|
3233
|
-
});
|
|
3234
|
-
}
|
|
3235
|
-
const validToKinds = registration.to.map((node) => node.kind);
|
|
3236
|
-
if (!registry.isAssignableToAny(toKind, validToKinds)) {
|
|
3237
|
-
return new chunkC4F7VJ5D_cjs.EndpointError({
|
|
3238
|
-
edgeKind,
|
|
3239
|
-
endpoint: "to",
|
|
3240
|
-
actualKind: toKind,
|
|
3241
|
-
expectedKinds: validToKinds
|
|
3242
|
-
});
|
|
3243
|
-
}
|
|
3244
|
-
return void 0;
|
|
3245
|
-
}
|
|
3246
|
-
function checkDisjointness(nodeId, nodeKind, existingKinds, registry) {
|
|
3247
|
-
for (const existingKind of existingKinds) {
|
|
3248
|
-
if (registry.areDisjoint(nodeKind, existingKind)) {
|
|
3249
|
-
return new chunkC4F7VJ5D_cjs.DisjointError({
|
|
3250
|
-
nodeId,
|
|
3251
|
-
attemptedKind: nodeKind,
|
|
3252
|
-
conflictingKind: existingKind
|
|
3253
|
-
});
|
|
3254
|
-
}
|
|
3255
|
-
}
|
|
3256
|
-
return void 0;
|
|
3257
|
-
}
|
|
3258
|
-
|
|
3259
|
-
// src/store/uniqueness.ts
|
|
3260
|
-
function createUniquenessContext(graphId, registry, backend) {
|
|
3261
|
-
return { graphId, registry, backend };
|
|
3262
|
-
}
|
|
3263
|
-
async function checkUniquenessConstraints(ctx, kind, id, props, constraints) {
|
|
3264
|
-
for (const constraint of constraints) {
|
|
3265
|
-
if (!checkWherePredicate(constraint, props)) {
|
|
3266
|
-
continue;
|
|
3267
|
-
}
|
|
3268
|
-
const key = computeUniqueKey(
|
|
3269
|
-
props,
|
|
3270
|
-
constraint.fields,
|
|
3271
|
-
constraint.collation
|
|
3272
|
-
);
|
|
3273
|
-
const kindsToCheck = getKindsForUniquenessCheck(
|
|
3274
|
-
kind,
|
|
3275
|
-
constraint.scope,
|
|
3276
|
-
ctx.registry
|
|
3277
|
-
);
|
|
3278
|
-
for (const kindToCheck of kindsToCheck) {
|
|
3279
|
-
const existing = await ctx.backend.checkUnique({
|
|
3280
|
-
graphId: ctx.graphId,
|
|
3281
|
-
nodeKind: kindToCheck,
|
|
3282
|
-
constraintName: constraint.name,
|
|
3283
|
-
key
|
|
3284
|
-
});
|
|
3285
|
-
if (existing && existing.node_id !== id) {
|
|
3286
|
-
throw new chunkC4F7VJ5D_cjs.UniquenessError({
|
|
3287
|
-
constraintName: constraint.name,
|
|
3288
|
-
kind: kindToCheck,
|
|
3289
|
-
existingId: existing.node_id,
|
|
3290
|
-
newId: id,
|
|
3291
|
-
fields: constraint.fields
|
|
3292
|
-
});
|
|
3293
|
-
}
|
|
3294
|
-
}
|
|
3295
|
-
}
|
|
3296
|
-
}
|
|
3297
|
-
async function insertUniquenessEntries(ctx, kind, id, props, constraints) {
|
|
3298
|
-
for (const constraint of constraints) {
|
|
3299
|
-
if (!checkWherePredicate(constraint, props)) {
|
|
3300
|
-
continue;
|
|
3301
|
-
}
|
|
3302
|
-
const key = computeUniqueKey(
|
|
3303
|
-
props,
|
|
3304
|
-
constraint.fields,
|
|
3305
|
-
constraint.collation
|
|
3306
|
-
);
|
|
3307
|
-
await ctx.backend.insertUnique({
|
|
3308
|
-
graphId: ctx.graphId,
|
|
3309
|
-
nodeKind: kind,
|
|
3310
|
-
constraintName: constraint.name,
|
|
3311
|
-
key,
|
|
3312
|
-
nodeId: id,
|
|
3313
|
-
concreteKind: kind
|
|
3314
|
-
});
|
|
3315
|
-
}
|
|
3316
|
-
}
|
|
3317
|
-
async function insertUniquenessEntriesBatch(ctx, items) {
|
|
3318
|
-
const entries = [];
|
|
3319
|
-
for (const item of items) {
|
|
3320
|
-
for (const constraint of item.constraints) {
|
|
3321
|
-
if (!checkWherePredicate(constraint, item.props)) {
|
|
3322
|
-
continue;
|
|
3323
|
-
}
|
|
3324
|
-
entries.push({
|
|
3325
|
-
graphId: ctx.graphId,
|
|
3326
|
-
nodeKind: item.kind,
|
|
3327
|
-
constraintName: constraint.name,
|
|
3328
|
-
key: computeUniqueKey(
|
|
3329
|
-
item.props,
|
|
3330
|
-
constraint.fields,
|
|
3331
|
-
constraint.collation
|
|
3332
|
-
),
|
|
3333
|
-
nodeId: item.id,
|
|
3334
|
-
concreteKind: item.kind
|
|
3335
|
-
});
|
|
3336
|
-
}
|
|
3337
|
-
}
|
|
3338
|
-
if (entries.length === 0) return;
|
|
3339
|
-
if (ctx.backend.insertUniqueBatch !== void 0) {
|
|
3340
|
-
await ctx.backend.insertUniqueBatch(entries);
|
|
3341
|
-
return;
|
|
3342
|
-
}
|
|
3343
|
-
for (const entry of entries) {
|
|
3344
|
-
await ctx.backend.insertUnique(entry);
|
|
3345
|
-
}
|
|
3346
|
-
}
|
|
3347
|
-
async function deleteUniquenessEntries(ctx, kind, props, constraints) {
|
|
3348
|
-
for (const constraint of constraints) {
|
|
3349
|
-
if (!checkWherePredicate(constraint, props)) {
|
|
3350
|
-
continue;
|
|
3351
|
-
}
|
|
3352
|
-
const key = computeUniqueKey(
|
|
3353
|
-
props,
|
|
3354
|
-
constraint.fields,
|
|
3355
|
-
constraint.collation
|
|
3356
|
-
);
|
|
3357
|
-
await ctx.backend.deleteUnique({
|
|
3358
|
-
graphId: ctx.graphId,
|
|
3359
|
-
nodeKind: kind,
|
|
3360
|
-
constraintName: constraint.name,
|
|
3361
|
-
key
|
|
3362
|
-
});
|
|
3363
|
-
}
|
|
3364
|
-
}
|
|
3365
|
-
async function updateUniquenessEntries(ctx, kind, id, oldProps, newProps, constraints) {
|
|
3366
|
-
const pending = [];
|
|
3367
|
-
for (const constraint of constraints) {
|
|
3368
|
-
const oldApplies = checkWherePredicate(constraint, oldProps);
|
|
3369
|
-
const newApplies = checkWherePredicate(constraint, newProps);
|
|
3370
|
-
const oldKey = oldApplies ? computeUniqueKey(oldProps, constraint.fields, constraint.collation) : void 0;
|
|
3371
|
-
const newKey = newApplies ? computeUniqueKey(newProps, constraint.fields, constraint.collation) : void 0;
|
|
3372
|
-
if (!oldApplies && !newApplies) {
|
|
3373
|
-
continue;
|
|
3374
|
-
}
|
|
3375
|
-
if (oldApplies && newApplies && oldKey === newKey) {
|
|
3376
|
-
continue;
|
|
3377
|
-
}
|
|
3378
|
-
if (newApplies && newKey !== void 0) {
|
|
3379
|
-
const kindsToCheck = getKindsForUniquenessCheck(
|
|
3380
|
-
kind,
|
|
3381
|
-
constraint.scope,
|
|
3382
|
-
ctx.registry
|
|
3383
|
-
);
|
|
3384
|
-
for (const kindToCheck of kindsToCheck) {
|
|
3385
|
-
const existing = await ctx.backend.checkUnique({
|
|
3386
|
-
graphId: ctx.graphId,
|
|
3387
|
-
nodeKind: kindToCheck,
|
|
3388
|
-
constraintName: constraint.name,
|
|
3389
|
-
key: newKey
|
|
3390
|
-
});
|
|
3391
|
-
if (existing && existing.node_id !== id) {
|
|
3392
|
-
throw new chunkC4F7VJ5D_cjs.UniquenessError({
|
|
3393
|
-
constraintName: constraint.name,
|
|
3394
|
-
kind: kindToCheck,
|
|
3395
|
-
existingId: existing.node_id,
|
|
3396
|
-
newId: id,
|
|
3397
|
-
fields: constraint.fields
|
|
3398
|
-
});
|
|
3399
|
-
}
|
|
3400
|
-
}
|
|
3401
|
-
}
|
|
3402
|
-
pending.push({ constraintName: constraint.name, oldKey, newKey });
|
|
3403
|
-
}
|
|
3404
|
-
for (const mutation of pending) {
|
|
3405
|
-
if (mutation.oldKey !== void 0) {
|
|
3406
|
-
await ctx.backend.deleteUnique({
|
|
3407
|
-
graphId: ctx.graphId,
|
|
3408
|
-
nodeKind: kind,
|
|
3409
|
-
constraintName: mutation.constraintName,
|
|
3410
|
-
key: mutation.oldKey
|
|
3411
|
-
});
|
|
3412
|
-
}
|
|
3413
|
-
}
|
|
3414
|
-
for (const mutation of pending) {
|
|
3415
|
-
if (mutation.newKey !== void 0) {
|
|
3416
|
-
await ctx.backend.insertUnique({
|
|
3417
|
-
graphId: ctx.graphId,
|
|
3418
|
-
nodeKind: kind,
|
|
3419
|
-
constraintName: mutation.constraintName,
|
|
3420
|
-
key: mutation.newKey,
|
|
3421
|
-
nodeId: id,
|
|
3422
|
-
concreteKind: kind
|
|
3423
|
-
});
|
|
3424
|
-
}
|
|
3425
|
-
}
|
|
3426
|
-
}
|
|
3427
|
-
|
|
3428
|
-
// src/store/operations/node-write-pipeline.ts
|
|
3429
|
-
function createNodeWriteContext(graphId, registry, lock) {
|
|
3430
|
-
return { graphId, registry, lock };
|
|
3431
|
-
}
|
|
3432
|
-
function uniquenessContext(ctx, backend) {
|
|
3433
|
-
return createUniquenessContext(ctx.graphId, ctx.registry, backend);
|
|
3434
|
-
}
|
|
3435
|
-
function nodeSyncContext(ctx, kind, id, backend) {
|
|
3436
|
-
return { graphId: ctx.graphId, nodeKind: kind, nodeId: id, backend };
|
|
3437
|
-
}
|
|
3438
|
-
async function enforceNodeDeleteBehavior(ctx, args, backend, policy) {
|
|
3439
|
-
if (policy?.enforceDeleteBehavior === false) return;
|
|
3440
|
-
const behavior = args.onDelete ?? "restrict";
|
|
3441
|
-
const connectedEdges = await backend.findEdgesConnectedTo({
|
|
3442
|
-
graphId: ctx.graphId,
|
|
3443
|
-
nodeKind: args.kind,
|
|
3444
|
-
nodeId: args.id
|
|
3445
|
-
});
|
|
3446
|
-
if (connectedEdges.length === 0) return;
|
|
3447
|
-
switch (behavior) {
|
|
3448
|
-
case "restrict": {
|
|
3449
|
-
throw new chunkC4F7VJ5D_cjs.RestrictedDeleteError({
|
|
3450
|
-
nodeKind: args.kind,
|
|
3451
|
-
nodeId: args.id,
|
|
3452
|
-
edgeCount: connectedEdges.length,
|
|
3453
|
-
edgeKinds: [...new Set(connectedEdges.map((edge) => edge.kind))]
|
|
3454
|
-
});
|
|
3455
|
-
}
|
|
3456
|
-
case "cascade":
|
|
3457
|
-
case "disconnect": {
|
|
3458
|
-
const batchDelete = args.mode === "hard" ? backend.hardDeleteEdgesBatch : backend.deleteEdgesBatch;
|
|
3459
|
-
if (batchDelete !== void 0) {
|
|
3460
|
-
await batchDelete({
|
|
3461
|
-
graphId: ctx.graphId,
|
|
3462
|
-
ids: connectedEdges.map((edge) => edge.id)
|
|
3463
|
-
});
|
|
3464
|
-
break;
|
|
3465
|
-
}
|
|
3466
|
-
for (const edge of connectedEdges) {
|
|
3467
|
-
await (args.mode === "hard" ? backend.hardDeleteEdge({ graphId: ctx.graphId, id: edge.id }) : backend.deleteEdge({ graphId: ctx.graphId, id: edge.id }));
|
|
3468
|
-
}
|
|
3469
|
-
break;
|
|
3470
|
-
}
|
|
3471
|
-
}
|
|
3472
|
-
}
|
|
3473
|
-
async function applyNodeInsertSideEffects(ctx, args, backend) {
|
|
3474
|
-
await insertUniquenessEntries(
|
|
3475
|
-
uniquenessContext(ctx, backend),
|
|
3476
|
-
args.kind,
|
|
3477
|
-
args.id,
|
|
3478
|
-
args.props,
|
|
3479
|
-
args.uniqueConstraints
|
|
3480
|
-
);
|
|
3481
|
-
await Promise.all([
|
|
3482
|
-
syncEmbeddings(
|
|
3483
|
-
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
3484
|
-
args.schema,
|
|
3485
|
-
args.props
|
|
3486
|
-
),
|
|
3487
|
-
syncFulltext(
|
|
3488
|
-
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
3489
|
-
args.schema,
|
|
3490
|
-
args.props
|
|
3491
|
-
)
|
|
3492
|
-
]);
|
|
3493
|
-
}
|
|
3494
|
-
async function applyNodeInsertSideEffectsBatch(ctx, items, backend) {
|
|
3495
|
-
if (items.length === 0) return;
|
|
3496
|
-
await insertUniquenessEntriesBatch(
|
|
3497
|
-
uniquenessContext(ctx, backend),
|
|
3498
|
-
items.map((item) => ({
|
|
3499
|
-
kind: item.kind,
|
|
3500
|
-
id: item.id,
|
|
3501
|
-
props: item.props,
|
|
3502
|
-
constraints: item.uniqueConstraints
|
|
3503
|
-
}))
|
|
3504
|
-
);
|
|
3505
|
-
const byKind = /* @__PURE__ */ new Map();
|
|
3506
|
-
for (const item of items) {
|
|
3507
|
-
const group = byKind.get(item.kind) ?? { schema: item.schema, rows: [] };
|
|
3508
|
-
group.rows.push({ nodeId: item.id, props: item.props });
|
|
3509
|
-
byKind.set(item.kind, group);
|
|
3510
|
-
}
|
|
3511
|
-
await Promise.all(
|
|
3512
|
-
[...byKind.entries()].flatMap(([kind, group]) => {
|
|
3513
|
-
const syncArguments = { graphId: ctx.graphId, nodeKind: kind, backend };
|
|
3514
|
-
return [
|
|
3515
|
-
syncEmbeddingsBatchForKind(syncArguments, group.schema, group.rows),
|
|
3516
|
-
syncFulltextBatchForKind(syncArguments, group.schema, group.rows)
|
|
3517
|
-
];
|
|
3518
|
-
})
|
|
3519
|
-
);
|
|
3520
|
-
}
|
|
3521
|
-
function parseRowProps(row) {
|
|
3522
|
-
return chunk3PRKZW6D_cjs.rowPropsToObject(row.props);
|
|
3523
|
-
}
|
|
3524
|
-
async function applyNodeUpdate(ctx, args, backend) {
|
|
3525
|
-
const { kind, id } = args.existing;
|
|
3526
|
-
if (args.existing.deleted_at === void 0) {
|
|
3527
|
-
await updateUniquenessEntries(
|
|
3528
|
-
uniquenessContext(ctx, backend),
|
|
3529
|
-
kind,
|
|
3530
|
-
id,
|
|
3531
|
-
parseRowProps(args.existing),
|
|
3532
|
-
args.validatedProps,
|
|
3533
|
-
args.uniqueConstraints
|
|
3534
|
-
);
|
|
3535
|
-
} else {
|
|
3536
|
-
await checkUniquenessConstraints(
|
|
3537
|
-
uniquenessContext(ctx, backend),
|
|
3538
|
-
kind,
|
|
3539
|
-
id,
|
|
3540
|
-
args.validatedProps,
|
|
3541
|
-
args.uniqueConstraints
|
|
3542
|
-
);
|
|
3543
|
-
await insertUniquenessEntries(
|
|
3544
|
-
uniquenessContext(ctx, backend),
|
|
3545
|
-
kind,
|
|
3546
|
-
id,
|
|
3547
|
-
args.validatedProps,
|
|
3548
|
-
args.uniqueConstraints
|
|
3549
|
-
);
|
|
3550
|
-
}
|
|
3551
|
-
const updateParams = {
|
|
3552
|
-
graphId: ctx.graphId,
|
|
3553
|
-
kind,
|
|
3554
|
-
id,
|
|
3555
|
-
props: args.validatedProps,
|
|
3556
|
-
incrementVersion: true
|
|
3557
|
-
};
|
|
3558
|
-
if (args.validTo !== void 0) updateParams.validTo = args.validTo;
|
|
3559
|
-
if (args.clearDeleted) updateParams.clearDeleted = true;
|
|
3560
|
-
const row = await backend.updateNode(updateParams);
|
|
3561
|
-
await Promise.all([
|
|
3562
|
-
syncEmbeddings(
|
|
3563
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3564
|
-
args.schema,
|
|
3565
|
-
args.validatedProps
|
|
3566
|
-
),
|
|
3567
|
-
syncFulltext(
|
|
3568
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3569
|
-
args.schema,
|
|
3570
|
-
args.validatedProps
|
|
3571
|
-
)
|
|
3572
|
-
]);
|
|
3573
|
-
return row;
|
|
3574
|
-
}
|
|
3575
|
-
async function applyNodeSoftDelete(ctx, args, backend, policy) {
|
|
3576
|
-
const { kind, id } = args.existing;
|
|
3577
|
-
await enforceNodeDeleteBehavior(
|
|
3578
|
-
ctx,
|
|
3579
|
-
{ kind, id, mode: "soft", onDelete: args.onDelete },
|
|
3580
|
-
backend,
|
|
3581
|
-
policy
|
|
3582
|
-
);
|
|
3583
|
-
await backend.deleteNode({
|
|
3584
|
-
graphId: ctx.graphId,
|
|
3585
|
-
kind,
|
|
3586
|
-
id
|
|
3587
|
-
});
|
|
3588
|
-
await deleteUniquenessEntries(
|
|
3589
|
-
uniquenessContext(ctx, backend),
|
|
3590
|
-
kind,
|
|
3591
|
-
parseRowProps(args.existing),
|
|
3592
|
-
args.uniqueConstraints
|
|
3593
|
-
);
|
|
3594
|
-
await deleteNodeEmbeddings(
|
|
3595
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3596
|
-
args.schema
|
|
3597
|
-
);
|
|
3598
|
-
await deleteNodeFulltext(
|
|
3599
|
-
nodeSyncContext(ctx, kind, id, backend),
|
|
3600
|
-
args.schema
|
|
3601
|
-
);
|
|
3602
|
-
}
|
|
3603
|
-
async function applyNodeHardDelete(ctx, args, backend) {
|
|
3604
|
-
await enforceNodeDeleteBehavior(
|
|
3605
|
-
ctx,
|
|
3606
|
-
{ kind: args.kind, id: args.id, mode: "hard", onDelete: args.onDelete },
|
|
3607
|
-
backend
|
|
3608
|
-
);
|
|
3609
|
-
await backend.hardDeleteNode({
|
|
3610
|
-
graphId: ctx.graphId,
|
|
3611
|
-
kind: args.kind,
|
|
3612
|
-
id: args.id
|
|
3613
|
-
});
|
|
3614
|
-
await deleteNodeEmbeddings(
|
|
3615
|
-
nodeSyncContext(ctx, args.kind, args.id, backend),
|
|
3616
|
-
args.schema
|
|
3617
|
-
);
|
|
3618
|
-
}
|
|
3619
|
-
async function applyNodeResurrect(ctx, args, backend) {
|
|
3620
|
-
const { kind, id } = args.existing;
|
|
3621
|
-
const props = parseRowProps(args.existing);
|
|
3622
|
-
await checkUniquenessConstraints(
|
|
3623
|
-
uniquenessContext(ctx, backend),
|
|
3624
|
-
kind,
|
|
3625
|
-
id,
|
|
3626
|
-
props,
|
|
3627
|
-
args.uniqueConstraints
|
|
3628
|
-
);
|
|
3629
|
-
await insertUniquenessEntries(
|
|
3630
|
-
uniquenessContext(ctx, backend),
|
|
3631
|
-
kind,
|
|
3632
|
-
id,
|
|
3633
|
-
props,
|
|
3634
|
-
args.uniqueConstraints
|
|
3635
|
-
);
|
|
3636
|
-
const row = await backend.updateNode({
|
|
3637
|
-
graphId: ctx.graphId,
|
|
3638
|
-
kind,
|
|
3639
|
-
id,
|
|
3640
|
-
props,
|
|
3641
|
-
incrementVersion: true,
|
|
3642
|
-
clearDeleted: true
|
|
3643
|
-
});
|
|
3644
|
-
await Promise.all([
|
|
3645
|
-
syncEmbeddings(nodeSyncContext(ctx, kind, id, backend), args.schema, props),
|
|
3646
|
-
syncFulltext(nodeSyncContext(ctx, kind, id, backend), args.schema, props)
|
|
3647
|
-
]);
|
|
3648
|
-
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;
|
|
3649
3215
|
}
|
|
3650
3216
|
|
|
3651
|
-
exports.AUTO_REFRESH_STATISTICS_ROW_THRESHOLD = AUTO_REFRESH_STATISTICS_ROW_THRESHOLD;
|
|
3652
3217
|
exports.CURRENT_READ_INSTANT_PLACEHOLDER = CURRENT_READ_INSTANT_PLACEHOLDER;
|
|
3653
|
-
exports.
|
|
3654
|
-
exports.
|
|
3218
|
+
exports.IDENTITY_ASSERTION_COLUMNS = IDENTITY_ASSERTION_COLUMNS;
|
|
3219
|
+
exports.IDENTITY_PEER_CLASS_COLUMNS = IDENTITY_PEER_CLASS_COLUMNS;
|
|
3655
3220
|
exports.advanceRevisionClock = advanceRevisionClock;
|
|
3656
|
-
exports.applyNodeHardDelete = applyNodeHardDelete;
|
|
3657
|
-
exports.applyNodeInsertSideEffects = applyNodeInsertSideEffects;
|
|
3658
|
-
exports.applyNodeInsertSideEffectsBatch = applyNodeInsertSideEffectsBatch;
|
|
3659
|
-
exports.applyNodeResurrect = applyNodeResurrect;
|
|
3660
|
-
exports.applyNodeSoftDelete = applyNodeSoftDelete;
|
|
3661
|
-
exports.applyNodeUpdate = applyNodeUpdate;
|
|
3662
3221
|
exports.arrayField = arrayField;
|
|
3663
3222
|
exports.assertCurrentRecordedSchema = assertCurrentRecordedSchema;
|
|
3664
3223
|
exports.assertRecordedCaptureTransactionIsolation = assertRecordedCaptureTransactionIsolation;
|
|
@@ -3666,25 +3225,18 @@ exports.assertRevisionTrackableBackend = assertRevisionTrackableBackend;
|
|
|
3666
3225
|
exports.baseField = baseField;
|
|
3667
3226
|
exports.buildFieldBuilderForTypeInfo = buildFieldBuilderForTypeInfo;
|
|
3668
3227
|
exports.buildPredicateIndex = buildPredicateIndex;
|
|
3669
|
-
exports.checkCardinality = checkCardinality;
|
|
3670
|
-
exports.checkDisjointness = checkDisjointness;
|
|
3671
|
-
exports.checkUniqueEdge = checkUniqueEdge;
|
|
3672
|
-
exports.checkUniquenessConstraints = checkUniquenessConstraints;
|
|
3673
|
-
exports.checkWherePredicate = checkWherePredicate;
|
|
3674
3228
|
exports.closeRecordedHardDeletedKind = closeRecordedHardDeletedKind;
|
|
3229
|
+
exports.compareCodePoints = compareCodePoints;
|
|
3230
|
+
exports.compareStrings = compareStrings;
|
|
3675
3231
|
exports.compileFieldValue = compileFieldValue;
|
|
3676
3232
|
exports.compileKindFilter = compileKindFilter;
|
|
3677
3233
|
exports.compilePredicateClauses = compilePredicateClauses;
|
|
3678
3234
|
exports.compilePredicateExpression = compilePredicateExpression;
|
|
3679
3235
|
exports.compileTemporalFilter = compileTemporalFilter;
|
|
3680
|
-
exports.computeFulltextContent = computeFulltextContent;
|
|
3681
|
-
exports.computeUniqueKey = computeUniqueKey;
|
|
3682
3236
|
exports.createFulltextAccessor = createFulltextAccessor;
|
|
3683
3237
|
exports.createGraphBackendProjection = createGraphBackendProjection;
|
|
3684
|
-
exports.createNodeWriteContext = createNodeWriteContext;
|
|
3685
3238
|
exports.createRecordedBackend = createRecordedBackend;
|
|
3686
3239
|
exports.createRecordedTransactionScope = createRecordedTransactionScope;
|
|
3687
|
-
exports.createUniquenessContext = createUniquenessContext;
|
|
3688
3240
|
exports.currentReadInstant = currentReadInstant;
|
|
3689
3241
|
exports.currentReadInstantFor = currentReadInstantFor;
|
|
3690
3242
|
exports.dateField = dateField;
|
|
@@ -3697,13 +3249,17 @@ exports.extractVectorSimilarityPredicates = extractVectorSimilarityPredicates;
|
|
|
3697
3249
|
exports.fieldRef = fieldRef;
|
|
3698
3250
|
exports.generateId = generateId;
|
|
3699
3251
|
exports.getEdgeRowsByIds = getEdgeRowsByIds;
|
|
3700
|
-
exports.getEmbeddingFields = getEmbeddingFields;
|
|
3701
3252
|
exports.getFieldPointer = getFieldPointer;
|
|
3702
3253
|
exports.getHybridTargetAlias = getHybridTargetAlias;
|
|
3703
|
-
exports.getKindsForUniquenessCheck = getKindsForUniquenessCheck;
|
|
3704
3254
|
exports.getNodeKindsForAlias = getNodeKindsForAlias;
|
|
3705
3255
|
exports.getNodeRowsByIds = getNodeRowsByIds;
|
|
3706
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;
|
|
3707
3263
|
exports.inSubquery = inSubquery;
|
|
3708
3264
|
exports.isParameterRef = isParameterRef;
|
|
3709
3265
|
exports.lockRecordedGraphWrite = lockRecordedGraphWrite;
|
|
@@ -3723,16 +3279,12 @@ exports.runInsertBatch = runInsertBatch;
|
|
|
3723
3279
|
exports.runInsertBatchReturning = runInsertBatchReturning;
|
|
3724
3280
|
exports.runInsertNoReturn = runInsertNoReturn;
|
|
3725
3281
|
exports.sqlValueList = sqlValueList;
|
|
3726
|
-
exports.storeBackend = storeBackend;
|
|
3727
|
-
exports.storeRuntime = storeRuntime;
|
|
3728
3282
|
exports.stringField = stringField;
|
|
3729
3283
|
exports.throwHistoryUnsafeSqlAccess = throwHistoryUnsafeSqlAccess;
|
|
3730
3284
|
exports.throwRevisionTrackingUnsafeSqlAccess = throwRevisionTrackingUnsafeSqlAccess;
|
|
3731
|
-
exports.transactionBackend = transactionBackend;
|
|
3732
|
-
exports.transactionNodeOperationHookRunner = transactionNodeOperationHookRunner;
|
|
3733
3285
|
exports.uncapturedGraphWriteLock = uncapturedGraphWriteLock;
|
|
3734
|
-
exports.validateEdgeEndpoints = validateEdgeEndpoints;
|
|
3735
3286
|
exports.withPinnedReadInstant = withPinnedReadInstant;
|
|
3736
3287
|
exports.withRecordedFlushObserver = withRecordedFlushObserver;
|
|
3737
|
-
|
|
3738
|
-
//# sourceMappingURL=chunk-
|
|
3288
|
+
exports.withRecordedIdentityMutationTarget = withRecordedIdentityMutationTarget;
|
|
3289
|
+
//# sourceMappingURL=chunk-XMQSEJCF.cjs.map
|
|
3290
|
+
//# sourceMappingURL=chunk-XMQSEJCF.cjs.map
|