Previously, the index & offsets were encoded as 8-character hex strings, however, this limits the maximum value to a `uint32`. This is normally not an issue, however, indices could go over the maximum value of 4 billion over time and the offset could exceed this value for an especially large WAL update. For safety, these encodings have been updated to 16-character hex encodings.
37 lines
836 B
Plaintext
37 lines
836 B
Plaintext
To reproduce this testdata, run sqlite3 and execute:
|
|
|
|
PRAGMA journal_mode = WAL;
|
|
CREATE TABLE t (x);
|
|
INSERT INTO t (x) VALUES (1);
|
|
INSERT INTO t (x) VALUES (2);
|
|
|
|
sl3 split -o generations/0000000000000000/wal/0000000000000000 db-wal
|
|
cp db generations/0000000000000000/snapshots/0000000000000000.snapshot
|
|
lz4 -c --rm generations/0000000000000000/snapshots/0000000000000000.snapshot
|
|
|
|
|
|
Then execute:
|
|
|
|
PRAGMA wal_checkpoint(TRUNCATE);
|
|
INSERT INTO t (x) VALUES (3);
|
|
|
|
sl3 split -o generations/0000000000000000/wal/0000000000000001 db-wal
|
|
|
|
|
|
Then execute:
|
|
|
|
PRAGMA wal_checkpoint(TRUNCATE);
|
|
INSERT INTO t (x) VALUES (4);
|
|
INSERT INTO t (x) VALUES (5);
|
|
|
|
sl3 split -o generations/0000000000000000/wal/0000000000000002 db-wal
|
|
|
|
|
|
Finally, obtain the final snapshot:
|
|
|
|
PRAGMA wal_checkpoint(TRUNCATE);
|
|
|
|
cp db 0000000000000002.db
|
|
rm db*
|
|
|