| # 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 |
| |
| 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 |
| |