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