WIP: fix(database): make v2->v3 chatlog migration deterministic and FK-safe #129
Draft
jabber.developer2
wants to merge 1 commits from
fix/issue-128-migrate-v3-dedup into master
pull from: fix/issue-128-migrate-v3-dedup
merge into: devs:master
devs:master
devs:feat/ai-api-type
devs:fix/editor-terminal-size
devs:ci/docker-hub-publishing
devs:feat/disco-ac
devs:feat/privacy-enhancements
devs:fix/clientid-regression
devs:fix/ai-chat-completions-followup
devs:feat/ai-custom
devs:fix/unencrypted-send
devs:rollback/pre-upstream-merge
devs:fix/autoping-warning-null-domain
devs:fix/pad-dead-space-reclaim
devs:feat/autoping-warning
devs:chore/untrack-gitversion
devs:fix/multiline-pad-clip
devs:fix/issue-112-followups
devs:fix/delay-timestamp-validation
devs:ref/light-cleanup
devs:fix/history-scroll-pad-redraw-storm
devs:fix/plugin-post-display-incoming-only
devs:merge/upstream-full
devs:merge-improve
devs:chore/remove-chatlog-stage-1
devs:fix/ai-json-encoding
devs:feat/no-db-backlog-114
devs:fix/scroll-non-chat-windows
devs:fix/paged-non-chat-windows
devs:fix/ai-leaks
devs:feat/ai
devs:fix/ai-followups
devs:test/ai-coverage-unit-only
devs:test/ai-coverage
devs:refactor/scroll-mechanism
devs:fix/verify-per-contact-context
devs:feat/no-db-mode
devs:feat/ai-json
devs:feat/pikaur-parity-arch
devs:fix-pikaur-build
devs:feat/upstream-sync
devs:feat/functest-speedup
devs:fix/cwe-134-format-string-audit
devs:ci/separate-build-step
devs:test/autoping-functional-tests
devs:test/db-functional-tests
devs:fix/arch-build
devs:fix/xep-0030-disco-items-error-handling
devs:fix/xep-0030-empty-disco-items
devs:playground/fix/src_refactoring
devs:tests/disco
devs:fix/test-CI-stability
devs:feat/parallel-tests-clean
devs:feat/parallel-functional-tests
devs:fix/functional_tests_v2
devs:fix/functional_tests
devs:fix/connect_max_args
devs:feat/extended_debug_info
devs:playground/fix/scroll-stuck
devs:build/multicore
devs:build/reenable-fedora
devs:build/autoupdate
No Reviewers
Labels
Clear labels
Compat/Breaking
Breaking change that won't be backward compatible
Kind/Bug
Something is not working
Kind/Documentation
Documentation changes
Kind/Enhancement
Improve existing functionality
Kind/Feature
New functionality
Kind/Security
This is security issue
Kind/Testing
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Low
4
The priority is low
Priority
Medium
3
The priority is medium
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: devs/cproof#129
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "fix/issue-128-migrate-v3-dedup"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #128.
_migrate_to_v3deduped duplicatearchive_idrows via a bare-columnGROUP BY(arbitrary survivor — in practice the older row, dropping the latest) and copied rows withSELECT *(positional column binding).This PR:
MAX(id)perarchive_idgroup ("latest insert wins") instead ofGROUP BY's implementation-defined pick;replaces_db_id/replaced_by_db_idpointing at dropped rows, so no dangling XEP-0308 (LMC) links survive (the "Broken LMC reference" conditionverify_integrityflags);SELECT *, with a schema-side note to keep the two in sync.Only affects users upgrading from a v2 DB — already-v3 databases and live inserts are unchanged.
Verified with a local
sqlite3migration test (deterministic survivor, FK sweep, preserved valid FKs); kept local / out of CI as a one-shot migration check._migrate_to_v3 deduplicated duplicate archive_id rows with a bare-column GROUP BY, which lets SQLite keep an arbitrary row per group (in practice the older row, dropping the latest), and copied rows with SELECT *, which relies on positional column matching between the v2 and v3 schemas. - Keep MAX(id) per archive_id group ("latest insert wins") instead of GROUP BY's implementation-defined pick. - Sweep replaces_db_id / replaced_by_db_id after dedupe, NULLing references to dropped rows so the migrated table carries no dangling XEP-0308 (LMC) links (the "Broken LMC reference" condition verify_integrity flags). - List columns explicitly instead of SELECT * so the copy cannot mis-bind, and note at the schema that column changes must be mirrored here. Refs #128fix(database): make v2->v3 chatlog migration deterministic and FK-safeto WIP: fix(database): make v2->v3 chatlog migration deterministic and FK-safed9f1c25c7cto25e9bc6e93View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.