1020c4f38Sdan# 2021 June 22 2020c4f38Sdan# 3020c4f38Sdan# The author disclaims copyright to this source code. In place of 4020c4f38Sdan# a legal notice, here is a blessing: 5020c4f38Sdan# 6020c4f38Sdan# May you do good and not evil. 7020c4f38Sdan# May you find forgiveness for yourself and forgive others. 8020c4f38Sdan# May you share freely, never taking more than you give. 9020c4f38Sdan# 10020c4f38Sdan#*********************************************************************** 11020c4f38Sdan# 12020c4f38Sdan# Tests for the sqlite3_changes() and sqlite3_total_changes() APIs. 13020c4f38Sdan# 14020c4f38Sdan 15020c4f38Sdanset testdir [file dirname $argv0] 16020c4f38Sdansource $testdir/tester.tcl 17020c4f38Sdanset testprefix changes 18020c4f38Sdan 19*2c718873Sdan# To test that the change-counters do not suffer from 32-bit signed integer 20*2c718873Sdan# rollover, add the following line to the array of test cases below. The 21*2c718873Sdan# test will take will over an hour to run. 22*2c718873Sdan# 23*2c718873Sdan# 7 (1<<31)+10 "" 24*2c718873Sdan# 25020c4f38Sdan 26020c4f38Sdanforeach {tn nRow wor} { 27020c4f38Sdan 1 50 "" 28020c4f38Sdan 2 50 "WITHOUT ROWID" 29020c4f38Sdan 30020c4f38Sdan 3 5000 "" 31020c4f38Sdan 4 5000 "WITHOUT ROWID" 32020c4f38Sdan 33020c4f38Sdan 5 50000 "" 34020c4f38Sdan 6 50000 "WITHOUT ROWID" 35020c4f38Sdan} { 36020c4f38Sdan reset_db 37020c4f38Sdan set nBig [expr $nRow] 38020c4f38Sdan 39020c4f38Sdan do_execsql_test 1.$tn.0 " 40020c4f38Sdan PRAGMA journal_mode = off; 41020c4f38Sdan CREATE TABLE t1(x INTEGER PRIMARY KEY) $wor; 42020c4f38Sdan " {off} 43020c4f38Sdan 44020c4f38Sdan do_execsql_test 1.$tn.1 { 45020c4f38Sdan WITH s(i) AS ( 46020c4f38Sdan SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i < $nBig 47020c4f38Sdan ) 48020c4f38Sdan INSERT INTO t1 SELECT i FROM s; 49020c4f38Sdan } 50020c4f38Sdan 51020c4f38Sdan do_test 1.$tn.2 { 52020c4f38Sdan db changes 53020c4f38Sdan } [expr $nBig] 54020c4f38Sdan 55020c4f38Sdan do_test 1.$tn.3 { 56020c4f38Sdan db total_changes 57020c4f38Sdan } [expr $nBig] 58020c4f38Sdan 59020c4f38Sdan do_execsql_test 1.$tn.4 { 60020c4f38Sdan INSERT INTO t1 VALUES(-1) 61020c4f38Sdan } 62020c4f38Sdan 63020c4f38Sdan do_test 1.$tn.5 { 64020c4f38Sdan db changes 65020c4f38Sdan } [expr 1] 66020c4f38Sdan 67020c4f38Sdan do_test 1.$tn.6 { 68020c4f38Sdan db total_changes 69020c4f38Sdan } [expr {$nBig+1}] 70020c4f38Sdan 71020c4f38Sdan do_execsql_test 1.$tn.7a { 72020c4f38Sdan SELECT count(*) FROM t1 73020c4f38Sdan } [expr {$nBig+1}] 74020c4f38Sdan 75020c4f38Sdan do_execsql_test 1.$tn.7 { 76020c4f38Sdan DELETE FROM t1 77020c4f38Sdan } 78020c4f38Sdan 79020c4f38Sdan do_test 1.$tn.8 { 80020c4f38Sdan db changes 81020c4f38Sdan } [expr {$nBig+1}] 82020c4f38Sdan 83020c4f38Sdan do_test 1.$tn.9 { 84020c4f38Sdan db total_changes 85020c4f38Sdan } [expr {2*($nBig+1)}] 86020c4f38Sdan} 87020c4f38Sdan 88020c4f38Sdanfinish_test 89020c4f38Sdan 90020c4f38Sdan 91