# 2021 June 22 # # 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 the sqlite3_changes() and sqlite3_total_changes() APIs. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix changes # To test that the change-counters do not suffer from 32-bit signed integer # rollover, add the following line to the array of test cases below. The # test will take will over an hour to run. # # 7 (1<<31)+10 "" # foreach {tn nRow wor} { 1 50 "" 2 50 "WITHOUT ROWID" 3 5000 "" 4 5000 "WITHOUT ROWID" 5 50000 "" 6 50000 "WITHOUT ROWID" } { reset_db set nBig [expr $nRow] do_execsql_test 1.$tn.0 " PRAGMA journal_mode = off; CREATE TABLE t1(x INTEGER PRIMARY KEY) $wor; " {off} do_execsql_test 1.$tn.1 { WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i < $nBig ) INSERT INTO t1 SELECT i FROM s; } do_test 1.$tn.2 { db changes } [expr $nBig] do_test 1.$tn.3 { db total_changes } [expr $nBig] do_execsql_test 1.$tn.4 { INSERT INTO t1 VALUES(-1) } do_test 1.$tn.5 { db changes } [expr 1] do_test 1.$tn.6 { db total_changes } [expr {$nBig+1}] do_execsql_test 1.$tn.7a { SELECT count(*) FROM t1 } [expr {$nBig+1}] do_execsql_test 1.$tn.7 { DELETE FROM t1 } do_test 1.$tn.8 { db changes } [expr {$nBig+1}] do_test 1.$tn.9 { db total_changes } [expr {2*($nBig+1)}] } finish_test