xref: /sqlite-3.40.0/test/changes.test (revision 2c718873)
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