feat(db): backfill prefix snapshots and switch read path
Backfill миграция; чтение префиксов через snapshot; запись без дублирования rows. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
DELETE FROM prefix_snapshot_row;
|
||||
UPDATE config_revision SET prefix_snapshot_id = NULL;
|
||||
DELETE FROM prefix_snapshot;
|
||||
@@ -0,0 +1,30 @@
|
||||
-- SQLite backfill: one snapshot per revision with materialized prefixes.
|
||||
|
||||
INSERT INTO prefix_snapshot (id, content_hash)
|
||||
SELECT lower(hex(randomblob(16))),
|
||||
substr(replace(cr.id, '-', '') || replace(cr.id, '-', ''), 1, 64)
|
||||
FROM config_revision cr
|
||||
WHERE cr.prefix_snapshot_id IS NULL
|
||||
AND EXISTS (SELECT 1 FROM revision_materialized_prefix rmp WHERE rmp.revision_id = cr.id);
|
||||
|
||||
UPDATE config_revision
|
||||
SET prefix_snapshot_id = (
|
||||
SELECT ps.id FROM prefix_snapshot ps
|
||||
WHERE ps.content_hash = substr(replace(config_revision.id, '-', '') || replace(config_revision.id, '-', ''), 1, 64)
|
||||
)
|
||||
WHERE prefix_snapshot_id IS NULL
|
||||
AND EXISTS (SELECT 1 FROM revision_materialized_prefix rmp WHERE rmp.revision_id = config_revision.id);
|
||||
|
||||
INSERT INTO prefix_snapshot_row (snapshot_id, ord, prefix, community_id, source)
|
||||
SELECT cr.prefix_snapshot_id,
|
||||
(SELECT COUNT(*) FROM revision_materialized_prefix r2
|
||||
WHERE r2.revision_id = cr.id AND r2.id <= rmp.id) - 1,
|
||||
rmp.prefix,
|
||||
rmp.community_id,
|
||||
rmp.source
|
||||
FROM config_revision cr
|
||||
JOIN revision_materialized_prefix rmp ON rmp.revision_id = cr.id
|
||||
WHERE cr.prefix_snapshot_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM prefix_snapshot_row psr WHERE psr.snapshot_id = cr.prefix_snapshot_id
|
||||
);
|
||||
Reference in New Issue
Block a user