1*ea99a31cSdrh# 2018-07-18 2*ea99a31cSdrh# 3*ea99a31cSdrh# The author disclaims copyright to this source code. In place of 4*ea99a31cSdrh# a legal notice, here is a blessing: 5*ea99a31cSdrh# 6*ea99a31cSdrh# May you do good and not evil. 7*ea99a31cSdrh# May you find forgiveness for yourself and forgive others. 8*ea99a31cSdrh# May you share freely, never taking more than you give. 9*ea99a31cSdrh# 10*ea99a31cSdrh#*********************************************************************** 11*ea99a31cSdrh# 12*ea99a31cSdrh# Test case for SQLITE_FCNTL_DATA_VERSION 13*ea99a31cSdrh# 14*ea99a31cSdrh 15*ea99a31cSdrhset testdir [file dirname $argv0] 16*ea99a31cSdrhsource $testdir/tester.tcl 17*ea99a31cSdrh 18*ea99a31cSdrh# Construct a database and get its initial data version 19*ea99a31cSdrhsqlite3 db test.db 20*ea99a31cSdrhdo_test dataversion1-100 { 21*ea99a31cSdrh db eval { 22*ea99a31cSdrh CREATE TABLE t1(x); 23*ea99a31cSdrh INSERT INTO t1(x) VALUES(99); 24*ea99a31cSdrh SELECT * FROM t1; 25*ea99a31cSdrh } 26*ea99a31cSdrh} {99} 27*ea99a31cSdrhset dv1 [file_control_data_version db main] 28*ea99a31cSdrh 29*ea99a31cSdrh# The data version does not change by ATTACH or by changes to 30*ea99a31cSdrh# other schemas within the same connection. 31*ea99a31cSdrh# 32*ea99a31cSdrhdo_test dataversion1-101 { 33*ea99a31cSdrh db eval { 34*ea99a31cSdrh ATTACH ':memory:' AS aux1; 35*ea99a31cSdrh CREATE TABLE aux1.t2(y); 36*ea99a31cSdrh CREATE TEMP TABLE t3(z); 37*ea99a31cSdrh } 38*ea99a31cSdrh file_control_data_version db main 39*ea99a31cSdrh} $dv1 40*ea99a31cSdrh 41*ea99a31cSdrh# The data version does change when SQL modifies the table 42*ea99a31cSdrhdo_test dataversion1-110 { 43*ea99a31cSdrh db eval { 44*ea99a31cSdrh UPDATE t1 SET x=x+1; 45*ea99a31cSdrh } 46*ea99a31cSdrh set dv2 [file_control_data_version db] 47*ea99a31cSdrh expr {$::dv1==$dv2} 48*ea99a31cSdrh} {0} 49*ea99a31cSdrh 50*ea99a31cSdrh# But the data version is constant if there are changes to other 51*ea99a31cSdrh# schemas 52*ea99a31cSdrhset dv1 [file_control_data_version db main] 53*ea99a31cSdrhdo_test dataversion1-120 { 54*ea99a31cSdrh db eval { 55*ea99a31cSdrh UPDATE t2 SET y=y+1; 56*ea99a31cSdrh } 57*ea99a31cSdrh file_control_data_version db 58*ea99a31cSdrh} $dv1 59*ea99a31cSdrh 60*ea99a31cSdrh# Changes to the database via another connection are not detected 61*ea99a31cSdrh# until there is a read transaction. 62*ea99a31cSdrh# 63*ea99a31cSdrhsqlite3 db2 test.db 64*ea99a31cSdrhdo_test dataversion1-130 { 65*ea99a31cSdrh db2 eval { 66*ea99a31cSdrh SELECT * FROM t1 67*ea99a31cSdrh } 68*ea99a31cSdrh} {100} 69*ea99a31cSdrhdo_test dataversion1-131 { 70*ea99a31cSdrh file_control_data_version db 71*ea99a31cSdrh} $dv1 72*ea99a31cSdrhdo_test dataversion1-132 { 73*ea99a31cSdrh db2 eval { 74*ea99a31cSdrh UPDATE t1 SET x=x+1; 75*ea99a31cSdrh } 76*ea99a31cSdrh set dv2 [file_control_data_version db] 77*ea99a31cSdrh expr {$::dv1==$dv2} 78*ea99a31cSdrh} {1} 79*ea99a31cSdrhdo_test dataversion1-133 { 80*ea99a31cSdrh db eval {SELECT * FROM t1} 81*ea99a31cSdrh set dv2 [file_control_data_version db] 82*ea99a31cSdrh expr {$::dv1==$dv2} 83*ea99a31cSdrh} {0} 84*ea99a31cSdrh 85*ea99a31cSdrh 86*ea99a31cSdrh 87*ea99a31cSdrhfinish_test 88