# 2026-04-23 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # Tests for omitting the update of an index when the new value is the # same as the old. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix expridx2 # This test requires wal mode, but the journaltest permutation installs # a custom VFS that does not support wal mode. if {[permutation]=="journaltest"} { finish_test return } do_execsql_test 1.0 { PRAGMA journal_mode = wal; CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT); INSERT INTO t1 VALUES(1, '{a: 10, b: 20, c: 30}'); INSERT INTO t1 VALUES(2, '{a: 11, b: 21, c: 31}'); INSERT INTO t1 VALUES(3, '{a: 12, b: 22, c: 32}'); INSERT INTO t1 VALUES(4, '{a: 13, b: 23, c: 33}'); CREATE INDEX t1a ON t1( (b->>'a') ); CREATE INDEX t1b ON t1( (b->>'b') ); CREATE INDEX t1c ON t1( (b->>'c') ); CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); CREATE INDEX t2b ON t2( b ); INSERT INTO t2 VALUES(1, 1, 1); INSERT INTO t2 VALUES(2, 2, 2); INSERT INTO t2 VALUES(3, 3, 3); INSERT INTO t2 VALUES(4, 4, 4); } {wal} proc nWrite {sql} { sqlite3_db_status db CACHE_WRITE 1 execsql $sql lindex [sqlite3_db_status db CACHE_WRITE 0] 1 } do_test 1.1 { nWrite { UPDATE t1 SET b = json_set(b, '$.a', b->>'a' + 1) } } {2} do_test 1.2 { nWrite { UPDATE t1 SET b = json_set( json_set(b, '$.a', b->>'a' + 1), '$.b', b->>'b' + 1 ); } } {3} do_test 1.3 { nWrite { UPDATE t1 SET b = '{a:1, b:2, c:3}' WHERE rowid=1; } } {4} integrity_check 1.4 do_test 1.5 { nWrite { UPDATE t2 SET b = b+1, c=c+1 } } {2} do_test 1.6 { nWrite { UPDATE t2 SET b = b, c=c+1 } } {2} do_test 1.7 { nWrite { UPDATE t2 SET c=c+1 } } {1} finish_test