# 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


