@lix-js/sdk 0.5.0-preview.0 → 0.5.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account/create-account.d.ts +5 -5
- package/dist/account/create-account.d.ts.map +1 -1
- package/dist/account/create-account.js +2 -2
- package/dist/account/create-account.js.map +1 -1
- package/dist/account/index.d.ts +1 -1
- package/dist/account/index.d.ts.map +1 -1
- package/dist/account/schema.d.ts +23 -7
- package/dist/account/schema.d.ts.map +1 -1
- package/dist/account/schema.js +84 -27
- package/dist/account/schema.js.map +1 -1
- package/dist/account/schema.test.js +87 -83
- package/dist/account/schema.test.js.map +1 -1
- package/dist/account/switch-account.d.ts +2 -2
- package/dist/account/switch-account.d.ts.map +1 -1
- package/dist/account/switch-account.js +3 -4
- package/dist/account/switch-account.js.map +1 -1
- package/dist/account/switch-account.test.js +4 -4
- package/dist/account/switch-account.test.js.map +1 -1
- package/dist/change/apply-changes.d.ts +13 -0
- package/dist/change/apply-changes.d.ts.map +1 -1
- package/dist/change/apply-changes.js +14 -4
- package/dist/change/apply-changes.js.map +1 -1
- package/dist/change/apply-changes.test.js +91 -1
- package/dist/change/apply-changes.test.js.map +1 -1
- package/dist/change/create-change-v2.d.ts +11 -0
- package/dist/change/create-change-v2.d.ts.map +1 -0
- package/dist/change/create-change-v2.js +31 -0
- package/dist/change/create-change-v2.js.map +1 -0
- package/dist/change/create-change-v2.test.d.ts +2 -0
- package/dist/change/create-change-v2.test.d.ts.map +1 -0
- package/dist/change/create-change-v2.test.js +39 -0
- package/dist/change/create-change-v2.test.js.map +1 -0
- package/dist/change/create-change.d.ts +2 -2
- package/dist/change/create-change.d.ts.map +1 -1
- package/dist/change/create-change.js +3 -1
- package/dist/change/create-change.js.map +1 -1
- package/dist/change/create-change.test.js +4 -6
- package/dist/change/create-change.test.js.map +1 -1
- package/dist/change/index.d.ts +1 -1
- package/dist/change/index.d.ts.map +1 -1
- package/dist/change/index.js.map +1 -1
- package/dist/change/schema.d.ts +40 -2
- package/dist/change/schema.d.ts.map +1 -1
- package/dist/change/schema.js +50 -9
- package/dist/change/schema.js.map +1 -1
- package/dist/change/schema.test.js +33 -0
- package/dist/change/schema.test.js.map +1 -1
- package/dist/change-author/index.d.ts +1 -1
- package/dist/change-author/index.d.ts.map +1 -1
- package/dist/change-author/index.js +1 -1
- package/dist/change-author/index.js.map +1 -1
- package/dist/change-author/schema.d.ts +12 -9
- package/dist/change-author/schema.d.ts.map +1 -1
- package/dist/change-author/schema.js +16 -10
- package/dist/change-author/schema.js.map +1 -1
- package/dist/change-author/schema.test.js +283 -229
- package/dist/change-author/schema.test.js.map +1 -1
- package/dist/change-proposal/create-change-proposal.d.ts +3 -3
- package/dist/change-proposal/create-change-proposal.d.ts.map +1 -1
- package/dist/change-proposal/database-schema.js +1 -1
- package/dist/change-set/apply-change-set.d.ts +2 -2
- package/dist/change-set/apply-change-set.d.ts.map +1 -1
- package/dist/change-set/apply-change-set.js +40 -51
- package/dist/change-set/apply-change-set.js.map +1 -1
- package/dist/change-set/apply-change-set.test.js +6 -3
- package/dist/change-set/apply-change-set.test.js.map +1 -1
- package/dist/change-set/before-after-of-file.d.ts +31 -0
- package/dist/change-set/before-after-of-file.d.ts.map +1 -0
- package/dist/change-set/before-after-of-file.js +191 -0
- package/dist/change-set/before-after-of-file.js.map +1 -0
- package/dist/change-set/before-after-of-file.test.d.ts +2 -0
- package/dist/change-set/before-after-of-file.test.d.ts.map +1 -0
- package/dist/change-set/before-after-of-file.test.js +221 -0
- package/dist/change-set/before-after-of-file.test.js.map +1 -0
- package/dist/change-set/change-set-element-in-symmetric-difference.d.ts +2 -1
- package/dist/change-set/change-set-element-in-symmetric-difference.d.ts.map +1 -1
- package/dist/change-set/change-set-element-in-symmetric-difference.js.map +1 -1
- package/dist/change-set/change-set-element-in-symmetric-difference.test.js +204 -34
- package/dist/change-set/change-set-element-in-symmetric-difference.test.js.map +1 -1
- package/dist/change-set/checkout-change-set.d.ts +15 -0
- package/dist/change-set/checkout-change-set.d.ts.map +1 -0
- package/dist/change-set/checkout-change-set.js +64 -0
- package/dist/change-set/checkout-change-set.js.map +1 -0
- package/dist/change-set/checkout-change-set.test.d.ts +2 -0
- package/dist/change-set/checkout-change-set.test.d.ts.map +1 -0
- package/dist/change-set/checkout-change-set.test.js +127 -0
- package/dist/change-set/checkout-change-set.test.js.map +1 -0
- package/dist/change-set/create-change-set.d.ts +7 -9
- package/dist/change-set/create-change-set.d.ts.map +1 -1
- package/dist/change-set/create-change-set.js +3 -25
- package/dist/change-set/create-change-set.js.map +1 -1
- package/dist/change-set/create-change-set.test.js +0 -31
- package/dist/change-set/create-change-set.test.js.map +1 -1
- package/dist/change-set/create-checkpoint.d.ts.map +1 -1
- package/dist/change-set/create-checkpoint.js +11 -2
- package/dist/change-set/create-checkpoint.js.map +1 -1
- package/dist/change-set/create-checkpoint.test.js +53 -0
- package/dist/change-set/create-checkpoint.test.js.map +1 -1
- package/dist/change-set/create-merge-change-set.d.ts +4 -4
- package/dist/change-set/create-merge-change-set.d.ts.map +1 -1
- package/dist/change-set/create-transition-change-set.d.ts +4 -4
- package/dist/change-set/create-transition-change-set.d.ts.map +1 -1
- package/dist/change-set/create-undo-change-set.d.ts +5 -5
- package/dist/change-set/create-undo-change-set.d.ts.map +1 -1
- package/dist/change-set/create-undo-change-set.js +4 -3
- package/dist/change-set/create-undo-change-set.js.map +1 -1
- package/dist/change-set/database-schema.d.ts +39 -0
- package/dist/change-set/database-schema.d.ts.map +1 -0
- package/dist/change-set/database-schema.js +86 -0
- package/dist/change-set/database-schema.js.map +1 -0
- package/dist/change-set/database-schema.test.d.ts +2 -0
- package/dist/change-set/database-schema.test.d.ts.map +1 -0
- package/dist/change-set/database-schema.test.js +547 -0
- package/dist/change-set/database-schema.test.js.map +1 -0
- package/dist/change-set/diff-for-file.d.ts +29 -0
- package/dist/change-set/diff-for-file.d.ts.map +1 -0
- package/dist/change-set/diff-for-file.js +19 -0
- package/dist/change-set/diff-for-file.js.map +1 -0
- package/dist/change-set/get-before-after-of-file.d.ts +31 -0
- package/dist/change-set/get-before-after-of-file.d.ts.map +1 -0
- package/dist/change-set/get-before-after-of-file.js +189 -0
- package/dist/change-set/get-before-after-of-file.js.map +1 -0
- package/dist/change-set/get-before-after-of-file.test.d.ts +2 -0
- package/dist/change-set/get-before-after-of-file.test.d.ts.map +1 -0
- package/dist/change-set/get-before-after-of-file.test.js +220 -0
- package/dist/change-set/get-before-after-of-file.test.js.map +1 -0
- package/dist/change-set/index.d.ts +1 -5
- package/dist/change-set/index.d.ts.map +1 -1
- package/dist/change-set/index.js +1 -5
- package/dist/change-set/index.js.map +1 -1
- package/dist/change-set/merge-change-sets.d.ts +23 -0
- package/dist/change-set/merge-change-sets.d.ts.map +1 -0
- package/dist/change-set/merge-change-sets.js +69 -0
- package/dist/change-set/merge-change-sets.js.map +1 -0
- package/dist/change-set/merge-change-sets.test.d.ts +2 -0
- package/dist/change-set/merge-change-sets.test.d.ts.map +1 -0
- package/dist/change-set/merge-change-sets.test.js +184 -0
- package/dist/change-set/merge-change-sets.test.js.map +1 -0
- package/dist/change-set/restore-change-set.d.ts +14 -0
- package/dist/change-set/restore-change-set.d.ts.map +1 -0
- package/dist/change-set/restore-change-set.js +98 -0
- package/dist/change-set/restore-change-set.js.map +1 -0
- package/dist/change-set/restore-change-set.test.d.ts +2 -0
- package/dist/change-set/restore-change-set.test.d.ts.map +1 -0
- package/dist/change-set/restore-change-set.test.js +238 -0
- package/dist/change-set/restore-change-set.test.js.map +1 -0
- package/dist/change-set/schema.d.ts +28 -72
- package/dist/change-set/schema.d.ts.map +1 -1
- package/dist/change-set/schema.js +37 -84
- package/dist/change-set/schema.js.map +1 -1
- package/dist/change-set/schema.test.js +0 -247
- package/dist/change-set/schema.test.js.map +1 -1
- package/dist/change-set-edge/database-schema.d.ts +11 -0
- package/dist/change-set-edge/database-schema.d.ts.map +1 -0
- package/dist/change-set-edge/database-schema.js +29 -0
- package/dist/change-set-edge/database-schema.js.map +1 -0
- package/dist/change-set-edge/database-schema.test.d.ts +2 -0
- package/dist/change-set-edge/database-schema.test.d.ts.map +1 -0
- package/dist/change-set-edge/database-schema.test.js +166 -0
- package/dist/change-set-edge/database-schema.test.js.map +1 -0
- package/dist/change-set-edge/index.d.ts +2 -0
- package/dist/change-set-edge/index.d.ts.map +1 -0
- package/dist/change-set-edge/index.js +2 -0
- package/dist/change-set-edge/index.js.map +1 -0
- package/dist/change-set-v2/apply-change-set.d.ts +10 -0
- package/dist/change-set-v2/apply-change-set.d.ts.map +1 -0
- package/dist/change-set-v2/apply-change-set.js +147 -0
- package/dist/change-set-v2/apply-change-set.js.map +1 -0
- package/dist/change-set-v2/apply-change-set.test.d.ts +2 -0
- package/dist/change-set-v2/apply-change-set.test.d.ts.map +1 -0
- package/dist/change-set-v2/apply-change-set.test.js +270 -0
- package/dist/change-set-v2/apply-change-set.test.js.map +1 -0
- package/dist/change-set-v2/create-change-set.d.ts +10 -0
- package/dist/change-set-v2/create-change-set.d.ts.map +1 -0
- package/dist/change-set-v2/create-change-set.js +57 -0
- package/dist/change-set-v2/create-change-set.js.map +1 -0
- package/dist/change-set-v2/create-change-set.test.d.ts +2 -0
- package/dist/change-set-v2/create-change-set.test.d.ts.map +1 -0
- package/dist/change-set-v2/create-change-set.test.js +59 -0
- package/dist/change-set-v2/create-change-set.test.js.map +1 -0
- package/dist/change-set-v2/create-checkpoint.d.ts +7 -0
- package/dist/change-set-v2/create-checkpoint.d.ts.map +1 -0
- package/dist/change-set-v2/create-checkpoint.js +79 -0
- package/dist/change-set-v2/create-checkpoint.js.map +1 -0
- package/dist/change-set-v2/create-checkpoint.test.d.ts +2 -0
- package/dist/change-set-v2/create-checkpoint.test.d.ts.map +1 -0
- package/dist/change-set-v2/create-checkpoint.test.js +289 -0
- package/dist/change-set-v2/create-checkpoint.test.js.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.d.ts +23 -0
- package/dist/change-set-v2/create-merge-change-set.d.ts.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.js +68 -0
- package/dist/change-set-v2/create-merge-change-set.js.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.test.d.ts +2 -0
- package/dist/change-set-v2/create-merge-change-set.test.d.ts.map +1 -0
- package/dist/change-set-v2/create-merge-change-set.test.js +223 -0
- package/dist/change-set-v2/create-merge-change-set.test.js.map +1 -0
- package/dist/change-set-v2/index.d.ts +5 -0
- package/dist/change-set-v2/index.d.ts.map +1 -0
- package/dist/change-set-v2/index.js +5 -0
- package/dist/change-set-v2/index.js.map +1 -0
- package/dist/change-set-v2/schema.d.ts +50 -0
- package/dist/change-set-v2/schema.d.ts.map +1 -0
- package/dist/change-set-v2/schema.js +347 -0
- package/dist/change-set-v2/schema.js.map +1 -0
- package/dist/change-set-v2/schema.test.d.ts +2 -0
- package/dist/change-set-v2/schema.test.d.ts.map +1 -0
- package/dist/change-set-v2/schema.test.js +713 -0
- package/dist/change-set-v2/schema.test.js.map +1 -0
- package/dist/commit/apply-commit.d.ts +32 -0
- package/dist/commit/apply-commit.d.ts.map +1 -0
- package/dist/commit/apply-commit.js +63 -0
- package/dist/commit/apply-commit.js.map +1 -0
- package/dist/commit/apply-commit.test.d.ts +2 -0
- package/dist/commit/apply-commit.test.d.ts.map +1 -0
- package/dist/commit/apply-commit.test.js +367 -0
- package/dist/commit/apply-commit.test.js.map +1 -0
- package/dist/commit/create-checkpoint.d.ts +19 -0
- package/dist/commit/create-checkpoint.d.ts.map +1 -0
- package/dist/commit/create-checkpoint.js +118 -0
- package/dist/commit/create-checkpoint.js.map +1 -0
- package/dist/commit/create-checkpoint.test.d.ts +2 -0
- package/dist/commit/create-checkpoint.test.d.ts.map +1 -0
- package/dist/commit/create-checkpoint.test.js +472 -0
- package/dist/commit/create-checkpoint.test.js.map +1 -0
- package/dist/commit/create-commit.d.ts +38 -0
- package/dist/commit/create-commit.d.ts.map +1 -0
- package/dist/commit/create-commit.js +68 -0
- package/dist/commit/create-commit.js.map +1 -0
- package/dist/commit/create-merge-commit.d.ts +24 -0
- package/dist/commit/create-merge-commit.d.ts.map +1 -0
- package/dist/commit/create-merge-commit.js +103 -0
- package/dist/commit/create-merge-commit.js.map +1 -0
- package/dist/commit/create-merge-commit.test.d.ts +2 -0
- package/dist/commit/create-merge-commit.test.d.ts.map +1 -0
- package/dist/commit/create-merge-commit.test.js +242 -0
- package/dist/commit/create-merge-commit.test.js.map +1 -0
- package/dist/commit/create-transition-commit.d.ts +18 -0
- package/dist/commit/create-transition-commit.d.ts.map +1 -0
- package/dist/commit/create-transition-commit.js +136 -0
- package/dist/commit/create-transition-commit.js.map +1 -0
- package/dist/commit/create-transition-commit.test.d.ts +2 -0
- package/dist/commit/create-transition-commit.test.d.ts.map +1 -0
- package/dist/commit/create-transition-commit.test.js +221 -0
- package/dist/commit/create-transition-commit.test.js.map +1 -0
- package/dist/commit/create-undo-commit.d.ts +27 -0
- package/dist/commit/create-undo-commit.d.ts.map +1 -0
- package/dist/commit/create-undo-commit.js +143 -0
- package/dist/commit/create-undo-commit.js.map +1 -0
- package/dist/commit/create-undo-commit.test.d.ts +2 -0
- package/dist/commit/create-undo-commit.test.d.ts.map +1 -0
- package/dist/commit/create-undo-commit.test.js +298 -0
- package/dist/commit/create-undo-commit.test.js.map +1 -0
- package/dist/commit/index.d.ts +6 -0
- package/dist/commit/index.d.ts.map +1 -0
- package/dist/commit/index.js +6 -0
- package/dist/commit/index.js.map +1 -0
- package/dist/commit/schema.d.ts +73 -0
- package/dist/commit/schema.d.ts.map +1 -0
- package/dist/commit/schema.js +90 -0
- package/dist/commit/schema.js.map +1 -0
- package/dist/commit/schema.test.d.ts +2 -0
- package/dist/commit/schema.test.d.ts.map +1 -0
- package/dist/commit/schema.test.js +216 -0
- package/dist/commit/schema.test.js.map +1 -0
- package/dist/database/apply-schema.d.ts +3 -0
- package/dist/database/apply-schema.d.ts.map +1 -1
- package/dist/database/apply-schema.js +91 -258
- package/dist/database/apply-schema.js.map +1 -1
- package/dist/database/index.d.ts +0 -2
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +0 -2
- package/dist/database/index.js.map +1 -1
- package/dist/database/init-db.d.ts.map +1 -1
- package/dist/database/init-db.js +83 -44
- package/dist/database/init-db.js.map +1 -1
- package/dist/database/init-db.test.js +2 -480
- package/dist/database/init-db.test.js.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.d.ts +5 -1
- package/dist/database/kysely-plugin/json-column-plugin.d.ts.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.js +52 -10
- package/dist/database/kysely-plugin/json-column-plugin.js.map +1 -1
- package/dist/database/kysely-plugin/json-column-plugin.test.d.ts +2 -0
- package/dist/database/kysely-plugin/json-column-plugin.test.d.ts.map +1 -0
- package/dist/database/kysely-plugin/json-column-plugin.test.js +329 -0
- package/dist/database/kysely-plugin/json-column-plugin.test.js.map +1 -0
- package/dist/database/mutation-log/database-schema.d.ts.map +1 -1
- package/dist/database/mutation-log/database-schema.js +0 -4
- package/dist/database/mutation-log/database-schema.js.map +1 -1
- package/dist/database/nano-id.d.ts +4 -1
- package/dist/database/nano-id.d.ts.map +1 -1
- package/dist/database/nano-id.js +4 -1
- package/dist/database/nano-id.js.map +1 -1
- package/dist/database/nano-id.test.js +3 -3
- package/dist/database/nano-id.test.js.map +1 -1
- package/dist/database/schema.d.ts +21 -14
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +9 -5
- package/dist/database/schema.js.map +1 -1
- package/dist/deterministic/generate-human-id.d.ts +20 -0
- package/dist/deterministic/generate-human-id.d.ts.map +1 -0
- package/dist/deterministic/generate-human-id.js +86 -0
- package/dist/deterministic/generate-human-id.js.map +1 -0
- package/dist/deterministic/generate-human-id.test.d.ts +2 -0
- package/dist/deterministic/generate-human-id.test.d.ts.map +1 -0
- package/dist/deterministic/generate-human-id.test.js +123 -0
- package/dist/deterministic/generate-human-id.test.js.map +1 -0
- package/dist/deterministic/index.d.ts +8 -0
- package/dist/deterministic/index.d.ts.map +1 -0
- package/dist/deterministic/index.js +8 -0
- package/dist/deterministic/index.js.map +1 -0
- package/dist/deterministic/is-deterministic-mode.d.ts +14 -0
- package/dist/deterministic/is-deterministic-mode.d.ts.map +1 -0
- package/dist/deterministic/is-deterministic-mode.js +25 -0
- package/dist/deterministic/is-deterministic-mode.js.map +1 -0
- package/dist/deterministic/is-deterministic-mode.test.d.ts +2 -0
- package/dist/deterministic/is-deterministic-mode.test.d.ts.map +1 -0
- package/dist/deterministic/is-deterministic-mode.test.js +103 -0
- package/dist/deterministic/is-deterministic-mode.test.js.map +1 -0
- package/dist/deterministic/nano-id.d.ts +61 -0
- package/dist/deterministic/nano-id.d.ts.map +1 -0
- package/dist/deterministic/nano-id.js +161 -0
- package/dist/deterministic/nano-id.js.map +1 -0
- package/dist/deterministic/nano-id.test.d.ts +2 -0
- package/dist/deterministic/nano-id.test.d.ts.map +1 -0
- package/dist/deterministic/nano-id.test.js +163 -0
- package/dist/deterministic/nano-id.test.js.map +1 -0
- package/dist/deterministic/options.d.ts +53 -0
- package/dist/deterministic/options.d.ts.map +1 -0
- package/dist/deterministic/options.js +52 -0
- package/dist/deterministic/options.js.map +1 -0
- package/dist/deterministic/options.test.d.ts +2 -0
- package/dist/deterministic/options.test.d.ts.map +1 -0
- package/dist/deterministic/options.test.js +111 -0
- package/dist/deterministic/options.test.js.map +1 -0
- package/dist/deterministic/random.d.ts +68 -0
- package/dist/deterministic/random.d.ts.map +1 -0
- package/dist/deterministic/random.js +225 -0
- package/dist/deterministic/random.js.map +1 -0
- package/dist/deterministic/random.test.d.ts +2 -0
- package/dist/deterministic/random.test.d.ts.map +1 -0
- package/dist/deterministic/random.test.js +244 -0
- package/dist/deterministic/random.test.js.map +1 -0
- package/dist/deterministic/sequence.d.ts +56 -0
- package/dist/deterministic/sequence.d.ts.map +1 -0
- package/dist/deterministic/sequence.js +107 -0
- package/dist/deterministic/sequence.js.map +1 -0
- package/dist/deterministic/sequence.test.d.ts +2 -0
- package/dist/deterministic/sequence.test.d.ts.map +1 -0
- package/dist/deterministic/sequence.test.js +71 -0
- package/dist/deterministic/sequence.test.js.map +1 -0
- package/dist/deterministic/timestamp.d.ts +47 -0
- package/dist/deterministic/timestamp.d.ts.map +1 -0
- package/dist/deterministic/timestamp.js +74 -0
- package/dist/deterministic/timestamp.js.map +1 -0
- package/dist/deterministic/timestamp.test.d.ts +2 -0
- package/dist/deterministic/timestamp.test.d.ts.map +1 -0
- package/dist/deterministic/timestamp.test.js +145 -0
- package/dist/deterministic/timestamp.test.js.map +1 -0
- package/dist/deterministic/uuid-v7.d.ts +49 -0
- package/dist/deterministic/uuid-v7.d.ts.map +1 -0
- package/dist/deterministic/uuid-v7.js +75 -0
- package/dist/deterministic/uuid-v7.js.map +1 -0
- package/dist/deterministic/uuid-v7.test.d.ts +2 -0
- package/dist/deterministic/uuid-v7.test.d.ts.map +1 -0
- package/dist/deterministic/uuid-v7.test.js +114 -0
- package/dist/deterministic/uuid-v7.test.js.map +1 -0
- package/dist/discussion/create-discussion.d.ts +2 -1
- package/dist/discussion/create-discussion.d.ts.map +1 -1
- package/dist/discussion/create-discussion.js.map +1 -1
- package/dist/discussion/create-discussion.test.js +13 -2
- package/dist/discussion/create-discussion.test.js.map +1 -1
- package/dist/entity/eb-entity.d.ts +76 -0
- package/dist/entity/eb-entity.d.ts.map +1 -0
- package/dist/entity/eb-entity.js +156 -0
- package/dist/entity/eb-entity.js.map +1 -0
- package/dist/entity/eb-entity.test.d.ts +2 -0
- package/dist/entity/eb-entity.test.d.ts.map +1 -0
- package/dist/entity/eb-entity.test.js +573 -0
- package/dist/entity/eb-entity.test.js.map +1 -0
- package/dist/entity/index.d.ts +7 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +4 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/label/create-entity-label.d.ts +61 -0
- package/dist/entity/label/create-entity-label.d.ts.map +1 -0
- package/dist/entity/label/create-entity-label.js +92 -0
- package/dist/entity/label/create-entity-label.js.map +1 -0
- package/dist/entity/label/create-entity-label.test.d.ts +2 -0
- package/dist/entity/label/create-entity-label.test.d.ts.map +1 -0
- package/dist/entity/label/create-entity-label.test.js +261 -0
- package/dist/entity/label/create-entity-label.test.js.map +1 -0
- package/dist/entity/label/schema.d.ts +40 -0
- package/dist/entity/label/schema.d.ts.map +1 -0
- package/dist/entity/label/schema.js +42 -0
- package/dist/entity/label/schema.js.map +1 -0
- package/dist/entity/label/schema.test.d.ts +2 -0
- package/dist/entity/label/schema.test.d.ts.map +1 -0
- package/dist/entity/label/schema.test.js +596 -0
- package/dist/entity/label/schema.test.js.map +1 -0
- package/dist/entity/schema.d.ts +13 -0
- package/dist/entity/schema.d.ts.map +1 -0
- package/dist/entity/schema.js +5 -0
- package/dist/entity/schema.js.map +1 -0
- package/dist/entity/thread/create-entity-thread.d.ts +75 -0
- package/dist/entity/thread/create-entity-thread.d.ts.map +1 -0
- package/dist/entity/thread/create-entity-thread.js +109 -0
- package/dist/entity/thread/create-entity-thread.js.map +1 -0
- package/dist/entity/thread/create-entity-thread.test.d.ts +2 -0
- package/dist/entity/thread/create-entity-thread.test.d.ts.map +1 -0
- package/dist/entity/thread/create-entity-thread.test.js +240 -0
- package/dist/entity/thread/create-entity-thread.test.js.map +1 -0
- package/dist/entity/thread/query-threads.test.d.ts +2 -0
- package/dist/entity/thread/query-threads.test.d.ts.map +1 -0
- package/dist/entity/thread/query-threads.test.js +330 -0
- package/dist/entity/thread/query-threads.test.js.map +1 -0
- package/dist/entity/thread/schema.d.ts +40 -0
- package/dist/entity/thread/schema.d.ts.map +1 -0
- package/dist/entity/thread/schema.js +42 -0
- package/dist/entity/thread/schema.js.map +1 -0
- package/dist/entity/thread/schema.test.d.ts +2 -0
- package/dist/entity/thread/schema.test.d.ts.map +1 -0
- package/dist/entity/thread/schema.test.js +144 -0
- package/dist/entity/thread/schema.test.js.map +1 -0
- package/dist/entity-views/entity-state-all.d.ts +52 -0
- package/dist/entity-views/entity-state-all.d.ts.map +1 -1
- package/dist/entity-views/entity-state-all.js +19 -11
- package/dist/entity-views/entity-state-all.js.map +1 -1
- package/dist/entity-views/entity-state-all.test.js +173 -0
- package/dist/entity-views/entity-state-all.test.js.map +1 -1
- package/dist/entity-views/entity-state-history.d.ts +55 -15
- package/dist/entity-views/entity-state-history.d.ts.map +1 -1
- package/dist/entity-views/entity-state-history.js +7 -4
- package/dist/entity-views/entity-state-history.js.map +1 -1
- package/dist/entity-views/entity-state-history.test.js +70 -15
- package/dist/entity-views/entity-state-history.test.js.map +1 -1
- package/dist/entity-views/entity-state.d.ts +52 -0
- package/dist/entity-views/entity-state.d.ts.map +1 -1
- package/dist/entity-views/entity-state.js +18 -10
- package/dist/entity-views/entity-state.js.map +1 -1
- package/dist/entity-views/entity-state.test.js +120 -1
- package/dist/entity-views/entity-state.test.js.map +1 -1
- package/dist/entity-views/entity-view-builder.test.js +6 -6
- package/dist/entity-views/entity-view-builder.test.js.map +1 -1
- package/dist/entity-views/types.d.ts +2 -2
- package/dist/file/database-schema.d.ts +25 -0
- package/dist/file/database-schema.d.ts.map +1 -0
- package/dist/file/database-schema.js +26 -0
- package/dist/file/database-schema.js.map +1 -0
- package/dist/file/database-schema.test.d.ts +2 -0
- package/dist/file/database-schema.test.d.ts.map +1 -0
- package/dist/file/database-schema.test.js +60 -0
- package/dist/file/database-schema.test.js.map +1 -0
- package/dist/file/file-handlers.d.ts.map +1 -1
- package/dist/file/file-handlers.js +36 -0
- package/dist/file/file-handlers.js.map +1 -1
- package/dist/file/file-handlers.test.js +4 -4
- package/dist/file/file-handlers.test.js.map +1 -1
- package/dist/file/materialize-file-data-at-changeset.d.ts +1 -1
- package/dist/file/materialize-file-data-at-changeset.d.ts.map +1 -1
- package/dist/file/materialize-file-data-at-changeset.js +55 -29
- package/dist/file/materialize-file-data-at-changeset.js.map +1 -1
- package/dist/file/materialize-file-data-at-commit.d.ts +9 -0
- package/dist/file/materialize-file-data-at-commit.d.ts.map +1 -0
- package/dist/file/materialize-file-data-at-commit.js +119 -0
- package/dist/file/materialize-file-data-at-commit.js.map +1 -0
- package/dist/file/schema.d.ts +68 -5
- package/dist/file/schema.d.ts.map +1 -1
- package/dist/file/schema.js +118 -50
- package/dist/file/schema.js.map +1 -1
- package/dist/file/schema.test.js +543 -35
- package/dist/file/schema.test.js.map +1 -1
- package/dist/file-queue/database-schema.d.ts +17 -0
- package/dist/file-queue/database-schema.d.ts.map +1 -0
- package/dist/file-queue/database-schema.js +53 -0
- package/dist/file-queue/database-schema.js.map +1 -0
- package/dist/file-queue/file-handlers.d.ts +1 -1
- package/dist/file-queue/file-handlers.d.ts.map +1 -1
- package/dist/file-queue/file-handlers.js +60 -29
- package/dist/file-queue/file-handlers.js.map +1 -1
- package/dist/file-queue/file-queue-process.d.ts.map +1 -1
- package/dist/file-queue/file-queue-process.js +26 -17
- package/dist/file-queue/file-queue-process.js.map +1 -1
- package/dist/file-queue/file-queue-process.test.js +133 -43
- package/dist/file-queue/file-queue-process.test.js.map +1 -1
- package/dist/file-queue/with-skip-file-queue.d.ts +18 -0
- package/dist/file-queue/with-skip-file-queue.d.ts.map +1 -1
- package/dist/file-queue/with-skip-file-queue.js +56 -10
- package/dist/file-queue/with-skip-file-queue.js.map +1 -1
- package/dist/file-queue/with-skip-file-queue.test.js +28 -12
- package/dist/file-queue/with-skip-file-queue.test.js.map +1 -1
- package/dist/hooks/create-hooks.d.ts +4 -26
- package/dist/hooks/create-hooks.d.ts.map +1 -1
- package/dist/hooks/create-hooks.js +3 -7
- package/dist/hooks/create-hooks.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/key-value/database-schema.d.ts +3 -2
- package/dist/key-value/database-schema.d.ts.map +1 -1
- package/dist/key-value/database-schema.js +3 -3
- package/dist/key-value/database-schema.test.js +13 -4
- package/dist/key-value/database-schema.test.js.map +1 -1
- package/dist/key-value/index.d.ts +1 -1
- package/dist/key-value/index.d.ts.map +1 -1
- package/dist/key-value/index.js.map +1 -1
- package/dist/key-value/schema.d.ts +63 -3
- package/dist/key-value/schema.d.ts.map +1 -1
- package/dist/key-value/schema.js +8 -2
- package/dist/key-value/schema.js.map +1 -1
- package/dist/key-value/schema.test.js +91 -2
- package/dist/key-value/schema.test.js.map +1 -1
- package/dist/key-value-v2/schema.d.ts +27 -0
- package/dist/key-value-v2/schema.d.ts.map +1 -0
- package/dist/key-value-v2/schema.js +73 -0
- package/dist/key-value-v2/schema.js.map +1 -0
- package/dist/key-value-v2/schema.test.d.ts +2 -0
- package/dist/key-value-v2/schema.test.d.ts.map +1 -0
- package/dist/key-value-v2/schema.test.js +144 -0
- package/dist/key-value-v2/schema.test.js.map +1 -0
- package/dist/label/create-label.d.ts +5 -5
- package/dist/label/create-label.d.ts.map +1 -1
- package/dist/label/create-label.js +2 -2
- package/dist/label/create-label.js.map +1 -1
- package/dist/label/index.d.ts +1 -1
- package/dist/label/index.d.ts.map +1 -1
- package/dist/label/index.js.map +1 -1
- package/dist/label/schema.d.ts +3 -3
- package/dist/label/schema.d.ts.map +1 -1
- package/dist/label/schema.js +4 -6
- package/dist/label/schema.js.map +1 -1
- package/dist/lix/close-lix.d.ts +1 -10
- package/dist/lix/close-lix.d.ts.map +1 -1
- package/dist/lix/close-lix.js +1 -10
- package/dist/lix/close-lix.js.map +1 -1
- package/dist/lix/merge.test.js +4 -1
- package/dist/lix/merge.test.js.map +1 -1
- package/dist/lix/new-lix.d.ts +4 -2
- package/dist/lix/new-lix.d.ts.map +1 -1
- package/dist/lix/new-lix.js +244 -60
- package/dist/lix/new-lix.js.map +1 -1
- package/dist/lix/new-lix.test.js +175 -1
- package/dist/lix/new-lix.test.js.map +1 -1
- package/dist/lix/open-lix-in-memory.d.ts +1 -9
- package/dist/lix/open-lix-in-memory.d.ts.map +1 -1
- package/dist/lix/open-lix-in-memory.js +7 -15
- package/dist/lix/open-lix-in-memory.js.map +1 -1
- package/dist/lix/open-lix-in-memory.test.js +2 -1
- package/dist/lix/open-lix-in-memory.test.js.map +1 -1
- package/dist/lix/open-lix.d.ts +12 -13
- package/dist/lix/open-lix.d.ts.map +1 -1
- package/dist/lix/open-lix.js +147 -55
- package/dist/lix/open-lix.js.map +1 -1
- package/dist/lix/open-lix.test.js +242 -3
- package/dist/lix/open-lix.test.js.map +1 -1
- package/dist/lix/storage/in-memory.d.ts +7 -6
- package/dist/lix/storage/in-memory.d.ts.map +1 -1
- package/dist/lix/storage/in-memory.js +10 -17
- package/dist/lix/storage/in-memory.js.map +1 -1
- package/dist/lix/storage/in-memory.test.js +7 -68
- package/dist/lix/storage/in-memory.test.js.map +1 -1
- package/dist/lix/storage/lix-storage-adapter.d.ts +35 -5
- package/dist/lix/storage/lix-storage-adapter.d.ts.map +1 -1
- package/dist/lix/storage/opfs.d.ts +39 -10
- package/dist/lix/storage/opfs.d.ts.map +1 -1
- package/dist/lix/storage/opfs.js +148 -37
- package/dist/lix/storage/opfs.js.map +1 -1
- package/dist/lix/storage/opfs.test.js +203 -24
- package/dist/lix/storage/opfs.test.js.map +1 -1
- package/dist/lix/to-blob.d.ts +2 -9
- package/dist/lix/to-blob.d.ts.map +1 -1
- package/dist/lix/to-blob.js +2 -9
- package/dist/lix/to-blob.js.map +1 -1
- package/dist/log/create-lix-own-log.d.ts +9 -1
- package/dist/log/create-lix-own-log.d.ts.map +1 -1
- package/dist/log/create-lix-own-log.js +14 -25
- package/dist/log/create-lix-own-log.js.map +1 -1
- package/dist/log/create-lix-own-log.test.js +9 -5
- package/dist/log/create-lix-own-log.test.js.map +1 -1
- package/dist/log/create-log.d.ts +2 -2
- package/dist/log/create-log.d.ts.map +1 -1
- package/dist/log/create-log.js +2 -2
- package/dist/log/create-log.js.map +1 -1
- package/dist/log/database-schema.d.ts +33 -0
- package/dist/log/database-schema.d.ts.map +1 -0
- package/dist/log/database-schema.js +14 -0
- package/dist/log/database-schema.js.map +1 -0
- package/dist/log/database-schema.test.d.ts +2 -0
- package/dist/log/database-schema.test.d.ts.map +1 -0
- package/dist/log/database-schema.test.js +22 -0
- package/dist/log/database-schema.test.js.map +1 -0
- package/dist/log/index.d.ts +1 -1
- package/dist/log/index.d.ts.map +1 -1
- package/dist/log/index.js.map +1 -1
- package/dist/log/schema.d.ts +3 -3
- package/dist/log/schema.d.ts.map +1 -1
- package/dist/log/schema.js +4 -5
- package/dist/log/schema.js.map +1 -1
- package/dist/observe/create-observe.d.ts.map +1 -1
- package/dist/observe/create-observe.js +32 -3
- package/dist/observe/create-observe.js.map +1 -1
- package/dist/observe/create-observe.test.js +298 -44
- package/dist/observe/create-observe.test.js.map +1 -1
- package/dist/observe/determine-schema-keys.d.ts +6 -0
- package/dist/observe/determine-schema-keys.d.ts.map +1 -0
- package/dist/observe/determine-schema-keys.js +145 -0
- package/dist/observe/determine-schema-keys.js.map +1 -0
- package/dist/observe/determine-schema-keys.test.d.ts +2 -0
- package/dist/observe/determine-schema-keys.test.d.ts.map +1 -0
- package/dist/observe/determine-schema-keys.test.js +266 -0
- package/dist/observe/determine-schema-keys.test.js.map +1 -0
- package/dist/own-change-control/apply-own-change.d.ts +5 -1
- package/dist/own-change-control/apply-own-change.d.ts.map +1 -1
- package/dist/own-change-control/apply-own-change.js +26 -12
- package/dist/own-change-control/apply-own-change.js.map +1 -1
- package/dist/own-change-control/apply-own-change.test.js +86 -48
- package/dist/own-change-control/apply-own-change.test.js.map +1 -1
- package/dist/own-change-control/change-controlled-tables.d.ts +5 -7
- package/dist/own-change-control/change-controlled-tables.d.ts.map +1 -1
- package/dist/own-change-control/change-controlled-tables.js +27 -21
- package/dist/own-change-control/change-controlled-tables.js.map +1 -1
- package/dist/own-change-control/change-controlled-tables.test.js +35 -5
- package/dist/own-change-control/change-controlled-tables.test.js.map +1 -1
- package/dist/own-change-control/database-triggers.d.ts +2 -1
- package/dist/own-change-control/database-triggers.d.ts.map +1 -1
- package/dist/own-change-control/database-triggers.js +209 -67
- package/dist/own-change-control/database-triggers.js.map +1 -1
- package/dist/own-change-control/database-triggers.test.js +139 -8
- package/dist/own-change-control/database-triggers.test.js.map +1 -1
- package/dist/own-change-control/with-skip-own-change-control.d.ts.map +1 -1
- package/dist/own-change-control/with-skip-own-change-control.js +28 -6
- package/dist/own-change-control/with-skip-own-change-control.js.map +1 -1
- package/dist/own-change-control/with-skip-own-change-control.test.js +38 -1
- package/dist/own-change-control/with-skip-own-change-control.test.js.map +1 -1
- package/dist/plugin/lix-plugin.d.ts +3 -3
- package/dist/plugin/lix-plugin.d.ts.map +1 -1
- package/dist/plugin/load-plugin.d.ts.map +1 -1
- package/dist/plugin/load-plugin.js.map +1 -1
- package/dist/prototype/database-schema.d.ts +43 -0
- package/dist/prototype/database-schema.d.ts.map +1 -0
- package/dist/prototype/database-schema.js +72 -0
- package/dist/prototype/database-schema.js.map +1 -0
- package/dist/prototype/file-handlers.d.ts +24 -0
- package/dist/prototype/file-handlers.d.ts.map +1 -0
- package/dist/prototype/file-handlers.js +129 -0
- package/dist/prototype/file-handlers.js.map +1 -0
- package/dist/prototype/file-schema.d.ts +47 -0
- package/dist/prototype/file-schema.d.ts.map +1 -0
- package/dist/prototype/file-schema.js +135 -0
- package/dist/prototype/file-schema.js.map +1 -0
- package/dist/prototype/file-schema.test.d.ts +2 -0
- package/dist/prototype/file-schema.test.d.ts.map +1 -0
- package/dist/prototype/file-schema.test.js +146 -0
- package/dist/prototype/file-schema.test.js.map +1 -0
- package/dist/prototype/get-and-materialize-row.d.ts +5 -0
- package/dist/prototype/get-and-materialize-row.d.ts.map +1 -0
- package/dist/prototype/get-and-materialize-row.js +99 -0
- package/dist/prototype/get-and-materialize-row.js.map +1 -0
- package/dist/prototype/json-plugin.d.ts +49 -0
- package/dist/prototype/json-plugin.d.ts.map +1 -0
- package/dist/prototype/json-plugin.js +104 -0
- package/dist/prototype/json-plugin.js.map +1 -0
- package/dist/prototype/validate-file-path.d.ts +16 -0
- package/dist/prototype/validate-file-path.d.ts.map +1 -0
- package/dist/prototype/validate-file-path.js +44 -0
- package/dist/prototype/validate-file-path.js.map +1 -0
- package/dist/prototype/validate-file-path.test.d.ts +2 -0
- package/dist/prototype/validate-file-path.test.d.ts.map +1 -0
- package/dist/prototype/validate-file-path.test.js +36 -0
- package/dist/prototype/validate-file-path.test.js.map +1 -0
- package/dist/prototype/version-schema.d.ts +34 -0
- package/dist/prototype/version-schema.d.ts.map +1 -0
- package/dist/prototype/version-schema.js +86 -0
- package/dist/prototype/version-schema.js.map +1 -0
- package/dist/prototype/version-schema.test.d.ts +2 -0
- package/dist/prototype/version-schema.test.d.ts.map +1 -0
- package/dist/prototype/version-schema.test.js +114 -0
- package/dist/prototype/version-schema.test.js.map +1 -0
- package/dist/query-filter/change-conflict-in-version.d.ts +2 -0
- package/dist/query-filter/change-conflict-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-conflict-in-version.js +2 -0
- package/dist/query-filter/change-conflict-in-version.js.map +1 -1
- package/dist/query-filter/change-in-version.d.ts +2 -0
- package/dist/query-filter/change-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-in-version.js +2 -0
- package/dist/query-filter/change-in-version.js.map +1 -1
- package/dist/query-filter/change-is-leaf-in-version.d.ts +1 -0
- package/dist/query-filter/change-is-leaf-in-version.d.ts.map +1 -1
- package/dist/query-filter/change-is-leaf-in-version.js +1 -0
- package/dist/query-filter/change-is-leaf-in-version.js.map +1 -1
- package/dist/query-filter/change-is-leaf-of.d.ts +2 -0
- package/dist/query-filter/change-is-leaf-of.d.ts.map +1 -1
- package/dist/query-filter/change-is-leaf-of.js +2 -0
- package/dist/query-filter/change-is-leaf-of.js.map +1 -1
- package/dist/query-filter/change-is-leaf-v2.d.ts +69 -0
- package/dist/query-filter/change-is-leaf-v2.d.ts.map +1 -0
- package/dist/query-filter/change-is-leaf-v2.js +116 -0
- package/dist/query-filter/change-is-leaf-v2.js.map +1 -0
- package/dist/query-filter/change-is-leaf-v2.test.d.ts +2 -0
- package/dist/query-filter/change-is-leaf-v2.test.d.ts.map +1 -0
- package/dist/query-filter/change-is-leaf-v2.test.js +237 -0
- package/dist/query-filter/change-is-leaf-v2.test.js.map +1 -0
- package/dist/query-filter/change-is-leaf.d.ts +2 -0
- package/dist/query-filter/change-is-leaf.d.ts.map +1 -1
- package/dist/query-filter/change-is-leaf.js +2 -0
- package/dist/query-filter/change-is-leaf.js.map +1 -1
- package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts +2 -0
- package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts.map +1 -1
- package/dist/query-filter/change-is-lowest-common-ancestor-of.js +4 -0
- package/dist/query-filter/change-is-lowest-common-ancestor-of.js.map +1 -1
- package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js +5 -3
- package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.d.ts +10 -10
- package/dist/query-filter/change-set-element-in-ancestry-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.js +22 -17
- package/dist/query-filter/change-set-element-in-ancestry-of.js.map +1 -1
- package/dist/query-filter/change-set-element-in-ancestry-of.test.js +99 -26
- package/dist/query-filter/change-set-element-in-ancestry-of.test.js.map +1 -1
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts +21 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.js +37 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.js.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts +2 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js +276 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js.map +1 -0
- package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts +2 -2
- package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-in-symmetric-difference.js.map +1 -1
- package/dist/query-filter/change-set-element-in-symmetric-difference.test.js.map +1 -1
- package/dist/query-filter/change-set-element-is-leaf-of.d.ts +11 -11
- package/dist/query-filter/change-set-element-is-leaf-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-element-is-leaf-of.js +58 -36
- package/dist/query-filter/change-set-element-is-leaf-of.js.map +1 -1
- package/dist/query-filter/change-set-element-is-leaf-of.test.js +83 -24
- package/dist/query-filter/change-set-element-is-leaf-of.test.js.map +1 -1
- package/dist/query-filter/change-set-is-ancestor-of.d.ts +2 -2
- package/dist/query-filter/change-set-is-ancestor-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-is-ancestor-of.js.map +1 -1
- package/dist/query-filter/change-set-is-descendant-of.d.ts +2 -2
- package/dist/query-filter/change-set-is-descendant-of.d.ts.map +1 -1
- package/dist/query-filter/change-set-is-descendant-of.js.map +1 -1
- package/dist/query-filter/commit-is-ancestor-of.d.ts +51 -0
- package/dist/query-filter/commit-is-ancestor-of.d.ts.map +1 -0
- package/dist/query-filter/commit-is-ancestor-of.js +63 -0
- package/dist/query-filter/commit-is-ancestor-of.js.map +1 -0
- package/dist/query-filter/commit-is-ancestor-of.test.d.ts +2 -0
- package/dist/query-filter/commit-is-ancestor-of.test.d.ts.map +1 -0
- package/dist/query-filter/commit-is-ancestor-of.test.js +292 -0
- package/dist/query-filter/commit-is-ancestor-of.test.js.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.d.ts +44 -0
- package/dist/query-filter/commit-is-descendant-of.d.ts.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.js +56 -0
- package/dist/query-filter/commit-is-descendant-of.js.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.test.d.ts +2 -0
- package/dist/query-filter/commit-is-descendant-of.test.d.ts.map +1 -0
- package/dist/query-filter/commit-is-descendant-of.test.js +325 -0
- package/dist/query-filter/commit-is-descendant-of.test.js.map +1 -0
- package/dist/query-filter/index.d.ts +2 -4
- package/dist/query-filter/index.d.ts.map +1 -1
- package/dist/query-filter/index.js +2 -4
- package/dist/query-filter/index.js.map +1 -1
- package/dist/query-filter/version-change-in-difference.d.ts +2 -0
- package/dist/query-filter/version-change-in-difference.d.ts.map +1 -1
- package/dist/query-filter/version-change-in-difference.js +2 -0
- package/dist/query-filter/version-change-in-difference.js.map +1 -1
- package/dist/query-filter/version-change-in-symmetric-difference.d.ts +2 -0
- package/dist/query-filter/version-change-in-symmetric-difference.d.ts.map +1 -1
- package/dist/query-filter/version-change-in-symmetric-difference.js +2 -0
- package/dist/query-filter/version-change-in-symmetric-difference.js.map +1 -1
- package/dist/schema-definition/definition.d.ts +73 -30
- package/dist/schema-definition/definition.d.ts.map +1 -1
- package/dist/schema-definition/definition.js +38 -14
- package/dist/schema-definition/definition.js.map +1 -1
- package/dist/schema-definition/definition.test.js +70 -25
- package/dist/schema-definition/definition.test.js.map +1 -1
- package/dist/schema-definition/validate-lix-schema.d.ts.map +1 -1
- package/dist/schema-definition/validate-lix-schema.js.map +1 -1
- package/dist/schema-definition/validate-lix-schema.test.js +1 -1
- package/dist/schema-definition/validate-lix-schema.test.js.map +1 -1
- package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js +2 -2
- package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js.map +1 -1
- package/dist/server-protocol-handler/routes/push-v1.test.js +1 -1
- package/dist/server-protocol-handler/routes/push-v1.test.js.map +1 -1
- package/dist/services/env-variables/index.js +1 -1
- package/dist/services/env-variables/index.js.map +1 -1
- package/dist/snapshot/create-snapshot.d.ts +2 -2
- package/dist/snapshot/create-snapshot.d.ts.map +1 -1
- package/dist/snapshot/create-snapshot.test.js +3 -3
- package/dist/snapshot/create-snapshot.test.js.map +1 -1
- package/dist/snapshot/database-schema.d.ts +19 -0
- package/dist/snapshot/database-schema.d.ts.map +1 -0
- package/dist/snapshot/database-schema.js +33 -0
- package/dist/snapshot/database-schema.js.map +1 -0
- package/dist/snapshot/database-schema.test.d.ts +2 -0
- package/dist/snapshot/database-schema.test.d.ts.map +1 -0
- package/dist/snapshot/database-schema.test.js +58 -0
- package/dist/snapshot/database-schema.test.js.map +1 -0
- package/dist/snapshot/schema.d.ts.map +1 -1
- package/dist/snapshot/schema.js +10 -2
- package/dist/snapshot/schema.js.map +1 -1
- package/dist/snapshot/schema.test.js +86 -0
- package/dist/snapshot/schema.test.js.map +1 -1
- package/dist/state/cache/clear-state-cache.d.ts +8 -0
- package/dist/state/cache/clear-state-cache.d.ts.map +1 -0
- package/dist/state/cache/clear-state-cache.js +14 -0
- package/dist/state/cache/clear-state-cache.js.map +1 -0
- package/dist/state/cache/clear-state-cache.test.d.ts +2 -0
- package/dist/state/cache/clear-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/clear-state-cache.test.js +34 -0
- package/dist/state/cache/clear-state-cache.test.js.map +1 -0
- package/dist/state/cache/is-stale-state-cache.d.ts +5 -0
- package/dist/state/cache/is-stale-state-cache.d.ts.map +1 -0
- package/dist/state/cache/is-stale-state-cache.js +22 -0
- package/dist/state/cache/is-stale-state-cache.js.map +1 -0
- package/dist/state/cache/is-stale-state-cache.test.d.ts +2 -0
- package/dist/state/cache/is-stale-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/is-stale-state-cache.test.js +27 -0
- package/dist/state/cache/is-stale-state-cache.test.js.map +1 -0
- package/dist/state/cache/mark-state-cache-as-stale.d.ts +10 -0
- package/dist/state/cache/mark-state-cache-as-stale.d.ts.map +1 -0
- package/dist/state/cache/mark-state-cache-as-stale.js +42 -0
- package/dist/state/cache/mark-state-cache-as-stale.js.map +1 -0
- package/dist/state/cache/populate-state-cache.d.ts +9 -0
- package/dist/state/cache/populate-state-cache.d.ts.map +1 -0
- package/dist/state/cache/populate-state-cache.js +106 -0
- package/dist/state/cache/populate-state-cache.js.map +1 -0
- package/dist/state/cache/populate-state-cache.test.d.ts +2 -0
- package/dist/state/cache/populate-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/populate-state-cache.test.js +204 -0
- package/dist/state/cache/populate-state-cache.test.js.map +1 -0
- package/dist/state/cache/schema.d.ts +20 -0
- package/dist/state/cache/schema.d.ts.map +1 -0
- package/dist/state/cache/schema.js +21 -0
- package/dist/state/cache/schema.js.map +1 -0
- package/dist/state/cache/update-state-cache.d.ts +21 -0
- package/dist/state/cache/update-state-cache.d.ts.map +1 -0
- package/dist/state/cache/update-state-cache.js +294 -0
- package/dist/state/cache/update-state-cache.js.map +1 -0
- package/dist/state/cache/update-state-cache.test.d.ts +2 -0
- package/dist/state/cache/update-state-cache.test.d.ts.map +1 -0
- package/dist/state/cache/update-state-cache.test.js +440 -0
- package/dist/state/cache/update-state-cache.test.js.map +1 -0
- package/dist/state/commit.d.ts +18 -0
- package/dist/state/commit.d.ts.map +1 -0
- package/dist/state/commit.js +457 -0
- package/dist/state/commit.js.map +1 -0
- package/dist/state/commit.test.d.ts +2 -0
- package/dist/state/commit.test.d.ts.map +1 -0
- package/dist/state/commit.test.js +1173 -0
- package/dist/state/commit.test.js.map +1 -0
- package/dist/state/get-version-record-by-id-or-throw.d.ts +2 -2
- package/dist/state/get-version-record-by-id-or-throw.d.ts.map +1 -1
- package/dist/state/get-version-record-by-id-or-throw.js.map +1 -1
- package/dist/state/handle-state-mutation.d.ts +0 -12
- package/dist/state/handle-state-mutation.d.ts.map +1 -1
- package/dist/state/handle-state-mutation.js +11 -206
- package/dist/state/handle-state-mutation.js.map +1 -1
- package/dist/state/handle-state-mutation.test.js +213 -159
- package/dist/state/handle-state-mutation.test.js.map +1 -1
- package/dist/state/insert-transaction-state.d.ts +71 -0
- package/dist/state/insert-transaction-state.d.ts.map +1 -0
- package/dist/state/insert-transaction-state.js +272 -0
- package/dist/state/insert-transaction-state.js.map +1 -0
- package/dist/state/insert-transaction-state.test.d.ts +2 -0
- package/dist/state/insert-transaction-state.test.d.ts.map +1 -0
- package/dist/state/insert-transaction-state.test.js +789 -0
- package/dist/state/insert-transaction-state.test.js.map +1 -0
- package/dist/state/materialize-state.d.ts +3 -0
- package/dist/state/materialize-state.d.ts.map +1 -0
- package/dist/state/materialize-state.js +230 -0
- package/dist/state/materialize-state.js.map +1 -0
- package/dist/state/materialize-state.test.d.ts +2 -0
- package/dist/state/materialize-state.test.d.ts.map +1 -0
- package/dist/state/materialize-state.test.js +1934 -0
- package/dist/state/materialize-state.test.js.map +1 -0
- package/dist/state/primary-key.d.ts +39 -0
- package/dist/state/primary-key.d.ts.map +1 -0
- package/dist/state/primary-key.js +62 -0
- package/dist/state/primary-key.js.map +1 -0
- package/dist/state/primary-key.test.d.ts +2 -0
- package/dist/state/primary-key.test.d.ts.map +1 -0
- package/dist/state/primary-key.test.js +114 -0
- package/dist/state/primary-key.test.js.map +1 -0
- package/dist/state/resolved-state-view.d.ts +33 -0
- package/dist/state/resolved-state-view.d.ts.map +1 -0
- package/dist/state/resolved-state-view.js +182 -0
- package/dist/state/resolved-state-view.js.map +1 -0
- package/dist/state/resolved-state-view.test.d.ts +2 -0
- package/dist/state/resolved-state-view.test.d.ts.map +1 -0
- package/dist/state/resolved-state-view.test.js +433 -0
- package/dist/state/resolved-state-view.test.js.map +1 -0
- package/dist/state/schema.d.ts +6 -19
- package/dist/state/schema.d.ts.map +1 -1
- package/dist/state/schema.js +533 -796
- package/dist/state/schema.js.map +1 -1
- package/dist/state/schema.test.js +1684 -1013
- package/dist/state/schema.test.js.map +1 -1
- package/dist/state/untracked/schema.d.ts +25 -0
- package/dist/state/untracked/schema.d.ts.map +1 -0
- package/dist/state/untracked/schema.js +38 -0
- package/dist/state/untracked/schema.js.map +1 -0
- package/dist/state/untracked/schema.test.d.ts +2 -0
- package/dist/state/untracked/schema.test.d.ts.map +1 -0
- package/dist/state/untracked/schema.test.js +275 -0
- package/dist/state/untracked/schema.test.js.map +1 -0
- package/dist/state/untracked/update-untracked-state.d.ts +36 -0
- package/dist/state/untracked/update-untracked-state.d.ts.map +1 -0
- package/dist/state/untracked/update-untracked-state.js +113 -0
- package/dist/state/untracked/update-untracked-state.js.map +1 -0
- package/dist/state/untracked/update-untracked-state.test.d.ts +2 -0
- package/dist/state/untracked/update-untracked-state.test.d.ts.map +1 -0
- package/dist/state/untracked/update-untracked-state.test.js +417 -0
- package/dist/state/untracked/update-untracked-state.test.js.map +1 -0
- package/dist/state/validate-snapshot-content.d.ts +9 -0
- package/dist/state/validate-snapshot-content.d.ts.map +1 -0
- package/dist/state/validate-snapshot-content.js +42 -0
- package/dist/state/validate-snapshot-content.js.map +1 -0
- package/dist/state/validate-snapshot-content.test.d.ts +2 -0
- package/dist/state/validate-snapshot-content.test.d.ts.map +1 -0
- package/dist/state/validate-snapshot-content.test.js +67 -0
- package/dist/state/validate-snapshot-content.test.js.map +1 -0
- package/dist/state/validate-state-mutation.d.ts +2 -2
- package/dist/state/validate-state-mutation.d.ts.map +1 -1
- package/dist/state/validate-state-mutation.js +211 -51
- package/dist/state/validate-state-mutation.js.map +1 -1
- package/dist/state/validate-state-mutation.test.js +910 -75
- package/dist/state/validate-state-mutation.test.js.map +1 -1
- package/dist/state-history/schema.d.ts +29 -19
- package/dist/state-history/schema.d.ts.map +1 -1
- package/dist/state-history/schema.js +49 -37
- package/dist/state-history/schema.js.map +1 -1
- package/dist/state-history/schema.test.js +221 -67
- package/dist/state-history/schema.test.js.map +1 -1
- package/dist/stored-schema/index.d.ts +1 -1
- package/dist/stored-schema/index.d.ts.map +1 -1
- package/dist/stored-schema/index.js +1 -1
- package/dist/stored-schema/index.js.map +1 -1
- package/dist/stored-schema/schema.d.ts +1 -1
- package/dist/stored-schema/schema.d.ts.map +1 -1
- package/dist/stored-schema/schema.test.js.map +1 -1
- package/dist/sync/push-to-server.test.js.map +1 -1
- package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts +8 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.js +79 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.js.map +1 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts +2 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js +127 -0
- package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js.map +1 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts +2 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js +2 -0
- package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts +10 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js +52 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts +2 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js +71 -0
- package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.d.ts +82 -0
- package/dist/test-utilities/simulation-test/simulation-test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.js +85 -0
- package/dist/test-utilities/simulation-test/simulation-test.js.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.d.ts +2 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.d.ts.map +1 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.js +310 -0
- package/dist/test-utilities/simulation-test/simulation-test.test.js.map +1 -0
- package/dist/thread/comment-utils.d.ts +2 -0
- package/dist/thread/comment-utils.d.ts.map +1 -0
- package/dist/thread/comment-utils.js +2 -0
- package/dist/thread/comment-utils.js.map +1 -0
- package/dist/thread/comment.d.ts +24 -0
- package/dist/thread/comment.d.ts.map +1 -0
- package/dist/thread/comment.js +43 -0
- package/dist/thread/comment.js.map +1 -0
- package/dist/thread/create-thread-comment.d.ts +2 -2
- package/dist/thread/create-thread-comment.d.ts.map +1 -1
- package/dist/thread/create-thread-comment.js +20 -3
- package/dist/thread/create-thread-comment.js.map +1 -1
- package/dist/thread/create-thread-comment.test.js +49 -3
- package/dist/thread/create-thread-comment.test.js.map +1 -1
- package/dist/thread/create-thread.d.ts +18 -4
- package/dist/thread/create-thread.d.ts.map +1 -1
- package/dist/thread/create-thread.js +24 -3
- package/dist/thread/create-thread.js.map +1 -1
- package/dist/thread/create-thread.test.js +149 -0
- package/dist/thread/create-thread.test.js.map +1 -1
- package/dist/thread/database-schema.d.ts +20 -0
- package/dist/thread/database-schema.d.ts.map +1 -0
- package/dist/thread/database-schema.js +57 -0
- package/dist/thread/database-schema.js.map +1 -0
- package/dist/thread/database-schema.test.d.ts +2 -0
- package/dist/thread/database-schema.test.d.ts.map +1 -0
- package/dist/thread/database-schema.test.js +59 -0
- package/dist/thread/database-schema.test.js.map +1 -0
- package/dist/thread/index.d.ts +2 -1
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/schema.d.ts +13 -10
- package/dist/thread/schema.d.ts.map +1 -1
- package/dist/thread/schema.js +20 -14
- package/dist/thread/schema.js.map +1 -1
- package/dist/thread/schema.test.js +65 -0
- package/dist/thread/schema.test.js.map +1 -1
- package/dist/version/create-version.d.ts +14 -9
- package/dist/version/create-version.d.ts.map +1 -1
- package/dist/version/create-version.js +40 -12
- package/dist/version/create-version.js.map +1 -1
- package/dist/version/create-version.test.js +80 -25
- package/dist/version/create-version.test.js.map +1 -1
- package/dist/version/database-schema.d.ts +21 -0
- package/dist/version/database-schema.d.ts.map +1 -0
- package/dist/version/database-schema.js +169 -0
- package/dist/version/database-schema.js.map +1 -0
- package/dist/version/database-schema.test.d.ts +2 -0
- package/dist/version/database-schema.test.d.ts.map +1 -0
- package/dist/version/database-schema.test.js +625 -0
- package/dist/version/database-schema.test.js.map +1 -0
- package/dist/version/index.d.ts +1 -1
- package/dist/version/index.d.ts.map +1 -1
- package/dist/version/merge-version.d.ts +3 -0
- package/dist/version/merge-version.d.ts.map +1 -1
- package/dist/version/merge-version.js +3 -0
- package/dist/version/merge-version.js.map +1 -1
- package/dist/version/merge-version.test.js +10 -5
- package/dist/version/merge-version.test.js.map +1 -1
- package/dist/version/schema.d.ts +28 -23
- package/dist/version/schema.d.ts.map +1 -1
- package/dist/version/schema.js +42 -30
- package/dist/version/schema.js.map +1 -1
- package/dist/version/schema.test.js +311 -88
- package/dist/version/schema.test.js.map +1 -1
- package/dist/version/select-active-version.d.ts +7 -0
- package/dist/version/select-active-version.d.ts.map +1 -0
- package/dist/version/select-active-version.js +7 -0
- package/dist/version/select-active-version.js.map +1 -0
- package/dist/version/switch-version.d.ts +3 -3
- package/dist/version/switch-version.d.ts.map +1 -1
- package/dist/version/switch-version.js +1 -1
- package/dist/version/switch-version.test.js +1 -1
- package/dist/version/switch-version.test.js.map +1 -1
- package/dist/version/update-changes-in-version.d.ts +2 -0
- package/dist/version/update-changes-in-version.d.ts.map +1 -1
- package/dist/version/update-changes-in-version.js +2 -0
- package/dist/version/update-changes-in-version.js.map +1 -1
- package/dist/version-v2/create-version.d.ts +18 -0
- package/dist/version-v2/create-version.d.ts.map +1 -0
- package/dist/version-v2/create-version.js +35 -0
- package/dist/version-v2/create-version.js.map +1 -0
- package/dist/version-v2/create-version.test.d.ts +2 -0
- package/dist/version-v2/create-version.test.d.ts.map +1 -0
- package/dist/version-v2/create-version.test.js +88 -0
- package/dist/version-v2/create-version.test.js.map +1 -0
- package/dist/version-v2/database-schema.d.ts +21 -0
- package/dist/version-v2/database-schema.d.ts.map +1 -0
- package/dist/version-v2/database-schema.js +169 -0
- package/dist/version-v2/database-schema.js.map +1 -0
- package/dist/version-v2/database-schema.test.d.ts +2 -0
- package/dist/version-v2/database-schema.test.d.ts.map +1 -0
- package/dist/version-v2/database-schema.test.js +625 -0
- package/dist/version-v2/database-schema.test.js.map +1 -0
- package/dist/version-v2/index.d.ts +2 -0
- package/dist/version-v2/index.d.ts.map +1 -0
- package/dist/version-v2/index.js +2 -0
- package/dist/version-v2/index.js.map +1 -0
- package/dist/version-v2/swich-version.d.ts +27 -0
- package/dist/version-v2/swich-version.d.ts.map +1 -0
- package/dist/version-v2/swich-version.js +46 -0
- package/dist/version-v2/swich-version.js.map +1 -0
- package/dist/version-v2/switch-version.d.ts +27 -0
- package/dist/version-v2/switch-version.d.ts.map +1 -0
- package/dist/version-v2/switch-version.js +91 -0
- package/dist/version-v2/switch-version.js.map +1 -0
- package/dist/version-v2/switch-version.test.d.ts +2 -0
- package/dist/version-v2/switch-version.test.d.ts.map +1 -0
- package/dist/version-v2/switch-version.test.js +110 -0
- package/dist/version-v2/switch-version.test.js.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.d.ts +3 -0
- package/dist/version-v2/with-skip-update-working-change-set.d.ts.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.js +50 -0
- package/dist/version-v2/with-skip-update-working-change-set.js.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.d.ts +2 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.d.ts.map +1 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.js +49 -0
- package/dist/version-v2/with-skip-update-working-change-set.test.js.map +1 -0
- package/package.json +3 -3
- package/src/account/create-account.ts +7 -7
- package/src/account/index.ts +2 -2
- package/src/account/schema.test.ts +99 -99
- package/src/account/schema.ts +91 -35
- package/src/account/switch-account.test.ts +4 -4
- package/src/account/switch-account.ts +6 -6
- package/src/change/index.ts +4 -1
- package/src/change/schema.test.ts +38 -0
- package/src/change/schema.ts +91 -11
- package/src/change-author/index.ts +4 -1
- package/src/change-author/schema.test.ts +306 -242
- package/src/change-author/schema.ts +18 -12
- package/src/change-proposal/create-change-proposal.ts +3 -3
- package/src/change-proposal/database-schema.ts +1 -1
- package/src/change-set/apply-change-set.test.ts +10 -7
- package/src/change-set/apply-change-set.ts +44 -56
- package/src/change-set/create-change-set.test.ts +0 -39
- package/src/change-set/create-change-set.ts +9 -33
- package/src/change-set/index.ts +3 -11
- package/src/change-set/schema.test.ts +0 -310
- package/src/change-set/schema.ts +43 -100
- package/src/commit/apply-commit.test.ts +426 -0
- package/src/commit/apply-commit.ts +74 -0
- package/src/{change-set → commit}/create-checkpoint.test.ts +244 -26
- package/src/commit/create-checkpoint.ts +140 -0
- package/src/commit/create-commit.ts +80 -0
- package/src/{change-set/create-merge-change-set.test.ts → commit/create-merge-commit.test.ts} +50 -19
- package/src/{change-set/create-merge-change-set.ts → commit/create-merge-commit.ts} +55 -16
- package/src/{change-set/create-transition-change-set.test.ts → commit/create-transition-commit.test.ts} +43 -32
- package/src/{change-set/create-transition-change-set.ts → commit/create-transition-commit.ts} +60 -22
- package/src/{change-set/create-undo-change-set.test.ts → commit/create-undo-commit.test.ts} +52 -23
- package/src/{change-set/create-undo-change-set.ts → commit/create-undo-commit.ts} +59 -26
- package/src/commit/index.ts +11 -0
- package/src/commit/schema.test.ts +257 -0
- package/src/commit/schema.ts +104 -0
- package/src/database/index.ts +0 -2
- package/src/database/init-db.ts +113 -45
- package/src/database/kysely-plugin/json-column-plugin.test.ts +404 -0
- package/src/database/kysely-plugin/json-column-plugin.ts +80 -15
- package/src/database/nano-id.test.ts +3 -3
- package/src/database/nano-id.ts +4 -1
- package/src/database/schema.ts +26 -24
- package/src/deterministic/generate-human-id.test.ts +154 -0
- package/src/deterministic/generate-human-id.ts +94 -0
- package/src/deterministic/index.ts +7 -0
- package/src/deterministic/is-deterministic-mode.test.ts +133 -0
- package/src/deterministic/is-deterministic-mode.ts +32 -0
- package/src/deterministic/nano-id.test.ts +200 -0
- package/src/deterministic/nano-id.ts +188 -0
- package/src/deterministic/options.test.ts +157 -0
- package/src/deterministic/options.ts +62 -0
- package/src/deterministic/random.test.ts +293 -0
- package/src/deterministic/random.ts +261 -0
- package/src/deterministic/sequence.test.ts +93 -0
- package/src/deterministic/sequence.ts +132 -0
- package/src/deterministic/timestamp.test.ts +170 -0
- package/src/deterministic/timestamp.ts +83 -0
- package/src/deterministic/uuid-v7.test.ts +144 -0
- package/src/deterministic/uuid-v7.ts +82 -0
- package/src/entity/eb-entity.test.ts +687 -0
- package/src/entity/eb-entity.ts +203 -0
- package/src/entity/index.ts +12 -0
- package/src/entity/label/create-entity-label.test.ts +316 -0
- package/src/entity/label/create-entity-label.ts +113 -0
- package/src/entity/label/schema.test.ts +692 -0
- package/src/entity/label/schema.ts +55 -0
- package/src/entity/schema.ts +22 -0
- package/src/entity/thread/create-entity-thread.test.ts +282 -0
- package/src/entity/thread/create-entity-thread.ts +134 -0
- package/src/entity/thread/query-threads.test.ts +394 -0
- package/src/entity/thread/schema.test.ts +170 -0
- package/src/entity/thread/schema.ts +55 -0
- package/src/entity-views/README.md +214 -0
- package/src/entity-views/entity-state-all.test.ts +202 -0
- package/src/entity-views/entity-state-all.ts +80 -11
- package/src/entity-views/entity-state-history.test.ts +78 -16
- package/src/entity-views/entity-state-history.ts +68 -19
- package/src/entity-views/entity-state.test.ts +141 -1
- package/src/entity-views/entity-state.ts +79 -10
- package/src/entity-views/entity-view-builder.test.ts +6 -6
- package/src/entity-views/types.ts +2 -2
- package/src/file/file-handlers.test.ts +4 -4
- package/src/file/file-handlers.ts +40 -0
- package/src/file/materialize-file-data-at-commit.ts +157 -0
- package/src/file/schema.test.ts +693 -37
- package/src/file/schema.ts +183 -56
- package/src/hooks/create-hooks.ts +7 -40
- package/src/index.ts +3 -0
- package/src/key-value/index.ts +1 -1
- package/src/key-value/schema.test.ts +103 -2
- package/src/key-value/schema.ts +66 -5
- package/src/label/create-label.ts +7 -7
- package/src/label/index.ts +1 -1
- package/src/label/schema.ts +7 -10
- package/src/lix/new-lix.test.ts +202 -2
- package/src/lix/new-lix.ts +305 -81
- package/src/lix/open-lix.test.ts +308 -5
- package/src/lix/open-lix.ts +169 -68
- package/src/lix/storage/in-memory.test.ts +9 -83
- package/src/lix/storage/in-memory.ts +13 -18
- package/src/lix/storage/lix-storage-adapter.ts +41 -5
- package/src/lix/storage/opfs.test.ts +254 -31
- package/src/lix/storage/opfs.ts +178 -40
- package/src/log/create-lix-own-log.test.ts +11 -7
- package/src/log/create-lix-own-log.ts +21 -32
- package/src/log/create-log.ts +4 -4
- package/src/log/index.ts +1 -1
- package/src/log/schema.ts +6 -10
- package/src/observe/create-observe.test.ts +395 -60
- package/src/observe/create-observe.ts +41 -3
- package/src/observe/determine-schema-keys.test.ts +371 -0
- package/src/observe/determine-schema-keys.ts +165 -0
- package/src/plugin/lix-plugin.ts +3 -3
- package/src/query-filter/change-set-element-in-ancestry-of.test.ts +112 -26
- package/src/query-filter/change-set-element-in-ancestry-of.ts +25 -20
- package/src/query-filter/change-set-element-in-symmetric-difference.test.ts +6 -6
- package/src/query-filter/change-set-element-in-symmetric-difference.ts +3 -3
- package/src/query-filter/change-set-element-is-leaf-of.test.ts +83 -24
- package/src/query-filter/change-set-element-is-leaf-of.ts +61 -39
- package/src/query-filter/commit-is-ancestor-of.test.ts +333 -0
- package/src/query-filter/commit-is-ancestor-of.ts +77 -0
- package/src/query-filter/commit-is-descendant-of.test.ts +365 -0
- package/src/query-filter/commit-is-descendant-of.ts +70 -0
- package/src/query-filter/index.ts +2 -4
- package/src/schema-definition/definition.test.ts +73 -25
- package/src/schema-definition/definition.ts +87 -30
- package/src/schema-definition/index.ts +1 -1
- package/src/schema-definition/validate-lix-schema.test.ts +14 -5
- package/src/schema-definition/validate-lix-schema.ts +9 -13
- package/src/server-protocol-handler/environment/create-in-memory-environment.test.ts +2 -2
- package/src/server-protocol-handler/routes/push-v1.test.ts +1 -1
- package/src/snapshot/schema.test.ts +113 -0
- package/src/snapshot/schema.ts +10 -2
- package/src/state/README.md +95 -0
- package/src/state/cache/clear-state-cache.test.ts +43 -0
- package/src/state/cache/clear-state-cache.ts +16 -0
- package/src/state/cache/is-stale-state-cache.test.ts +35 -0
- package/src/state/cache/is-stale-state-cache.ts +29 -0
- package/src/state/cache/mark-state-cache-as-stale.ts +53 -0
- package/src/state/cache/populate-state-cache.test.ts +259 -0
- package/src/state/cache/populate-state-cache.ts +124 -0
- package/src/state/cache/schema.ts +41 -0
- package/src/state/cache/update-state-cache.test.ts +510 -0
- package/src/state/cache/update-state-cache.ts +317 -0
- package/src/state/commit.test.ts +1402 -0
- package/src/state/commit.ts +587 -0
- package/src/state/insert-transaction-state.test.ts +928 -0
- package/src/state/insert-transaction-state.ts +306 -0
- package/src/state/materialize-state.test.ts +2358 -0
- package/src/state/materialize-state.ts +235 -0
- package/src/state/primary-key.test.ts +158 -0
- package/src/state/primary-key.ts +80 -0
- package/src/state/resolved-state-view.test.ts +521 -0
- package/src/state/resolved-state-view.ts +202 -0
- package/src/state/schema.test.ts +3116 -2272
- package/src/state/schema.ts +614 -910
- package/src/state/untracked/schema.test.ts +301 -0
- package/src/state/untracked/schema.ts +55 -0
- package/src/state/untracked/update-untracked-state.test.ts +466 -0
- package/src/state/untracked/update-untracked-state.ts +133 -0
- package/src/state/validate-state-mutation.test.ts +1032 -77
- package/src/state/validate-state-mutation.ts +270 -68
- package/src/state-history/schema.test.ts +246 -71
- package/src/state-history/schema.ts +78 -55
- package/src/stored-schema/index.ts +4 -1
- package/src/stored-schema/schema.test.ts +7 -7
- package/src/stored-schema/schema.ts +1 -1
- package/src/sync/push-to-server.test.ts +6 -6
- package/src/test-utilities/simulation-test/cache-miss-simulation.test.ts +162 -0
- package/src/test-utilities/simulation-test/cache-miss-simulation.ts +99 -0
- package/src/test-utilities/simulation-test/chaotic-timestamp-simulation.ts +0 -0
- package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.test.ts +88 -0
- package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.ts +69 -0
- package/src/test-utilities/simulation-test/simulation-test.test.ts +400 -0
- package/src/test-utilities/simulation-test/simulation-test.ts +176 -0
- package/src/thread/create-thread-comment.test.ts +62 -3
- package/src/thread/create-thread-comment.ts +34 -6
- package/src/thread/create-thread.test.ts +180 -0
- package/src/thread/create-thread.ts +32 -7
- package/src/thread/index.ts +3 -2
- package/src/thread/schema.test.ts +81 -0
- package/src/thread/schema.ts +24 -19
- package/src/version/create-version.test.ts +92 -26
- package/src/version/create-version.ts +49 -19
- package/src/version/index.ts +2 -2
- package/src/version/schema.test.ts +328 -92
- package/src/version/schema.ts +47 -33
- package/src/version/select-active-version.ts +18 -0
- package/src/version/switch-version.test.ts +1 -1
- package/src/version/switch-version.ts +3 -3
- package/dist/entity-views/entity-state_history.d.ts +0 -67
- package/dist/entity-views/entity-state_history.d.ts.map +0 -1
- package/dist/entity-views/entity-state_history.js +0 -58
- package/dist/entity-views/entity-state_history.js.map +0 -1
- package/dist/entity-views/generic-types.d.ts +0 -128
- package/dist/entity-views/generic-types.d.ts.map +0 -1
- package/dist/entity-views/generic-types.js +0 -2
- package/dist/entity-views/generic-types.js.map +0 -1
- package/dist/entity-views/generic-types.test.d.ts +0 -2
- package/dist/entity-views/generic-types.test.d.ts.map +0 -1
- package/dist/entity-views/generic-types.test.js +0 -99
- package/dist/entity-views/generic-types.test.js.map +0 -1
- package/dist/lix/to-blob.test.d.ts +0 -2
- package/dist/lix/to-blob.test.d.ts.map +0 -1
- package/dist/lix/to-blob.test.js +0 -18
- package/dist/lix/to-blob.test.js.map +0 -1
- package/dist/repository/comparison-example.js +0 -173
- package/dist/repository/comparison-example.js.map +0 -1
- package/dist/repository/entity-repository.d.ts +0 -53
- package/dist/repository/entity-repository.d.ts.map +0 -1
- package/dist/repository/entity-repository.js +0 -187
- package/dist/repository/entity-repository.js.map +0 -1
- package/dist/repository/entity-repository.test.d.ts +0 -2
- package/dist/repository/entity-repository.test.d.ts.map +0 -1
- package/dist/repository/entity-repository.test.js +0 -94
- package/dist/repository/entity-repository.test.js.map +0 -1
- package/dist/repository/example.d.ts +0 -6
- package/dist/repository/example.d.ts.map +0 -1
- package/dist/repository/example.js +0 -87
- package/dist/repository/example.js.map +0 -1
- package/dist/repository/file-repository.d.ts +0 -39
- package/dist/repository/file-repository.d.ts.map +0 -1
- package/dist/repository/file-repository.js +0 -93
- package/dist/repository/file-repository.js.map +0 -1
- package/dist/repository/file-repository.test.d.ts +0 -2
- package/dist/repository/file-repository.test.d.ts.map +0 -1
- package/dist/repository/file-repository.test.js +0 -165
- package/dist/repository/file-repository.test.js.map +0 -1
- package/dist/repository/index.d.ts +0 -6
- package/dist/repository/index.d.ts.map +0 -1
- package/dist/repository/index.js +0 -6
- package/dist/repository/index.js.map +0 -1
- package/dist/repository/integration.test.d.ts +0 -2
- package/dist/repository/integration.test.d.ts.map +0 -1
- package/dist/repository/integration.test.js +0 -136
- package/dist/repository/integration.test.js.map +0 -1
- package/dist/repository/key-value-repository.d.ts +0 -30
- package/dist/repository/key-value-repository.d.ts.map +0 -1
- package/dist/repository/key-value-repository.js +0 -60
- package/dist/repository/key-value-repository.js.map +0 -1
- package/dist/repository/key-value-repository.test.d.ts +0 -2
- package/dist/repository/key-value-repository.test.d.ts.map +0 -1
- package/dist/repository/key-value-repository.test.js +0 -122
- package/dist/repository/key-value-repository.test.js.map +0 -1
- package/dist/repository/markdown-plugin-example.js +0 -118
- package/dist/repository/markdown-plugin-example.js.map +0 -1
- package/dist/repository/query-builder.d.ts +0 -69
- package/dist/repository/query-builder.d.ts.map +0 -1
- package/dist/repository/query-builder.js +0 -155
- package/dist/repository/query-builder.js.map +0 -1
- package/dist/repository/query-builder.test.d.ts +0 -2
- package/dist/repository/query-builder.test.d.ts.map +0 -1
- package/dist/repository/query-builder.test.js +0 -244
- package/dist/repository/query-builder.test.js.map +0 -1
- package/dist/repository/repository-manager.d.ts +0 -27
- package/dist/repository/repository-manager.d.ts.map +0 -1
- package/dist/repository/repository-manager.js +0 -19
- package/dist/repository/repository-manager.js.map +0 -1
- package/dist/repository/repository-manager.test.d.ts +0 -2
- package/dist/repository/repository-manager.test.d.ts.map +0 -1
- package/dist/repository/repository-manager.test.js +0 -65
- package/dist/repository/repository-manager.test.js.map +0 -1
- package/dist/repository/test-helpers.js +0 -402
- package/dist/repository/test-helpers.js.map +0 -1
- package/dist/schema-definition/lix-generated.test.d.ts +0 -2
- package/dist/schema-definition/lix-generated.test.d.ts.map +0 -1
- package/dist/schema-definition/lix-generated.test.js +0 -127
- package/dist/schema-definition/lix-generated.test.js.map +0 -1
- package/dist/state/entity-view-builder.d.ts +0 -145
- package/dist/state/entity-view-builder.d.ts.map +0 -1
- package/dist/state/entity-view-builder.js +0 -280
- package/dist/state/entity-view-builder.js.map +0 -1
- package/dist/state/entity-view-builder.test.d.ts +0 -2
- package/dist/state/entity-view-builder.test.d.ts.map +0 -1
- package/dist/state/entity-view-builder.test.js +0 -523
- package/dist/state/entity-view-builder.test.js.map +0 -1
- package/src/change-set/create-checkpoint.ts +0 -101
- package/src/file/materialize-file-data-at-changeset.ts +0 -123
- package/src/query-filter/change-has-label.test.ts +0 -79
- package/src/query-filter/change-has-label.ts +0 -45
- package/src/query-filter/change-set-has-label.test.ts +0 -42
- package/src/query-filter/change-set-has-label.ts +0 -50
- package/src/query-filter/change-set-is-ancestor-of.test.ts +0 -178
- package/src/query-filter/change-set-is-ancestor-of.ts +0 -77
- package/src/query-filter/change-set-is-descendant-of.test.ts +0 -169
- package/src/query-filter/change-set-is-descendant-of.ts +0 -70
- package/src/state/create-changeset-for-transaction.ts +0 -321
- package/src/state/get-version-record-by-id-or-throw.ts +0 -51
- package/src/state/handle-state-mutation.test.ts +0 -761
- package/src/state/handle-state-mutation.ts +0 -418
package/src/state/schema.ts
CHANGED
|
@@ -3,16 +3,52 @@ import type { SqliteWasmDatabase } from "sqlite-wasm-kysely";
|
|
|
3
3
|
import { validateStateMutation } from "./validate-state-mutation.js";
|
|
4
4
|
import type { LixInternalDatabaseSchema } from "../database/schema.js";
|
|
5
5
|
import type { Kysely } from "kysely";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { createChangesetForTransaction } from "./create-changeset-for-transaction.js";
|
|
6
|
+
import { sql } from "kysely";
|
|
7
|
+
import { insertTransactionState } from "./insert-transaction-state.js";
|
|
9
8
|
import type { LixHooks } from "../hooks/create-hooks.js";
|
|
9
|
+
import { executeSync } from "../database/execute-sync.js";
|
|
10
|
+
import { applyMaterializeStateSchema } from "./materialize-state.js";
|
|
11
|
+
import { applyResolvedStateView } from "./resolved-state-view.js";
|
|
12
|
+
import { applyStateCacheSchema } from "./cache/schema.js";
|
|
13
|
+
import { isStaleStateCache } from "./cache/is-stale-state-cache.js";
|
|
14
|
+
import { markStateCacheAsFresh } from "./cache/mark-state-cache-as-stale.js";
|
|
15
|
+
import { applyUntrackedStateSchema } from "./untracked/schema.js";
|
|
16
|
+
import { commit } from "./commit.js";
|
|
17
|
+
import { parseStatePk, serializeStatePk } from "./primary-key.js";
|
|
18
|
+
import { uuidV7 } from "../deterministic/uuid-v7.js";
|
|
19
|
+
import { LixLogSchema } from "../log/schema.js";
|
|
20
|
+
import { shouldLog } from "../log/create-lix-own-log.js";
|
|
21
|
+
import { populateStateCache } from "./cache/populate-state-cache.js";
|
|
22
|
+
// import { createLixOwnLogSync } from "../log/create-lix-own-log.js";
|
|
23
|
+
|
|
24
|
+
// Virtual table schema definition
|
|
25
|
+
const VTAB_CREATE_SQL = `CREATE TABLE x(
|
|
26
|
+
_pk HIDDEN TEXT NOT NULL PRIMARY KEY,
|
|
27
|
+
entity_id TEXT,
|
|
28
|
+
schema_key TEXT,
|
|
29
|
+
file_id TEXT,
|
|
30
|
+
version_id TEXT,
|
|
31
|
+
plugin_key TEXT,
|
|
32
|
+
snapshot_content TEXT,
|
|
33
|
+
schema_version TEXT,
|
|
34
|
+
created_at TEXT,
|
|
35
|
+
updated_at TEXT,
|
|
36
|
+
inherited_from_version_id TEXT,
|
|
37
|
+
change_id TEXT,
|
|
38
|
+
untracked INTEGER,
|
|
39
|
+
commit_id TEXT
|
|
40
|
+
) WITHOUT ROWID;`;
|
|
10
41
|
|
|
11
42
|
export function applyStateDatabaseSchema(
|
|
12
43
|
sqlite: SqliteWasmDatabase,
|
|
13
44
|
db: Kysely<LixInternalDatabaseSchema>,
|
|
14
45
|
hooks: LixHooks
|
|
15
|
-
):
|
|
46
|
+
): void {
|
|
47
|
+
applyMaterializeStateSchema(sqlite);
|
|
48
|
+
applyStateCacheSchema({ sqlite });
|
|
49
|
+
applyUntrackedStateSchema({ sqlite });
|
|
50
|
+
applyResolvedStateView({ sqlite, db });
|
|
51
|
+
|
|
16
52
|
sqlite.createFunction({
|
|
17
53
|
name: "validate_snapshot_content",
|
|
18
54
|
deterministic: true,
|
|
@@ -37,63 +73,33 @@ export function applyStateDatabaseSchema(
|
|
|
37
73
|
// Store cursor state
|
|
38
74
|
const cursorStates = new Map();
|
|
39
75
|
|
|
40
|
-
//
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const create_temp_change_table_sql = `
|
|
59
|
-
-- add a table we use within the transaction
|
|
60
|
-
CREATE TEMP TABLE IF NOT EXISTS internal_change_in_transaction (
|
|
61
|
-
id TEXT PRIMARY KEY DEFAULT (uuid_v7()),
|
|
62
|
-
entity_id TEXT NOT NULL,
|
|
63
|
-
schema_key TEXT NOT NULL,
|
|
64
|
-
schema_version TEXT NOT NULL,
|
|
65
|
-
file_id TEXT NOT NULL,
|
|
66
|
-
plugin_key TEXT NOT NULL,
|
|
67
|
-
version_id TEXT NOT NULL,
|
|
68
|
-
snapshot_content BLOB,
|
|
69
|
-
created_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (created_at LIKE '%Z'),
|
|
70
|
-
--- NOTE schena_key must be unique per entity_id and file_id
|
|
71
|
-
UNIQUE(entity_id, file_id, schema_key, version_id)
|
|
72
|
-
) STRICT;
|
|
73
|
-
|
|
74
|
-
`;
|
|
75
|
-
|
|
76
|
-
sqlite.exec(create_temp_change_table_sql);
|
|
76
|
+
// Guard flag to prevent recursion when logging
|
|
77
|
+
let loggingIsInProgress = false;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Flag to prevent recursion when updating cache state.
|
|
81
|
+
*
|
|
82
|
+
* The guard ensures that while we're marking cache as fresh, any nested state queries
|
|
83
|
+
* bypass the cache and use materialized state directly, preventing recursion.
|
|
84
|
+
*
|
|
85
|
+
* Why is this needed is unclear. Queries are executed in sync. Why concurrent
|
|
86
|
+
* reads simultaneously update the cache is not clear. Given that state
|
|
87
|
+
* materialization is rare, this workaround has been deemed sufficient.
|
|
88
|
+
*
|
|
89
|
+
* This is a temporary fix and should be revisited in the future.
|
|
90
|
+
*/
|
|
91
|
+
let isUpdatingCacheState = false;
|
|
77
92
|
|
|
78
93
|
module.installMethods(
|
|
79
94
|
{
|
|
80
|
-
xCreate: (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
schema_version TEXT,
|
|
89
|
-
created_at TEXT,
|
|
90
|
-
updated_at TEXT,
|
|
91
|
-
inherited_from_version_id TEXT,
|
|
92
|
-
change_id TEXT,
|
|
93
|
-
untracked INTEGER
|
|
94
|
-
)`;
|
|
95
|
-
|
|
96
|
-
const result = capi.sqlite3_declare_vtab(db, sql);
|
|
95
|
+
xCreate: (
|
|
96
|
+
dbHandle: any,
|
|
97
|
+
_pAux: any,
|
|
98
|
+
_argc: number,
|
|
99
|
+
_argv: any,
|
|
100
|
+
pVTab: any
|
|
101
|
+
) => {
|
|
102
|
+
const result = capi.sqlite3_declare_vtab(dbHandle, VTAB_CREATE_SQL);
|
|
97
103
|
if (result !== capi.SQLITE_OK) {
|
|
98
104
|
return result;
|
|
99
105
|
}
|
|
@@ -103,187 +109,57 @@ export function applyStateDatabaseSchema(
|
|
|
103
109
|
},
|
|
104
110
|
|
|
105
111
|
xConnect: (
|
|
106
|
-
|
|
112
|
+
dbHandle: any,
|
|
107
113
|
_pAux: any,
|
|
108
114
|
_argc: number,
|
|
109
115
|
_argv: any,
|
|
110
116
|
pVTab: any
|
|
111
117
|
) => {
|
|
112
|
-
const
|
|
113
|
-
entity_id TEXT,
|
|
114
|
-
schema_key TEXT,
|
|
115
|
-
file_id TEXT,
|
|
116
|
-
version_id TEXT,
|
|
117
|
-
plugin_key TEXT,
|
|
118
|
-
snapshot_content TEXT,
|
|
119
|
-
schema_version TEXT,
|
|
120
|
-
created_at TEXT,
|
|
121
|
-
updated_at TEXT,
|
|
122
|
-
inherited_from_version_id TEXT,
|
|
123
|
-
change_id TEXT,
|
|
124
|
-
untracked INTEGER
|
|
125
|
-
)`;
|
|
126
|
-
|
|
127
|
-
const result = capi.sqlite3_declare_vtab(db, sql);
|
|
118
|
+
const result = capi.sqlite3_declare_vtab(dbHandle, VTAB_CREATE_SQL);
|
|
128
119
|
if (result !== capi.SQLITE_OK) {
|
|
129
120
|
return result;
|
|
130
121
|
}
|
|
131
122
|
|
|
123
|
+
// wiping all rows on connect simulates a temp table for internal_change_in_transaction.
|
|
124
|
+
// we need to clear any existing changes on connect in case a transaction remained open.
|
|
125
|
+
// otherwise, the lix can't boot up properly and will throw an error.
|
|
126
|
+
//
|
|
127
|
+
// an open transaction can happen if the storage layer crashes or is not properly shut down.
|
|
128
|
+
//
|
|
129
|
+
// PS internal_change_in_transaction is not a temp table because sqlite
|
|
130
|
+
// prohibits access to temp tables from virtual tables
|
|
131
|
+
executeSync({
|
|
132
|
+
lix: { sqlite },
|
|
133
|
+
query: db.deleteFrom("internal_change_in_transaction"),
|
|
134
|
+
});
|
|
135
|
+
|
|
132
136
|
sqlite.sqlite3.vtab.xVtab.create(pVTab);
|
|
133
137
|
return capi.SQLITE_OK;
|
|
134
138
|
},
|
|
135
139
|
|
|
136
140
|
xBegin: () => {
|
|
137
|
-
//
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
141
|
+
// TODO comment in after all internal v-table logic uses underlying state view
|
|
142
|
+
// // assert that we are not already in a transaction (the internal_change_in_transaction table is empty)
|
|
143
|
+
// const existingChangesInTransaction = executeSync({
|
|
144
|
+
// lix: { sqlite },
|
|
145
|
+
// query: db.selectFrom("internal_change_in_transaction").selectAll(),
|
|
146
|
+
// });
|
|
147
|
+
// if (existingChangesInTransaction.length > 0) {
|
|
148
|
+
// const errorMessage = "Transaction already in progress";
|
|
149
|
+
// if (canLog()) {
|
|
150
|
+
// createLixOwnLogSync({
|
|
151
|
+
// lix: { sqlite, db: db as any },
|
|
152
|
+
// key: "lix_state_xbegin_error",
|
|
153
|
+
// level: "error",
|
|
154
|
+
// message: `xBegin error: ${errorMessage}`,
|
|
155
|
+
// });
|
|
156
|
+
// }
|
|
157
|
+
// throw new Error(errorMessage);
|
|
158
|
+
// }
|
|
155
159
|
},
|
|
156
160
|
|
|
157
161
|
xCommit: () => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
// Insert each row from internal_change_in_transaction into internal_snapshot and internal_change,
|
|
161
|
-
// using the same id for snapshot_id in internal_change as in internal_snapshot.
|
|
162
|
-
const changesWithoutChangeSets = sqlite.exec({
|
|
163
|
-
sql: `
|
|
164
|
-
SELECT
|
|
165
|
-
id,
|
|
166
|
-
entity_id,
|
|
167
|
-
schema_key,
|
|
168
|
-
schema_version,
|
|
169
|
-
file_id,
|
|
170
|
-
plugin_key,
|
|
171
|
-
version_id,
|
|
172
|
-
CASE
|
|
173
|
-
WHEN snapshot_content IS NOT NULL THEN json(snapshot_content)
|
|
174
|
-
ELSE NULL
|
|
175
|
-
END as snapshot_content,
|
|
176
|
-
created_at
|
|
177
|
-
FROM internal_change_in_transaction
|
|
178
|
-
ORDER BY version_id
|
|
179
|
-
`,
|
|
180
|
-
returnValue: "resultRows",
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
// Group changes by version_id
|
|
184
|
-
const changesByVersion = new Map<
|
|
185
|
-
string,
|
|
186
|
-
{
|
|
187
|
-
id: string;
|
|
188
|
-
entity_id: string;
|
|
189
|
-
schema_key: string;
|
|
190
|
-
schema_version: string;
|
|
191
|
-
file_id: string;
|
|
192
|
-
plugin_key: string;
|
|
193
|
-
created_at: string;
|
|
194
|
-
snapshot_content: string | null;
|
|
195
|
-
}[]
|
|
196
|
-
>();
|
|
197
|
-
for (const changeWithoutChangeset of changesWithoutChangeSets) {
|
|
198
|
-
const version_id = changeWithoutChangeset[6] as string;
|
|
199
|
-
if (!changesByVersion.has(version_id)) {
|
|
200
|
-
changesByVersion.set(version_id, []);
|
|
201
|
-
}
|
|
202
|
-
changesByVersion.get(version_id)!.push({
|
|
203
|
-
id: changeWithoutChangeset[0] as string,
|
|
204
|
-
entity_id: changeWithoutChangeset[1] as string,
|
|
205
|
-
schema_key: changeWithoutChangeset[2] as string,
|
|
206
|
-
schema_version: changeWithoutChangeset[3] as string,
|
|
207
|
-
file_id: changeWithoutChangeset[4] as string,
|
|
208
|
-
plugin_key: changeWithoutChangeset[5] as string,
|
|
209
|
-
snapshot_content: changeWithoutChangeset[7] as string,
|
|
210
|
-
created_at: changeWithoutChangeset[8] as string,
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// Process each version's changes to create changesets
|
|
215
|
-
for (const [version_id, versionChanges] of changesByVersion) {
|
|
216
|
-
// Create changeset and edges for this version's transaction
|
|
217
|
-
createChangesetForTransaction(
|
|
218
|
-
sqlite,
|
|
219
|
-
db as any,
|
|
220
|
-
currentTime,
|
|
221
|
-
version_id,
|
|
222
|
-
versionChanges
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
const changesToRealize = sqlite.exec({
|
|
227
|
-
sql: "SELECT id, entity_id, schema_key, schema_version, file_id, plugin_key, version_id, snapshot_content, created_at FROM internal_change_in_transaction ORDER BY version_id",
|
|
228
|
-
returnValue: "resultRows",
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
for (const changeToRealize of changesToRealize) {
|
|
232
|
-
const [
|
|
233
|
-
id,
|
|
234
|
-
entity_id,
|
|
235
|
-
schema_key,
|
|
236
|
-
schema_version,
|
|
237
|
-
file_id,
|
|
238
|
-
plugin_key,
|
|
239
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
240
|
-
version_id,
|
|
241
|
-
snapshot_content,
|
|
242
|
-
created_at,
|
|
243
|
-
] = changeToRealize;
|
|
244
|
-
|
|
245
|
-
let snapshot_id = "no-content";
|
|
246
|
-
|
|
247
|
-
if (snapshot_content) {
|
|
248
|
-
// Insert into internal_snapshot
|
|
249
|
-
const result = sqlite.exec({
|
|
250
|
-
sql: `INSERT OR IGNORE INTO internal_snapshot (content) VALUES (?) RETURNING id`,
|
|
251
|
-
bind: [snapshot_content],
|
|
252
|
-
returnValue: "resultRows",
|
|
253
|
-
});
|
|
254
|
-
// Get the 'id' column of the newly created row
|
|
255
|
-
if (result && result.length > 0) {
|
|
256
|
-
snapshot_id = result[0]![0] as string; // assuming 'id' is the first column
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Insert into internal_change
|
|
261
|
-
sqlite.exec({
|
|
262
|
-
sql: `INSERT INTO internal_change (id, entity_id, schema_key, schema_version, file_id, plugin_key, snapshot_id, created_at)
|
|
263
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
264
|
-
bind: [
|
|
265
|
-
id,
|
|
266
|
-
entity_id,
|
|
267
|
-
schema_key,
|
|
268
|
-
schema_version,
|
|
269
|
-
file_id,
|
|
270
|
-
plugin_key,
|
|
271
|
-
snapshot_id,
|
|
272
|
-
created_at,
|
|
273
|
-
],
|
|
274
|
-
returnValue: "resultRows",
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
sqlite.exec({
|
|
279
|
-
sql: "DELETE FROM internal_change_in_transaction",
|
|
280
|
-
returnValue: "resultRows",
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
// Emit state commit hook after transaction is successfully committed
|
|
284
|
-
hooks._emit("state_commit");
|
|
285
|
-
|
|
286
|
-
return capi.SQLITE_OK;
|
|
162
|
+
return commit({ lix: { sqlite, db: db as any, hooks } });
|
|
287
163
|
},
|
|
288
164
|
|
|
289
165
|
xRollback: () => {
|
|
@@ -293,7 +169,83 @@ export function applyStateDatabaseSchema(
|
|
|
293
169
|
});
|
|
294
170
|
},
|
|
295
171
|
|
|
296
|
-
xBestIndex: () => {
|
|
172
|
+
xBestIndex: (pVTab: any, pIdxInfo: any) => {
|
|
173
|
+
const idxInfo = sqlite.sqlite3.vtab.xIndexInfo(pIdxInfo);
|
|
174
|
+
|
|
175
|
+
// Track which columns have equality constraints
|
|
176
|
+
const usableConstraints: string[] = [];
|
|
177
|
+
let argIndex = 0;
|
|
178
|
+
|
|
179
|
+
// Column mapping (matching the CREATE TABLE order in xCreate/xConnect)
|
|
180
|
+
const columnMap = [
|
|
181
|
+
"_pk", // 0 (HIDDEN column)
|
|
182
|
+
"entity_id", // 1
|
|
183
|
+
"schema_key", // 2
|
|
184
|
+
"file_id", // 3
|
|
185
|
+
"version_id", // 4
|
|
186
|
+
"plugin_key", // 5
|
|
187
|
+
"snapshot_content", // 6
|
|
188
|
+
"schema_version", // 7
|
|
189
|
+
"created_at", // 8
|
|
190
|
+
"updated_at", // 9
|
|
191
|
+
"inherited_from_version_id", // 10
|
|
192
|
+
"change_id", // 11
|
|
193
|
+
"untracked", // 12
|
|
194
|
+
"commit_id", // 13
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
// Process constraints
|
|
198
|
+
// @ts-expect-error - idxInfo.$nConstraint is not defined in the type
|
|
199
|
+
for (let i = 0; i < idxInfo.$nConstraint; i++) {
|
|
200
|
+
// @ts-expect-error - idxInfo.nthConstraint is not defined in the type
|
|
201
|
+
const constraint = idxInfo.nthConstraint(i);
|
|
202
|
+
|
|
203
|
+
// Only handle equality constraints that are usable
|
|
204
|
+
if (
|
|
205
|
+
constraint.$op === capi.SQLITE_INDEX_CONSTRAINT_EQ &&
|
|
206
|
+
constraint.$usable
|
|
207
|
+
) {
|
|
208
|
+
const columnName = columnMap[constraint.$iColumn];
|
|
209
|
+
if (columnName) {
|
|
210
|
+
usableConstraints.push(columnName);
|
|
211
|
+
|
|
212
|
+
// Mark this constraint as used
|
|
213
|
+
// @ts-expect-error - idxInfo.nthConstraintUsage is not defined in the type
|
|
214
|
+
idxInfo.nthConstraintUsage(i).$argvIndex = ++argIndex;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const fullTableCost = 1000000; // Default cost for full table scan
|
|
220
|
+
const fullTableRows = 10000000;
|
|
221
|
+
|
|
222
|
+
// Set the index string to pass column names to xFilter
|
|
223
|
+
if (usableConstraints.length > 0) {
|
|
224
|
+
const idxStr = usableConstraints.join(",");
|
|
225
|
+
// @ts-expect-error - idxInfo.$idxStr is not defined in the type
|
|
226
|
+
idxInfo.$idxStr = sqlite.sqlite3.wasm.allocCString(idxStr, false);
|
|
227
|
+
// @ts-expect-error - idxInfo.$needToFreeIdxStr is not defined in the type
|
|
228
|
+
idxInfo.$needToFreeIdxStr = 1; // We don't need SQLite to free this string
|
|
229
|
+
|
|
230
|
+
// Lower cost when we can use filters (more selective)
|
|
231
|
+
// @ts-expect-error - idxInfo.$estimatedCost is not defined in the type
|
|
232
|
+
idxInfo.$estimatedCost =
|
|
233
|
+
fullTableCost / (usableConstraints.length + 1);
|
|
234
|
+
// @ts-expect-error - idxInfo.$estimatedRows is not defined in the type
|
|
235
|
+
idxInfo.$estimatedRows = Math.ceil(
|
|
236
|
+
fullTableRows / (usableConstraints.length + 1)
|
|
237
|
+
);
|
|
238
|
+
} else {
|
|
239
|
+
// @ts-expect-error - idxInfo.$needToFreeIdxStr is not defined in the type
|
|
240
|
+
idxInfo.$needToFreeIdxStr = 0;
|
|
241
|
+
|
|
242
|
+
// Higher cost for full table scan
|
|
243
|
+
// @ts-expect-error - idxInfo.$estimatedCost is not defined in the type
|
|
244
|
+
idxInfo.$estimatedCost = fullTableCost;
|
|
245
|
+
// @ts-expect-error - idxInfo.$estimatedRows is not defined in the type
|
|
246
|
+
idxInfo.$estimatedRows = fullTableRows;
|
|
247
|
+
}
|
|
248
|
+
|
|
297
249
|
return capi.SQLITE_OK;
|
|
298
250
|
},
|
|
299
251
|
|
|
@@ -319,248 +271,140 @@ export function applyStateDatabaseSchema(
|
|
|
319
271
|
return capi.SQLITE_OK;
|
|
320
272
|
},
|
|
321
273
|
|
|
322
|
-
xFilter: (
|
|
274
|
+
xFilter: (
|
|
275
|
+
pCursor: any,
|
|
276
|
+
idxNum: number,
|
|
277
|
+
idxStrPtr: number,
|
|
278
|
+
argc: number,
|
|
279
|
+
argv: any
|
|
280
|
+
) => {
|
|
323
281
|
const cursorState = cursorStates.get(pCursor);
|
|
282
|
+
const idxStr = sqlite.sqlite3.wasm.cstrToJs(idxStrPtr);
|
|
283
|
+
|
|
284
|
+
// Debug: Track recursion depth
|
|
285
|
+
const recursionKey = "_vtab_recursion_depth";
|
|
286
|
+
// @ts-expect-error - using global for debugging
|
|
287
|
+
const currentDepth = (globalThis[recursionKey] || 0) + 1;
|
|
288
|
+
// @ts-expect-error - using global for debugging
|
|
289
|
+
globalThis[recursionKey] = currentDepth;
|
|
290
|
+
|
|
291
|
+
if (currentDepth > 10) {
|
|
292
|
+
// @ts-expect-error - using global for debugging
|
|
293
|
+
globalThis[recursionKey] = 0; // Reset
|
|
294
|
+
throw new Error(
|
|
295
|
+
`Virtual table recursion depth exceeded: ${currentDepth}`
|
|
296
|
+
);
|
|
297
|
+
}
|
|
324
298
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
WHERE inheritance_delete_marker = 0 -- Hide copy-on-write deletions
|
|
342
|
-
AND NOT EXISTS (
|
|
343
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
344
|
-
WHERE unt.entity_id = internal_state_cache.entity_id
|
|
345
|
-
AND unt.schema_key = internal_state_cache.schema_key
|
|
346
|
-
AND unt.file_id = internal_state_cache.file_id
|
|
347
|
-
AND unt.version_id = internal_state_cache.version_id
|
|
348
|
-
)
|
|
349
|
-
|
|
350
|
-
UNION ALL
|
|
351
|
-
|
|
352
|
-
-- 3. Inherited state (lowest priority) - only if no untracked or tracked exists
|
|
353
|
-
SELECT isc.entity_id, isc.schema_key, isc.file_id,
|
|
354
|
-
vi.version_id, -- Return child version_id
|
|
355
|
-
isc.plugin_key, isc.snapshot_content, isc.schema_version,
|
|
356
|
-
isc.created_at, isc.updated_at,
|
|
357
|
-
vi.parent_version_id as inherited_from_version_id, isc.change_id, 0 as untracked
|
|
358
|
-
FROM (
|
|
359
|
-
-- Get version inheritance relationships from cache
|
|
360
|
-
SELECT
|
|
361
|
-
json_extract(isc_v.snapshot_content, '$.id') AS version_id,
|
|
362
|
-
json_extract(isc_v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
|
|
363
|
-
FROM internal_state_cache isc_v
|
|
364
|
-
WHERE isc_v.schema_key = 'lix_version'
|
|
365
|
-
) vi
|
|
366
|
-
JOIN internal_state_cache isc ON isc.version_id = vi.parent_version_id
|
|
367
|
-
WHERE vi.parent_version_id IS NOT NULL
|
|
368
|
-
-- Only inherit entities that exist (not deleted) in parent
|
|
369
|
-
AND isc.inheritance_delete_marker = 0
|
|
370
|
-
-- Don't inherit if child has tracked state
|
|
371
|
-
AND NOT EXISTS (
|
|
372
|
-
SELECT 1 FROM internal_state_cache child_isc
|
|
373
|
-
WHERE child_isc.version_id = vi.version_id
|
|
374
|
-
AND child_isc.entity_id = isc.entity_id
|
|
375
|
-
AND child_isc.schema_key = isc.schema_key
|
|
376
|
-
AND child_isc.file_id = isc.file_id
|
|
377
|
-
)
|
|
378
|
-
-- Don't inherit if child has untracked state
|
|
379
|
-
AND NOT EXISTS (
|
|
380
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
381
|
-
WHERE unt.version_id = vi.version_id
|
|
382
|
-
AND unt.entity_id = isc.entity_id
|
|
383
|
-
AND unt.schema_key = isc.schema_key
|
|
384
|
-
AND unt.file_id = isc.file_id
|
|
385
|
-
)
|
|
386
|
-
`,
|
|
387
|
-
returnValue: "resultRows",
|
|
388
|
-
});
|
|
299
|
+
try {
|
|
300
|
+
// Extract filter arguments if provided
|
|
301
|
+
const filters: Record<string, any> = {};
|
|
302
|
+
if (argc > 0 && argv) {
|
|
303
|
+
const args = sqlite.sqlite3.capi.sqlite3_values_to_js(argc, argv);
|
|
304
|
+
// Parse idxStr to understand which columns are being filtered
|
|
305
|
+
// idxStr format: "column1,column2,..."
|
|
306
|
+
if (idxStr) {
|
|
307
|
+
const columns = idxStr.split(",").filter((c) => c.length > 0);
|
|
308
|
+
for (let i = 0; i < Math.min(columns.length, args.length); i++) {
|
|
309
|
+
if (args[i] !== null) {
|
|
310
|
+
filters[columns[i]!] = args[i]; // Keep original type
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
389
315
|
|
|
390
|
-
|
|
391
|
-
|
|
316
|
+
// If we're updating cache state, we must use resolved state view directly to avoid recursion
|
|
317
|
+
if (isUpdatingCacheState) {
|
|
318
|
+
// Query directly from resolved state view which handles inheritance correctly
|
|
319
|
+
let query = db
|
|
320
|
+
.selectFrom("internal_resolved_state_all")
|
|
321
|
+
.selectAll();
|
|
392
322
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
323
|
+
// Apply filters
|
|
324
|
+
for (const [column, value] of Object.entries(filters)) {
|
|
325
|
+
query = query.where(column as any, "=", value);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const stateResults = executeSync({
|
|
329
|
+
lix: { sqlite },
|
|
330
|
+
query,
|
|
401
331
|
});
|
|
332
|
+
|
|
333
|
+
cursorState.results = stateResults || [];
|
|
334
|
+
cursorState.rowIndex = 0;
|
|
335
|
+
return capi.SQLITE_OK;
|
|
402
336
|
}
|
|
403
337
|
|
|
404
|
-
//
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
// Populate cache with materialized state results
|
|
409
|
-
if (stateResults && stateResults.length > 0) {
|
|
410
|
-
let cachePopulated = false;
|
|
411
|
-
for (const row of stateResults) {
|
|
412
|
-
// CTE returns rows as arrays, so access by index
|
|
413
|
-
const entity_id = Array.isArray(row) ? row[0] : row.entity_id;
|
|
414
|
-
const schema_key = Array.isArray(row) ? row[1] : row.schema_key;
|
|
415
|
-
const file_id = Array.isArray(row) ? row[2] : row.file_id;
|
|
416
|
-
const plugin_key = Array.isArray(row) ? row[3] : row.plugin_key;
|
|
417
|
-
const snapshot_content = Array.isArray(row)
|
|
418
|
-
? row[4]
|
|
419
|
-
: row.snapshot_content;
|
|
420
|
-
const schema_version = Array.isArray(row)
|
|
421
|
-
? row[5]
|
|
422
|
-
: row.schema_version;
|
|
423
|
-
const version_id = Array.isArray(row) ? row[6] : row.version_id;
|
|
424
|
-
const created_at = Array.isArray(row) ? row[7] : row.created_at;
|
|
425
|
-
const updated_at = Array.isArray(row) ? row[8] : row.updated_at;
|
|
426
|
-
const inherited_from_version_id = Array.isArray(row)
|
|
427
|
-
? row[9]
|
|
428
|
-
: row.inherited_from_version_id;
|
|
429
|
-
const change_id = Array.isArray(row) ? row[10] : row.change_id;
|
|
430
|
-
|
|
431
|
-
// Skip rows with null entity_id (no actual state data found)
|
|
432
|
-
if (!entity_id) {
|
|
433
|
-
continue;
|
|
434
|
-
}
|
|
338
|
+
// Normal path: check cache staleness
|
|
339
|
+
const cacheIsStale = isStaleStateCache({
|
|
340
|
+
lix: { sqlite, db: db as any },
|
|
341
|
+
});
|
|
435
342
|
|
|
436
|
-
|
|
343
|
+
// Try cache first - but only if it's not stale
|
|
344
|
+
let cacheResults: any[] | null = null;
|
|
345
|
+
if (!cacheIsStale) {
|
|
346
|
+
// Select directly from resolved state view using Kysely
|
|
347
|
+
let query = db
|
|
348
|
+
.selectFrom("internal_resolved_state_all")
|
|
349
|
+
.selectAll();
|
|
350
|
+
|
|
351
|
+
// Apply filters
|
|
352
|
+
for (const [column, value] of Object.entries(filters)) {
|
|
353
|
+
query = query.where(column as any, "=", value);
|
|
354
|
+
}
|
|
437
355
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
) {
|
|
444
|
-
continue;
|
|
445
|
-
}
|
|
356
|
+
cacheResults = executeSync({
|
|
357
|
+
lix: { sqlite },
|
|
358
|
+
query,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
446
361
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
isDeletion ? 1 : 0,
|
|
470
|
-
change_id || "unknown-change-id",
|
|
471
|
-
],
|
|
472
|
-
});
|
|
473
|
-
cachePopulated = true;
|
|
362
|
+
cursorState.results = cacheResults || [];
|
|
363
|
+
cursorState.rowIndex = 0;
|
|
364
|
+
|
|
365
|
+
if (cacheIsStale) {
|
|
366
|
+
// Populate cache directly with materialized state
|
|
367
|
+
populateStateCache(sqlite);
|
|
368
|
+
|
|
369
|
+
// Log the cache miss
|
|
370
|
+
insertVTableLog({
|
|
371
|
+
sqlite,
|
|
372
|
+
db: db as any,
|
|
373
|
+
key: "lix_state_cache_miss",
|
|
374
|
+
level: "debug",
|
|
375
|
+
message: `Cache miss detected - materialized state`,
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
// Mark cache as fresh after population
|
|
379
|
+
isUpdatingCacheState = true;
|
|
380
|
+
try {
|
|
381
|
+
markStateCacheAsFresh({ lix: { sqlite, db: db as any } });
|
|
382
|
+
} finally {
|
|
383
|
+
isUpdatingCacheState = false;
|
|
474
384
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
385
|
+
|
|
386
|
+
let query = db
|
|
387
|
+
.selectFrom("internal_resolved_state_all")
|
|
388
|
+
.selectAll();
|
|
389
|
+
|
|
390
|
+
// Apply filters
|
|
391
|
+
for (const [column, value] of Object.entries(filters)) {
|
|
392
|
+
query = query.where(column as any, "=", value);
|
|
482
393
|
}
|
|
483
|
-
}
|
|
484
394
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
const newResults = sqlite.exec({
|
|
489
|
-
sql: `
|
|
490
|
-
-- 1. Untracked state (highest priority)
|
|
491
|
-
SELECT entity_id, schema_key, file_id, version_id, plugin_key,
|
|
492
|
-
snapshot_content, schema_version, created_at, updated_at,
|
|
493
|
-
NULL as inherited_from_version_id, 'untracked' as change_id, 1 as untracked
|
|
494
|
-
FROM internal_state_all_untracked
|
|
495
|
-
|
|
496
|
-
UNION ALL
|
|
497
|
-
|
|
498
|
-
-- 2. Tracked state (second priority) - only if no untracked exists
|
|
499
|
-
SELECT entity_id, schema_key, file_id, version_id, plugin_key,
|
|
500
|
-
snapshot_content, schema_version, created_at, updated_at,
|
|
501
|
-
inherited_from_version_id, change_id, 0 as untracked
|
|
502
|
-
FROM internal_state_cache
|
|
503
|
-
WHERE inheritance_delete_marker = 0 -- Hide copy-on-write deletions
|
|
504
|
-
AND NOT EXISTS (
|
|
505
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
506
|
-
WHERE unt.entity_id = internal_state_cache.entity_id
|
|
507
|
-
AND unt.schema_key = internal_state_cache.schema_key
|
|
508
|
-
AND unt.file_id = internal_state_cache.file_id
|
|
509
|
-
AND unt.version_id = internal_state_cache.version_id
|
|
510
|
-
)
|
|
511
|
-
|
|
512
|
-
UNION ALL
|
|
513
|
-
|
|
514
|
-
-- 3. Inherited state (lowest priority) - only if no untracked or tracked exists
|
|
515
|
-
SELECT isc.entity_id, isc.schema_key, isc.file_id,
|
|
516
|
-
vi.version_id, -- Return child version_id
|
|
517
|
-
isc.plugin_key, isc.snapshot_content, isc.schema_version,
|
|
518
|
-
isc.created_at, isc.updated_at,
|
|
519
|
-
vi.parent_version_id as inherited_from_version_id, isc.change_id, 0 as untracked
|
|
520
|
-
FROM (
|
|
521
|
-
-- Get version inheritance relationships from cache
|
|
522
|
-
SELECT
|
|
523
|
-
json_extract(isc_v.snapshot_content, '$.id') AS version_id,
|
|
524
|
-
json_extract(isc_v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
|
|
525
|
-
FROM internal_state_cache isc_v
|
|
526
|
-
WHERE isc_v.schema_key = 'lix_version'
|
|
527
|
-
) vi
|
|
528
|
-
JOIN internal_state_cache isc ON isc.version_id = vi.parent_version_id
|
|
529
|
-
WHERE vi.parent_version_id IS NOT NULL
|
|
530
|
-
-- Only inherit entities that exist (not deleted) in parent
|
|
531
|
-
AND isc.inheritance_delete_marker = 0
|
|
532
|
-
-- Don't inherit if child has tracked state
|
|
533
|
-
AND NOT EXISTS (
|
|
534
|
-
SELECT 1 FROM internal_state_cache child_isc
|
|
535
|
-
WHERE child_isc.version_id = vi.version_id
|
|
536
|
-
AND child_isc.entity_id = isc.entity_id
|
|
537
|
-
AND child_isc.schema_key = isc.schema_key
|
|
538
|
-
AND child_isc.file_id = isc.file_id
|
|
539
|
-
)
|
|
540
|
-
-- Don't inherit if child has untracked state
|
|
541
|
-
AND NOT EXISTS (
|
|
542
|
-
SELECT 1 FROM internal_state_all_untracked unt
|
|
543
|
-
WHERE unt.version_id = vi.version_id
|
|
544
|
-
AND unt.entity_id = isc.entity_id
|
|
545
|
-
AND unt.schema_key = isc.schema_key
|
|
546
|
-
AND unt.file_id = isc.file_id
|
|
547
|
-
)
|
|
548
|
-
`,
|
|
549
|
-
returnValue: "resultRows",
|
|
550
|
-
});
|
|
551
|
-
cursorState.results = newResults || [];
|
|
552
|
-
} else {
|
|
553
|
-
if (canLog()) {
|
|
554
|
-
createLixOwnLogSync({
|
|
555
|
-
lix: { sqlite, db: db as any },
|
|
556
|
-
key: "lix_state_cache_hit",
|
|
557
|
-
level: "debug",
|
|
558
|
-
message: `Cache hit - returning ${cursorState.results.length} cached rows`,
|
|
395
|
+
const newResults = executeSync({
|
|
396
|
+
lix: { sqlite },
|
|
397
|
+
query,
|
|
559
398
|
});
|
|
399
|
+
cursorState.results = newResults || [];
|
|
560
400
|
}
|
|
561
|
-
}
|
|
562
401
|
|
|
563
|
-
|
|
402
|
+
return capi.SQLITE_OK;
|
|
403
|
+
} finally {
|
|
404
|
+
// Always decrement recursion depth
|
|
405
|
+
// @ts-expect-error - using global for debugging
|
|
406
|
+
globalThis[recursionKey] = currentDepth - 1;
|
|
407
|
+
}
|
|
564
408
|
},
|
|
565
409
|
|
|
566
410
|
xNext: (pCursor: any) => {
|
|
@@ -583,9 +427,32 @@ export function applyStateDatabaseSchema(
|
|
|
583
427
|
return capi.SQLITE_OK;
|
|
584
428
|
}
|
|
585
429
|
|
|
430
|
+
// Handle primary key column (_pk)
|
|
431
|
+
if (iCol === 0) {
|
|
432
|
+
if (Array.isArray(row)) {
|
|
433
|
+
// For array results, _pk is at index 0
|
|
434
|
+
capi.sqlite3_result_js(pContext, row[0]);
|
|
435
|
+
} else if (row._pk) {
|
|
436
|
+
// If row already has _pk, use it
|
|
437
|
+
capi.sqlite3_result_js(pContext, row._pk);
|
|
438
|
+
} else {
|
|
439
|
+
// Generate primary key from row data
|
|
440
|
+
const tag = row.untracked ? "U" : "C";
|
|
441
|
+
const primaryKey = serializeStatePk(
|
|
442
|
+
tag,
|
|
443
|
+
row.file_id,
|
|
444
|
+
row.entity_id,
|
|
445
|
+
row.version_id
|
|
446
|
+
);
|
|
447
|
+
capi.sqlite3_result_js(pContext, primaryKey);
|
|
448
|
+
}
|
|
449
|
+
return capi.SQLITE_OK;
|
|
450
|
+
}
|
|
451
|
+
|
|
586
452
|
// Handle array-style results from SQLite exec
|
|
587
453
|
let value;
|
|
588
454
|
if (Array.isArray(row)) {
|
|
455
|
+
// For array results, composite_key is at index 0, so we use iCol directly
|
|
589
456
|
value = row[iCol];
|
|
590
457
|
} else {
|
|
591
458
|
const columnName = getColumnName(iCol);
|
|
@@ -601,10 +468,8 @@ export function applyStateDatabaseSchema(
|
|
|
601
468
|
return capi.SQLITE_OK;
|
|
602
469
|
}
|
|
603
470
|
|
|
604
|
-
if (value === null
|
|
471
|
+
if (value === null) {
|
|
605
472
|
capi.sqlite3_result_null(pContext);
|
|
606
|
-
} else if (typeof value === "object") {
|
|
607
|
-
capi.sqlite3_result_js(pContext, JSON.stringify(value));
|
|
608
473
|
} else {
|
|
609
474
|
capi.sqlite3_result_js(pContext, value);
|
|
610
475
|
}
|
|
@@ -612,10 +477,10 @@ export function applyStateDatabaseSchema(
|
|
|
612
477
|
return capi.SQLITE_OK;
|
|
613
478
|
},
|
|
614
479
|
|
|
615
|
-
xRowid: (
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
return capi.
|
|
480
|
+
xRowid: () => {
|
|
481
|
+
// For WITHOUT ROWID tables, xRowid should not be called
|
|
482
|
+
// But if it is, we return an error
|
|
483
|
+
return capi.SQLITE_ERROR;
|
|
619
484
|
},
|
|
620
485
|
|
|
621
486
|
xUpdate: (_pVTab: number, nArg: number, ppArgv: any) => {
|
|
@@ -623,39 +488,42 @@ export function applyStateDatabaseSchema(
|
|
|
623
488
|
// Extract arguments using the proper SQLite WASM API
|
|
624
489
|
const args = sqlite.sqlite3.capi.sqlite3_values_to_js(nArg, ppArgv);
|
|
625
490
|
|
|
626
|
-
// DELETE operation: nArg = 1, args[0] = old
|
|
491
|
+
// DELETE operation: nArg = 1, args[0] = old primary key
|
|
627
492
|
if (nArg === 1) {
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
493
|
+
const oldPk = args[0] as string;
|
|
494
|
+
if (!oldPk) {
|
|
495
|
+
throw new Error("Missing primary key for DELETE operation");
|
|
496
|
+
}
|
|
632
497
|
|
|
633
|
-
handleStateDelete
|
|
498
|
+
// Use handleStateDelete for all cases - it handles both tracked and untracked
|
|
499
|
+
handleStateDelete(sqlite, oldPk, db);
|
|
634
500
|
|
|
635
501
|
return capi.SQLITE_OK;
|
|
636
502
|
}
|
|
637
503
|
|
|
638
|
-
// INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new
|
|
639
|
-
// UPDATE operation: nArg = N+2, args[0] = old
|
|
640
|
-
const isInsert = args[0] === null
|
|
641
|
-
const isUpdate = args[0] !== null
|
|
504
|
+
// INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new primary key
|
|
505
|
+
// UPDATE operation: nArg = N+2, args[0] = old primary key, args[1] = new primary key
|
|
506
|
+
const isInsert = args[0] === null;
|
|
507
|
+
const isUpdate = args[0] !== null;
|
|
642
508
|
|
|
643
509
|
if (!isInsert && !isUpdate) {
|
|
644
510
|
throw new Error("Invalid xUpdate operation");
|
|
645
511
|
}
|
|
646
512
|
|
|
647
513
|
// Extract column values (args[2] through args[N+1])
|
|
648
|
-
// Column order: entity_id, schema_key, file_id, version_id, plugin_key,
|
|
514
|
+
// Column order: _pk, entity_id, schema_key, file_id, version_id, plugin_key,
|
|
649
515
|
// snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, change_id, untracked
|
|
650
|
-
const entity_id = args[
|
|
651
|
-
const schema_key = args[
|
|
652
|
-
const file_id = args[
|
|
653
|
-
const version_id = args[
|
|
654
|
-
const plugin_key = args[
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
const
|
|
516
|
+
const entity_id = args[3];
|
|
517
|
+
const schema_key = args[4];
|
|
518
|
+
const file_id = args[5];
|
|
519
|
+
const version_id = args[6];
|
|
520
|
+
const plugin_key = args[7];
|
|
521
|
+
// this is an update where we have a snapshot_content
|
|
522
|
+
// the snapshot_content is a JSON string as returned by SQlite
|
|
523
|
+
const snapshot_content = args[8] as string;
|
|
524
|
+
const schema_version = args[9];
|
|
525
|
+
// Skip created_at (args[10]), updated_at (args[11]), inherited_from_version_id (args[12]), change_id (args[13])
|
|
526
|
+
const untracked = args[14] ?? false;
|
|
659
527
|
|
|
660
528
|
// assert required fields
|
|
661
529
|
if (!entity_id || !schema_key || !file_id || !plugin_key) {
|
|
@@ -666,122 +534,83 @@ export function applyStateDatabaseSchema(
|
|
|
666
534
|
throw new Error("version_id is required for state mutation");
|
|
667
535
|
}
|
|
668
536
|
|
|
669
|
-
// Ensure snapshot_content is a string
|
|
670
|
-
const snapshotStr =
|
|
671
|
-
typeof snapshot_content === "string"
|
|
672
|
-
? snapshot_content
|
|
673
|
-
: JSON.stringify(snapshot_content);
|
|
674
|
-
|
|
675
537
|
// Call validation function (same logic as triggers)
|
|
676
|
-
const
|
|
677
|
-
sql: "SELECT value FROM stored_schema WHERE key = ?",
|
|
678
|
-
bind: [String(schema_key)],
|
|
679
|
-
returnValue: "resultRows",
|
|
680
|
-
});
|
|
681
|
-
|
|
682
|
-
const storedSchema =
|
|
683
|
-
storedSchemaResult && storedSchemaResult.length > 0
|
|
684
|
-
? storedSchemaResult[0]![0]
|
|
685
|
-
: null;
|
|
538
|
+
const storedSchema = getStoredSchema(sqlite, db, schema_key);
|
|
686
539
|
|
|
687
540
|
validateStateMutation({
|
|
688
541
|
lix: { sqlite, db: db as any },
|
|
689
|
-
schema: storedSchema ? JSON.parse(storedSchema
|
|
690
|
-
snapshot_content: JSON.parse(
|
|
542
|
+
schema: storedSchema ? JSON.parse(storedSchema) : null,
|
|
543
|
+
snapshot_content: JSON.parse(snapshot_content),
|
|
691
544
|
operation: isInsert ? "insert" : "update",
|
|
692
545
|
entity_id: String(entity_id),
|
|
693
546
|
version_id: String(version_id),
|
|
694
547
|
untracked: Boolean(untracked),
|
|
695
548
|
});
|
|
696
549
|
|
|
697
|
-
//
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
String(schema_version),
|
|
712
|
-
],
|
|
713
|
-
});
|
|
714
|
-
} else {
|
|
715
|
-
// Handle tracked mutation - normal change control
|
|
716
|
-
// If there's existing untracked state, delete it first (tracked overrides untracked)
|
|
717
|
-
sqlite.exec({
|
|
718
|
-
sql: `DELETE FROM internal_state_all_untracked
|
|
719
|
-
WHERE entity_id = ? AND schema_key = ? AND file_id = ? AND version_id = ?`,
|
|
720
|
-
bind: [
|
|
721
|
-
String(entity_id),
|
|
722
|
-
String(schema_key),
|
|
723
|
-
String(file_id),
|
|
724
|
-
String(version_id),
|
|
725
|
-
],
|
|
726
|
-
});
|
|
727
|
-
|
|
728
|
-
// Call handleStateMutation (same logic as triggers)
|
|
729
|
-
handleStateMutation(
|
|
730
|
-
sqlite,
|
|
731
|
-
db,
|
|
732
|
-
String(entity_id),
|
|
733
|
-
String(schema_key),
|
|
734
|
-
String(file_id),
|
|
735
|
-
String(plugin_key),
|
|
736
|
-
snapshotStr,
|
|
737
|
-
String(version_id),
|
|
738
|
-
String(schema_version)
|
|
739
|
-
);
|
|
740
|
-
}
|
|
550
|
+
// Use insertTransactionState which handles both tracked and untracked entities
|
|
551
|
+
insertTransactionState({
|
|
552
|
+
lix: { sqlite, db },
|
|
553
|
+
data: {
|
|
554
|
+
entity_id: String(entity_id),
|
|
555
|
+
schema_key: String(schema_key),
|
|
556
|
+
file_id: String(file_id),
|
|
557
|
+
plugin_key: String(plugin_key),
|
|
558
|
+
snapshot_content,
|
|
559
|
+
schema_version: String(schema_version),
|
|
560
|
+
version_id: String(version_id),
|
|
561
|
+
untracked: Boolean(untracked),
|
|
562
|
+
},
|
|
563
|
+
});
|
|
741
564
|
|
|
742
|
-
// TODO: This cache copying logic is a temporary workaround for shared
|
|
743
|
-
// The proper solution requires improving cache miss logic to handle
|
|
565
|
+
// TODO: This cache copying logic is a temporary workaround for shared commits.
|
|
566
|
+
// The proper solution requires improving cache miss logic to handle commit sharing
|
|
744
567
|
// without duplicating entries. See: https://github.com/opral/lix-sdk/issues/309
|
|
745
568
|
//
|
|
746
|
-
// Handle cache copying for new versions that share
|
|
569
|
+
// Handle cache copying for new versions that share commits
|
|
747
570
|
if (isInsert && String(schema_key) === "lix_version") {
|
|
748
|
-
const versionData = JSON.parse(
|
|
571
|
+
const versionData = JSON.parse(snapshot_content);
|
|
749
572
|
const newVersionId = versionData.id;
|
|
750
|
-
const
|
|
573
|
+
const commitId = versionData.commit_id;
|
|
751
574
|
|
|
752
|
-
if (newVersionId &&
|
|
753
|
-
// Find other versions that
|
|
754
|
-
const
|
|
575
|
+
if (newVersionId && commitId) {
|
|
576
|
+
// Find other versions that point to the same commit
|
|
577
|
+
const existingVersionsWithSameCommit = sqlite.exec({
|
|
755
578
|
sql: `
|
|
756
579
|
SELECT json_extract(snapshot_content, '$.id') as version_id
|
|
757
580
|
FROM internal_state_cache
|
|
758
581
|
WHERE schema_key = 'lix_version'
|
|
759
|
-
AND json_extract(snapshot_content, '$.
|
|
582
|
+
AND json_extract(snapshot_content, '$.commit_id') = ?
|
|
760
583
|
AND json_extract(snapshot_content, '$.id') != ?
|
|
761
584
|
`,
|
|
762
|
-
bind: [
|
|
585
|
+
bind: [commitId, newVersionId],
|
|
763
586
|
returnValue: "resultRows",
|
|
764
587
|
});
|
|
765
588
|
|
|
766
|
-
// If there are existing versions with the same
|
|
589
|
+
// If there are existing versions with the same commit, copy their cache entries
|
|
767
590
|
if (
|
|
768
|
-
|
|
769
|
-
|
|
591
|
+
existingVersionsWithSameCommit &&
|
|
592
|
+
existingVersionsWithSameCommit.length > 0
|
|
770
593
|
) {
|
|
771
|
-
const sourceVersionId =
|
|
772
|
-
existingVersionsWithSameChangeSet[0]![0]; // Take first existing version
|
|
594
|
+
const sourceVersionId = existingVersionsWithSameCommit[0]![0]; // Take first existing version
|
|
773
595
|
|
|
774
596
|
// Copy cache entries from source version to new version
|
|
597
|
+
// IMPORTANT: When copying cache entries, we need to mark them as inherited
|
|
598
|
+
// if they don't have an inherited_from_version_id already
|
|
775
599
|
sqlite.exec({
|
|
776
600
|
sql: `
|
|
777
601
|
INSERT OR IGNORE INTO internal_state_cache
|
|
778
|
-
(entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id)
|
|
602
|
+
(entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id, commit_id)
|
|
779
603
|
SELECT
|
|
780
|
-
entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at,
|
|
604
|
+
entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at,
|
|
605
|
+
CASE
|
|
606
|
+
WHEN inherited_from_version_id IS NULL THEN ?
|
|
607
|
+
ELSE inherited_from_version_id
|
|
608
|
+
END as inherited_from_version_id,
|
|
609
|
+
inheritance_delete_marker, change_id, commit_id
|
|
781
610
|
FROM internal_state_cache
|
|
782
611
|
WHERE version_id = ? AND schema_key != 'lix_version'
|
|
783
612
|
`,
|
|
784
|
-
bind: [newVersionId, sourceVersionId],
|
|
613
|
+
bind: [newVersionId, sourceVersionId, sourceVersionId],
|
|
785
614
|
});
|
|
786
615
|
}
|
|
787
616
|
}
|
|
@@ -793,35 +622,15 @@ export function applyStateDatabaseSchema(
|
|
|
793
622
|
error instanceof Error ? error.message : String(error);
|
|
794
623
|
|
|
795
624
|
// Log error for debugging
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
}
|
|
625
|
+
insertVTableLog({
|
|
626
|
+
sqlite,
|
|
627
|
+
db: db as any,
|
|
628
|
+
key: "lix_state_xupdate_error",
|
|
629
|
+
level: "error",
|
|
630
|
+
message: `xUpdate error: ${errorMessage}`,
|
|
631
|
+
});
|
|
804
632
|
|
|
805
|
-
throw error; //
|
|
806
|
-
|
|
807
|
-
// const vtab = sqlite.sqlite3.vtab.xVtab.get(_pVTab);
|
|
808
|
-
|
|
809
|
-
// // Set proper error message on the virtual table
|
|
810
|
-
// if (vtab) {
|
|
811
|
-
// // Free any existing error message first
|
|
812
|
-
// if (vtab.zErrMsg) {
|
|
813
|
-
// capi.sqlite3_free(vtab.zErrMsg);
|
|
814
|
-
// }
|
|
815
|
-
// // Allocate new error message using sqlite3_malloc
|
|
816
|
-
// const errorBytes = new TextEncoder().encode(errorMessage + "\0");
|
|
817
|
-
// const errorPtr = capi.sqlite3_malloc(errorBytes.length);
|
|
818
|
-
// if (errorPtr) {
|
|
819
|
-
// sqlite.sqlite3.wasm.heap8u().set(errorBytes, errorPtr);
|
|
820
|
-
// vtab.zErrMsg = errorPtr;
|
|
821
|
-
// }
|
|
822
|
-
// }
|
|
823
|
-
|
|
824
|
-
// return capi.SQLITE_ERROR;
|
|
633
|
+
throw error; // Re-throw to propagate error
|
|
825
634
|
}
|
|
826
635
|
},
|
|
827
636
|
},
|
|
@@ -838,7 +647,19 @@ export function applyStateDatabaseSchema(
|
|
|
838
647
|
// Create state view that filters to active version only
|
|
839
648
|
sqlite.exec(`
|
|
840
649
|
CREATE VIEW IF NOT EXISTS state AS
|
|
841
|
-
SELECT
|
|
650
|
+
SELECT
|
|
651
|
+
entity_id,
|
|
652
|
+
schema_key,
|
|
653
|
+
file_id,
|
|
654
|
+
plugin_key,
|
|
655
|
+
snapshot_content,
|
|
656
|
+
schema_version,
|
|
657
|
+
created_at,
|
|
658
|
+
updated_at,
|
|
659
|
+
inherited_from_version_id,
|
|
660
|
+
change_id,
|
|
661
|
+
untracked,
|
|
662
|
+
commit_id
|
|
842
663
|
FROM state_all
|
|
843
664
|
WHERE version_id IN (SELECT version_id FROM active_version);
|
|
844
665
|
|
|
@@ -847,11 +668,33 @@ export function applyStateDatabaseSchema(
|
|
|
847
668
|
INSTEAD OF INSERT ON state
|
|
848
669
|
BEGIN
|
|
849
670
|
INSERT INTO state_all (
|
|
850
|
-
entity_id,
|
|
851
|
-
|
|
671
|
+
entity_id,
|
|
672
|
+
schema_key,
|
|
673
|
+
file_id,
|
|
674
|
+
version_id,
|
|
675
|
+
plugin_key,
|
|
676
|
+
snapshot_content,
|
|
677
|
+
schema_version,
|
|
678
|
+
created_at,
|
|
679
|
+
updated_at,
|
|
680
|
+
inherited_from_version_id,
|
|
681
|
+
change_id,
|
|
682
|
+
untracked,
|
|
683
|
+
commit_id
|
|
852
684
|
) VALUES (
|
|
853
|
-
NEW.entity_id,
|
|
854
|
-
NEW.
|
|
685
|
+
NEW.entity_id,
|
|
686
|
+
NEW.schema_key,
|
|
687
|
+
NEW.file_id,
|
|
688
|
+
(SELECT version_id FROM active_version),
|
|
689
|
+
NEW.plugin_key,
|
|
690
|
+
NEW.snapshot_content,
|
|
691
|
+
NEW.schema_version,
|
|
692
|
+
NEW.created_at,
|
|
693
|
+
NEW.updated_at,
|
|
694
|
+
NEW.inherited_from_version_id,
|
|
695
|
+
NEW.change_id,
|
|
696
|
+
NEW.untracked,
|
|
697
|
+
NEW.commit_id
|
|
855
698
|
);
|
|
856
699
|
END;
|
|
857
700
|
|
|
@@ -863,7 +706,7 @@ export function applyStateDatabaseSchema(
|
|
|
863
706
|
entity_id = NEW.entity_id,
|
|
864
707
|
schema_key = NEW.schema_key,
|
|
865
708
|
file_id = NEW.file_id,
|
|
866
|
-
version_id =
|
|
709
|
+
version_id = (SELECT version_id FROM active_version),
|
|
867
710
|
plugin_key = NEW.plugin_key,
|
|
868
711
|
snapshot_content = NEW.snapshot_content,
|
|
869
712
|
schema_version = NEW.schema_version,
|
|
@@ -871,147 +714,222 @@ export function applyStateDatabaseSchema(
|
|
|
871
714
|
updated_at = NEW.updated_at,
|
|
872
715
|
inherited_from_version_id = NEW.inherited_from_version_id,
|
|
873
716
|
change_id = NEW.change_id,
|
|
874
|
-
untracked = NEW.untracked
|
|
717
|
+
untracked = NEW.untracked,
|
|
718
|
+
commit_id = NEW.commit_id
|
|
875
719
|
WHERE
|
|
876
720
|
entity_id = OLD.entity_id
|
|
877
721
|
AND schema_key = OLD.schema_key
|
|
878
722
|
AND file_id = OLD.file_id
|
|
879
|
-
AND version_id =
|
|
723
|
+
AND version_id = (SELECT version_id FROM active_version);
|
|
880
724
|
END;
|
|
881
725
|
|
|
882
726
|
CREATE TRIGGER IF NOT EXISTS state_delete
|
|
883
727
|
INSTEAD OF DELETE ON state
|
|
884
728
|
BEGIN
|
|
729
|
+
-- Delete from state_all (handles both tracked and untracked entities)
|
|
885
730
|
DELETE FROM state_all
|
|
886
|
-
WHERE
|
|
731
|
+
WHERE
|
|
732
|
+
entity_id = OLD.entity_id
|
|
887
733
|
AND schema_key = OLD.schema_key
|
|
888
734
|
AND file_id = OLD.file_id
|
|
889
|
-
AND version_id =
|
|
735
|
+
AND version_id = (SELECT version_id FROM active_version);
|
|
890
736
|
END;
|
|
891
737
|
`);
|
|
892
738
|
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
739
|
+
/**
|
|
740
|
+
* Insert a log entry directly using insertTransactionState to avoid recursion
|
|
741
|
+
* when logging from within the virtual table methods.
|
|
742
|
+
*/
|
|
743
|
+
function insertVTableLog(args: {
|
|
744
|
+
sqlite: SqliteWasmDatabase;
|
|
745
|
+
db: Kysely<LixInternalDatabaseSchema>;
|
|
746
|
+
key: string;
|
|
747
|
+
message: string;
|
|
748
|
+
level: string;
|
|
749
|
+
}): void {
|
|
750
|
+
if (loggingIsInProgress) {
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
// preventing recursivly logging that we inserted a log entry
|
|
754
|
+
// with this flag
|
|
755
|
+
loggingIsInProgress = true;
|
|
756
|
+
// Check log levels directly from internal state tables to avoid recursion
|
|
757
|
+
const logLevelsResult = executeSync({
|
|
758
|
+
lix: { sqlite: args.sqlite },
|
|
759
|
+
query: args.db
|
|
760
|
+
.selectFrom("internal_resolved_state_all")
|
|
761
|
+
.select(sql`json_extract(snapshot_content, '$.value')`.as("value"))
|
|
762
|
+
.where("schema_key", "=", "lix_key_value")
|
|
763
|
+
.where(
|
|
764
|
+
sql`json_extract(snapshot_content, '$.key')`,
|
|
765
|
+
"=",
|
|
766
|
+
"lix_log_levels"
|
|
767
|
+
)
|
|
768
|
+
.limit(1),
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
const logLevelsValue = logLevelsResult[0]?.value;
|
|
772
|
+
|
|
773
|
+
// Check if the level is allowed
|
|
774
|
+
if (!shouldLog(logLevelsValue as string[] | undefined, args.level)) {
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
// Create log entry data
|
|
779
|
+
const lix = { sqlite: args.sqlite, db: args.db } as any;
|
|
780
|
+
const logData = {
|
|
781
|
+
id: uuidV7({ lix }),
|
|
782
|
+
key: args.key,
|
|
783
|
+
message: args.message,
|
|
784
|
+
level: args.level,
|
|
785
|
+
};
|
|
786
|
+
|
|
787
|
+
// Insert log using insertTransactionState
|
|
788
|
+
insertTransactionState({
|
|
789
|
+
lix,
|
|
790
|
+
data: {
|
|
791
|
+
entity_id: logData.id,
|
|
792
|
+
schema_key: LixLogSchema["x-lix-key"],
|
|
793
|
+
file_id: "lix",
|
|
794
|
+
plugin_key: "lix_own_entity",
|
|
795
|
+
snapshot_content: JSON.stringify(logData),
|
|
796
|
+
schema_version: LixLogSchema["x-lix-version"],
|
|
797
|
+
// Using global and untracked for vtable logs.
|
|
798
|
+
// if we need to track them, we can change this later
|
|
799
|
+
version_id: "global",
|
|
800
|
+
untracked: true,
|
|
801
|
+
},
|
|
802
|
+
});
|
|
803
|
+
loggingIsInProgress = false;
|
|
804
|
+
}
|
|
939
805
|
}
|
|
940
806
|
|
|
941
807
|
export function handleStateDelete(
|
|
942
808
|
sqlite: SqliteWasmDatabase,
|
|
943
|
-
|
|
809
|
+
primaryKey: string,
|
|
944
810
|
db: Kysely<LixInternalDatabaseSchema>
|
|
945
811
|
): void {
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
812
|
+
// Query the row to delete using the resolved state view with Kysely
|
|
813
|
+
const rowToDelete = executeSync({
|
|
814
|
+
lix: { sqlite },
|
|
815
|
+
query: db
|
|
816
|
+
.selectFrom("internal_resolved_state_all")
|
|
817
|
+
.select([
|
|
818
|
+
"entity_id",
|
|
819
|
+
"schema_key",
|
|
820
|
+
"file_id",
|
|
821
|
+
"version_id",
|
|
822
|
+
"plugin_key",
|
|
823
|
+
"snapshot_content",
|
|
824
|
+
"schema_version",
|
|
825
|
+
"untracked",
|
|
826
|
+
"inherited_from_version_id",
|
|
827
|
+
])
|
|
828
|
+
.where("_pk", "=", primaryKey),
|
|
829
|
+
})[0];
|
|
830
|
+
|
|
831
|
+
if (!rowToDelete) {
|
|
832
|
+
throw new Error(`Row not found for primary key: ${primaryKey}`);
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
const entity_id = rowToDelete.entity_id;
|
|
836
|
+
const schema_key = rowToDelete.schema_key;
|
|
837
|
+
const file_id = rowToDelete.file_id;
|
|
838
|
+
const version_id = rowToDelete.version_id;
|
|
839
|
+
const plugin_key = rowToDelete.plugin_key;
|
|
840
|
+
const snapshot_content = rowToDelete.snapshot_content;
|
|
841
|
+
const schema_version = rowToDelete.schema_version;
|
|
842
|
+
const untracked = rowToDelete.untracked;
|
|
843
|
+
|
|
844
|
+
// If entity is untracked, handle differently based on whether it's inherited
|
|
963
845
|
if (untracked) {
|
|
964
|
-
//
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
846
|
+
// Parse the primary key to check if it's inherited untracked (UI tag)
|
|
847
|
+
const parsed = parseStatePk(primaryKey);
|
|
848
|
+
|
|
849
|
+
if (parsed.tag === "UI") {
|
|
850
|
+
// For inherited untracked, create a tombstone to block inheritance
|
|
851
|
+
insertTransactionState({
|
|
852
|
+
lix: { sqlite, db },
|
|
853
|
+
data: {
|
|
854
|
+
entity_id: String(entity_id),
|
|
855
|
+
schema_key: String(schema_key),
|
|
856
|
+
file_id: String(file_id),
|
|
857
|
+
plugin_key: String(plugin_key),
|
|
858
|
+
snapshot_content: null, // Deletion tombstone
|
|
859
|
+
schema_version: String(schema_version),
|
|
860
|
+
version_id: String(version_id),
|
|
861
|
+
untracked: true,
|
|
862
|
+
},
|
|
863
|
+
});
|
|
864
|
+
} else {
|
|
865
|
+
// For direct untracked (U tag), just delete from untracked table
|
|
866
|
+
executeSync({
|
|
867
|
+
lix: { sqlite },
|
|
868
|
+
query: db
|
|
869
|
+
.deleteFrom("internal_state_all_untracked")
|
|
870
|
+
.where("entity_id", "=", String(entity_id))
|
|
871
|
+
.where("schema_key", "=", String(schema_key))
|
|
872
|
+
.where("file_id", "=", String(file_id))
|
|
873
|
+
.where("version_id", "=", String(version_id)),
|
|
874
|
+
});
|
|
875
|
+
}
|
|
975
876
|
return;
|
|
976
877
|
}
|
|
977
878
|
|
|
978
|
-
const
|
|
979
|
-
sql: "SELECT value FROM stored_schema WHERE key = ?",
|
|
980
|
-
bind: [String(schema_key)],
|
|
981
|
-
returnValue: "resultRows",
|
|
982
|
-
});
|
|
983
|
-
|
|
984
|
-
const storedSchema =
|
|
985
|
-
storedSchemaResult && storedSchemaResult.length > 0
|
|
986
|
-
? storedSchemaResult[0]![0]
|
|
987
|
-
: null;
|
|
879
|
+
const storedSchema = getStoredSchema(sqlite, db, schema_key);
|
|
988
880
|
|
|
989
881
|
validateStateMutation({
|
|
990
882
|
lix: { sqlite, db: db as any },
|
|
991
|
-
schema: storedSchema ? JSON.parse(storedSchema
|
|
883
|
+
schema: storedSchema ? JSON.parse(storedSchema) : null,
|
|
992
884
|
snapshot_content: JSON.parse(snapshot_content as string),
|
|
993
885
|
operation: "delete",
|
|
994
886
|
entity_id: String(entity_id),
|
|
995
887
|
version_id: String(version_id),
|
|
996
888
|
});
|
|
997
889
|
|
|
998
|
-
|
|
999
|
-
sqlite,
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
890
|
+
insertTransactionState({
|
|
891
|
+
lix: { sqlite, db },
|
|
892
|
+
data: {
|
|
893
|
+
entity_id: String(entity_id),
|
|
894
|
+
schema_key: String(schema_key),
|
|
895
|
+
file_id: String(file_id),
|
|
896
|
+
plugin_key: String(plugin_key),
|
|
897
|
+
snapshot_content: null, // No snapshot content for DELETE
|
|
898
|
+
schema_version: String(schema_version),
|
|
899
|
+
version_id: String(version_id),
|
|
900
|
+
untracked: false, // tracked entity
|
|
901
|
+
},
|
|
902
|
+
});
|
|
1009
903
|
}
|
|
1010
904
|
|
|
1011
905
|
// Helper functions for the virtual table
|
|
1012
906
|
|
|
907
|
+
function getStoredSchema(
|
|
908
|
+
sqlite: SqliteWasmDatabase,
|
|
909
|
+
db: Kysely<LixInternalDatabaseSchema>,
|
|
910
|
+
schemaKey: any
|
|
911
|
+
): string | null {
|
|
912
|
+
// Query directly from internal_resolved_state_all to avoid vtable recursion
|
|
913
|
+
const result = executeSync({
|
|
914
|
+
lix: { sqlite },
|
|
915
|
+
query: db
|
|
916
|
+
.selectFrom("internal_resolved_state_all")
|
|
917
|
+
.select(sql`json_extract(snapshot_content, '$.value')`.as("value"))
|
|
918
|
+
.where("schema_key", "=", "lix_stored_schema")
|
|
919
|
+
.where(
|
|
920
|
+
sql`json_extract(snapshot_content, '$.key')`,
|
|
921
|
+
"=",
|
|
922
|
+
String(schemaKey)
|
|
923
|
+
)
|
|
924
|
+
.limit(1),
|
|
925
|
+
});
|
|
926
|
+
|
|
927
|
+
return result && result.length > 0 ? result[0]!.value : null;
|
|
928
|
+
}
|
|
929
|
+
|
|
1013
930
|
function getColumnName(columnIndex: number): string {
|
|
1014
931
|
const columns = [
|
|
932
|
+
"_pk",
|
|
1015
933
|
"entity_id",
|
|
1016
934
|
"schema_key",
|
|
1017
935
|
"file_id",
|
|
@@ -1024,210 +942,11 @@ function getColumnName(columnIndex: number): string {
|
|
|
1024
942
|
"inherited_from_version_id",
|
|
1025
943
|
"change_id",
|
|
1026
944
|
"untracked",
|
|
945
|
+
"commit_id",
|
|
1027
946
|
];
|
|
1028
947
|
return columns[columnIndex] || "unknown";
|
|
1029
948
|
}
|
|
1030
949
|
|
|
1031
|
-
function selectStateViaCTE(
|
|
1032
|
-
sqlite: SqliteWasmDatabase,
|
|
1033
|
-
filters: Record<string, string>,
|
|
1034
|
-
includeDeletions: boolean = false
|
|
1035
|
-
): any[] {
|
|
1036
|
-
let sql = `
|
|
1037
|
-
WITH
|
|
1038
|
-
all_changes_with_snapshots AS (
|
|
1039
|
-
-- Include committed changes
|
|
1040
|
-
SELECT ic.id, ic.entity_id, ic.schema_key, ic.file_id, ic.plugin_key,
|
|
1041
|
-
ic.schema_version,
|
|
1042
|
-
CASE
|
|
1043
|
-
WHEN ic.snapshot_id = 'no-content' THEN NULL
|
|
1044
|
-
ELSE json(s.content)
|
|
1045
|
-
END AS snapshot_content
|
|
1046
|
-
FROM internal_change ic
|
|
1047
|
-
LEFT JOIN internal_snapshot s ON ic.snapshot_id = s.id
|
|
1048
|
-
|
|
1049
|
-
UNION ALL
|
|
1050
|
-
|
|
1051
|
-
-- Include changes from current transaction
|
|
1052
|
-
SELECT ict.id, ict.entity_id, ict.schema_key, ict.file_id, ict.plugin_key,
|
|
1053
|
-
ict.schema_version, ict.snapshot_content
|
|
1054
|
-
FROM internal_change_in_transaction ict
|
|
1055
|
-
|
|
1056
|
-
UNION ALL
|
|
1057
|
-
|
|
1058
|
-
-- Include untracked state (pseudo-changes with special change_id)
|
|
1059
|
-
SELECT 'untracked-' || unt.entity_id || '-' || unt.schema_key AS id,
|
|
1060
|
-
unt.entity_id, unt.schema_key, unt.file_id, unt.plugin_key,
|
|
1061
|
-
unt.schema_version, json(unt.snapshot_content) AS snapshot_content
|
|
1062
|
-
FROM internal_state_all_untracked unt
|
|
1063
|
-
),
|
|
1064
|
-
root_cs_of_all_versions AS (
|
|
1065
|
-
SELECT json_extract(v.snapshot_content, '$.change_set_id') AS version_change_set_id,
|
|
1066
|
-
v.entity_id AS version_id
|
|
1067
|
-
FROM all_changes_with_snapshots v
|
|
1068
|
-
WHERE v.schema_key = 'lix_version'
|
|
1069
|
-
),
|
|
1070
|
-
reachable_cs_from_roots(id, version_id) AS (
|
|
1071
|
-
SELECT version_change_set_id, version_id FROM root_cs_of_all_versions
|
|
1072
|
-
UNION
|
|
1073
|
-
SELECT json_extract(e.snapshot_content, '$.parent_id'), r.version_id
|
|
1074
|
-
FROM all_changes_with_snapshots e
|
|
1075
|
-
JOIN reachable_cs_from_roots r ON json_extract(e.snapshot_content, '$.child_id') = r.id
|
|
1076
|
-
WHERE e.schema_key = 'lix_change_set_edge'
|
|
1077
|
-
),
|
|
1078
|
-
cse_in_reachable_cs AS (
|
|
1079
|
-
SELECT json_extract(ias.snapshot_content, '$.entity_id') AS target_entity_id,
|
|
1080
|
-
json_extract(ias.snapshot_content, '$.file_id') AS target_file_id,
|
|
1081
|
-
json_extract(ias.snapshot_content, '$.schema_key') AS target_schema_key,
|
|
1082
|
-
json_extract(ias.snapshot_content, '$.change_id') AS target_change_id,
|
|
1083
|
-
json_extract(ias.snapshot_content, '$.change_set_id') AS cse_origin_change_set_id,
|
|
1084
|
-
rcs.version_id
|
|
1085
|
-
FROM all_changes_with_snapshots ias
|
|
1086
|
-
JOIN reachable_cs_from_roots rcs ON json_extract(ias.snapshot_content, '$.change_set_id') = rcs.id
|
|
1087
|
-
WHERE ias.schema_key = 'lix_change_set_element'
|
|
1088
|
-
),
|
|
1089
|
-
leaf_target_snapshots AS (
|
|
1090
|
-
SELECT target_change.entity_id, target_change.schema_key, target_change.file_id,
|
|
1091
|
-
target_change.plugin_key, target_change.snapshot_content AS snapshot_content,
|
|
1092
|
-
target_change.schema_version, r.version_id, target_change.id as change_id
|
|
1093
|
-
FROM cse_in_reachable_cs r
|
|
1094
|
-
INNER JOIN all_changes_with_snapshots target_change ON r.target_change_id = target_change.id
|
|
1095
|
-
WHERE NOT EXISTS (
|
|
1096
|
-
WITH RECURSIVE descendants_of_current_cs(id) AS (
|
|
1097
|
-
SELECT r.cse_origin_change_set_id
|
|
1098
|
-
UNION
|
|
1099
|
-
SELECT json_extract(edge.snapshot_content, '$.child_id')
|
|
1100
|
-
FROM all_changes_with_snapshots edge
|
|
1101
|
-
JOIN descendants_of_current_cs d ON json_extract(edge.snapshot_content, '$.parent_id') = d.id
|
|
1102
|
-
WHERE edge.schema_key = 'lix_change_set_edge'
|
|
1103
|
-
AND json_extract(edge.snapshot_content, '$.child_id') IN (
|
|
1104
|
-
SELECT id FROM reachable_cs_from_roots WHERE version_id = r.version_id
|
|
1105
|
-
)
|
|
1106
|
-
)
|
|
1107
|
-
SELECT 1 FROM cse_in_reachable_cs newer_r
|
|
1108
|
-
WHERE newer_r.target_entity_id = r.target_entity_id
|
|
1109
|
-
AND newer_r.target_file_id = r.target_file_id
|
|
1110
|
-
AND newer_r.target_schema_key = r.target_schema_key
|
|
1111
|
-
AND newer_r.version_id = r.version_id
|
|
1112
|
-
AND (newer_r.cse_origin_change_set_id != r.cse_origin_change_set_id OR newer_r.target_change_id != r.target_change_id)
|
|
1113
|
-
AND newer_r.cse_origin_change_set_id IN descendants_of_current_cs
|
|
1114
|
-
)
|
|
1115
|
-
),
|
|
1116
|
-
-- Get version inheritance relationships
|
|
1117
|
-
version_inheritance AS (
|
|
1118
|
-
SELECT DISTINCT
|
|
1119
|
-
v.entity_id AS version_id,
|
|
1120
|
-
json_extract(v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
|
|
1121
|
-
FROM all_changes_with_snapshots v
|
|
1122
|
-
WHERE v.schema_key = 'lix_version'
|
|
1123
|
-
),
|
|
1124
|
-
-- Combine direct entities with inherited entities
|
|
1125
|
-
all_entities AS (
|
|
1126
|
-
-- Direct entities from leaf_target_snapshots
|
|
1127
|
-
SELECT
|
|
1128
|
-
entity_id, schema_key, file_id, plugin_key, snapshot_content, schema_version,
|
|
1129
|
-
version_id, version_id as visible_in_version, NULL as inherited_from_version_id, change_id
|
|
1130
|
-
FROM leaf_target_snapshots
|
|
1131
|
-
|
|
1132
|
-
UNION ALL
|
|
1133
|
-
|
|
1134
|
-
-- Inherited entities from parent versions
|
|
1135
|
-
SELECT
|
|
1136
|
-
ls.entity_id, ls.schema_key, ls.file_id, ls.plugin_key, ls.snapshot_content, ls.schema_version,
|
|
1137
|
-
vi.version_id, -- Use child version_id for testing
|
|
1138
|
-
vi.version_id as visible_in_version, -- Make visible in child version
|
|
1139
|
-
vi.parent_version_id as inherited_from_version_id, ls.change_id
|
|
1140
|
-
FROM version_inheritance vi
|
|
1141
|
-
JOIN leaf_target_snapshots ls ON ls.version_id = vi.parent_version_id
|
|
1142
|
-
WHERE vi.parent_version_id IS NOT NULL
|
|
1143
|
-
AND ls.snapshot_content IS NOT NULL -- Don't inherit deleted entities
|
|
1144
|
-
-- Don't inherit if child already has this entity (including deletion markers)
|
|
1145
|
-
-- Use a more comprehensive check that includes both leaf snapshots and direct inheritance blocking
|
|
1146
|
-
AND NOT EXISTS (
|
|
1147
|
-
-- Check if there's ANY change for this entity in the child version
|
|
1148
|
-
-- This includes creation, update, AND deletion changes
|
|
1149
|
-
SELECT 1 FROM leaf_target_snapshots child_ls
|
|
1150
|
-
WHERE child_ls.version_id = vi.version_id
|
|
1151
|
-
AND child_ls.entity_id = ls.entity_id
|
|
1152
|
-
AND child_ls.schema_key = ls.schema_key
|
|
1153
|
-
AND child_ls.file_id = ls.file_id
|
|
1154
|
-
)
|
|
1155
|
-
-- Additional safeguard: check that no change set element exists for this entity in child
|
|
1156
|
-
AND NOT EXISTS (
|
|
1157
|
-
SELECT 1 FROM cse_in_reachable_cs cse
|
|
1158
|
-
JOIN all_changes_with_snapshots target_change ON cse.target_change_id = target_change.id
|
|
1159
|
-
WHERE cse.version_id = vi.version_id
|
|
1160
|
-
AND target_change.entity_id = ls.entity_id
|
|
1161
|
-
AND target_change.schema_key = ls.schema_key
|
|
1162
|
-
AND target_change.file_id = ls.file_id
|
|
1163
|
-
)
|
|
1164
|
-
),
|
|
1165
|
-
-- Prioritize direct entities over inherited ones, then deduplicate
|
|
1166
|
-
prioritized_entities AS (
|
|
1167
|
-
SELECT *,
|
|
1168
|
-
-- Priority: direct entities (inherited_from_version_id IS NULL) over inherited
|
|
1169
|
-
CASE WHEN inherited_from_version_id IS NULL THEN 1 ELSE 2 END as priority,
|
|
1170
|
-
-- Row number for deduplication within same priority
|
|
1171
|
-
ROW_NUMBER() OVER (
|
|
1172
|
-
PARTITION BY entity_id, schema_key, file_id, visible_in_version
|
|
1173
|
-
ORDER BY CASE WHEN inherited_from_version_id IS NULL THEN 1 ELSE 2 END,
|
|
1174
|
-
-- Among inherited entities, prefer those with earlier timestamps
|
|
1175
|
-
version_id
|
|
1176
|
-
) as rn
|
|
1177
|
-
FROM all_entities ae
|
|
1178
|
-
-- Don't filter out entities with null snapshot_content here
|
|
1179
|
-
-- We need deletion markers to be included for proper inheritance blocking
|
|
1180
|
-
)
|
|
1181
|
-
SELECT DISTINCT
|
|
1182
|
-
pe.entity_id,
|
|
1183
|
-
pe.schema_key,
|
|
1184
|
-
pe.file_id,
|
|
1185
|
-
pe.plugin_key,
|
|
1186
|
-
pe.snapshot_content,
|
|
1187
|
-
pe.schema_version,
|
|
1188
|
-
pe.version_id,
|
|
1189
|
-
(SELECT MIN(ic.created_at) FROM internal_change ic
|
|
1190
|
-
WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id) AS created_at,
|
|
1191
|
-
COALESCE(
|
|
1192
|
-
(SELECT MAX(ic.created_at) FROM internal_change ic
|
|
1193
|
-
WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id
|
|
1194
|
-
AND ic.id IN (SELECT cse.target_change_id FROM cse_in_reachable_cs cse WHERE cse.version_id = pe.version_id)),
|
|
1195
|
-
(SELECT MIN(ic.created_at) FROM internal_change ic
|
|
1196
|
-
WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id)
|
|
1197
|
-
) AS updated_at,
|
|
1198
|
-
pe.inherited_from_version_id,
|
|
1199
|
-
pe.change_id
|
|
1200
|
-
FROM prioritized_entities pe
|
|
1201
|
-
WHERE pe.rn = 1
|
|
1202
|
-
${includeDeletions ? "" : "-- Filter out deletion markers from final results\n AND pe.snapshot_content IS NOT NULL"}
|
|
1203
|
-
`;
|
|
1204
|
-
|
|
1205
|
-
const bindings: string[] = [];
|
|
1206
|
-
const conditions: string[] = [];
|
|
1207
|
-
|
|
1208
|
-
Object.entries(filters).forEach(([key, value]) => {
|
|
1209
|
-
if (key === "version_id") {
|
|
1210
|
-
// For version_id filter, use visible_in_version
|
|
1211
|
-
conditions.push(`ae.visible_in_version = ?`);
|
|
1212
|
-
} else {
|
|
1213
|
-
conditions.push(`ae.${key} = ?`);
|
|
1214
|
-
}
|
|
1215
|
-
bindings.push(value);
|
|
1216
|
-
});
|
|
1217
|
-
|
|
1218
|
-
if (conditions.length > 0) {
|
|
1219
|
-
sql += " AND " + conditions.join(" AND ");
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
|
-
const result = sqlite.exec({
|
|
1223
|
-
sql,
|
|
1224
|
-
bind: bindings,
|
|
1225
|
-
returnValue: "resultRows",
|
|
1226
|
-
});
|
|
1227
|
-
|
|
1228
|
-
return result || [];
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1231
950
|
export type StateView = Omit<StateAllView, "version_id">;
|
|
1232
951
|
|
|
1233
952
|
export type StateAllView = {
|
|
@@ -1243,22 +962,7 @@ export type StateAllView = {
|
|
|
1243
962
|
inherited_from_version_id: string | null;
|
|
1244
963
|
change_id: Generated<string>;
|
|
1245
964
|
untracked: Generated<boolean>;
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
// Cache table type (internal table for state materialization)
|
|
1249
|
-
export type InternalStateCacheTable = {
|
|
1250
|
-
entity_id: string;
|
|
1251
|
-
schema_key: string;
|
|
1252
|
-
file_id: string;
|
|
1253
|
-
version_id: string;
|
|
1254
|
-
plugin_key: string;
|
|
1255
|
-
snapshot_content: string | null; // JSON string, NULL for deletions
|
|
1256
|
-
schema_version: string;
|
|
1257
|
-
created_at: string;
|
|
1258
|
-
updated_at: string;
|
|
1259
|
-
inherited_from_version_id: string | null;
|
|
1260
|
-
inheritance_delete_marker: number; // 1 for copy-on-write deletion markers, 0 otherwise
|
|
1261
|
-
change_id: string;
|
|
965
|
+
commit_id: Generated<string>;
|
|
1262
966
|
};
|
|
1263
967
|
|
|
1264
968
|
// Kysely operation types
|
|
@@ -1266,9 +970,9 @@ export type StateRow = Selectable<StateView>;
|
|
|
1266
970
|
export type NewStateRow = Insertable<StateView>;
|
|
1267
971
|
export type StateRowUpdate = Updateable<StateView>;
|
|
1268
972
|
|
|
1269
|
-
export type
|
|
1270
|
-
export type
|
|
1271
|
-
export type
|
|
973
|
+
export type StateAllRow = Selectable<StateAllView>;
|
|
974
|
+
export type NewStateAllRow = Insertable<StateAllView>;
|
|
975
|
+
export type StateAllRowUpdate = Updateable<StateAllView>;
|
|
1272
976
|
|
|
1273
977
|
// Types for the internal_change TABLE
|
|
1274
978
|
export type InternalChangeInTransaction =
|