1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

When possible, avoid taking wal file read-lock 0 in sqlite3_snapshot_get().

FossilOrigin-Name: 34b6ac3d76dbc6819778ec2a0f81cbcdcc0cd1a6303381d97f1c479e4ecdd132
This commit is contained in:
dan
2024-09-26 18:02:17 +00:00
parent 8cd30e3f5b
commit d0720eee5e
5 changed files with 72 additions and 13 deletions

View File

@ -96,4 +96,43 @@ do_test 1.8 {
list [catch { sqlite3_snapshot_open_blob db3 main $snap } msg] $msg
} {1 SQLITE_ERROR_SNAPSHOT}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 2.0 {
PRAGMA journal_mode = wal;
CREATE TABLE t1(a, b);
INSERT INTO t1 VALUES(1, 2);
INSERT INTO t1 VALUES(3, 4);
} {wal}
sqlite3 db2 test.db
sqlite3 db3 test.db
do_execsql_test -db db2 2.0.1 {
SELECT * FROM t1
} {1 2 3 4}
do_execsql_test -db db3 2.0.2 {
SELECT * FROM t1
} {1 2 3 4}
do_execsql_test -db db2 2.2 {
PRAGMA wal_checkpoint;
} {0 4 4}
do_test 2.1 {
db eval { BEGIN }
set snap [sqlite3_snapshot_get db main]
set {} {}
} {}
do_execsql_test -db db2 2.3 {
INSERT INTO t1 VALUES(5, 6);
} {}
do_test 2.2 {
execsql { BEGIN } db3
sqlite3_snapshot_open db3 main $snap
} {}
sqlite3_snapshot_free $snap
finish_test