| # 2018-07-18 | |
| # | |
| # 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. | |
| # | |
| #*********************************************************************** | |
| # | |
| # Test case for SQLITE_FCNTL_DATA_VERSION | |
| # | |
| set testdir [file dirname $argv0] | |
| source $testdir/tester.tcl | |
| # Construct a database and get its initial data version | |
| sqlite3 db test.db | |
| do_test dataversion1-100 { | |
| db eval { | |
| CREATE TABLE t1(x); | |
| INSERT INTO t1(x) VALUES(99); | |
| SELECT * FROM t1; | |
| } | |
| } {99} | |
| set dv1 [file_control_data_version db main] | |
| # The data version does not change by ATTACH or by changes to | |
| # other schemas within the same connection. | |
| # | |
| do_test dataversion1-101 { | |
| db eval { | |
| ATTACH ':memory:' AS aux1; | |
| CREATE TABLE aux1.t2(y); | |
| CREATE TEMP TABLE t3(z); | |
| } | |
| file_control_data_version db main | |
| } $dv1 | |
| # The data version does change when SQL modifies the table | |
| do_test dataversion1-110 { | |
| db eval { | |
| UPDATE t1 SET x=x+1; | |
| } | |
| set dv2 [file_control_data_version db] | |
| expr {$::dv1==$dv2} | |
| } {0} | |
| # But the data version is constant if there are changes to other | |
| # schemas | |
| set dv1 [file_control_data_version db main] | |
| do_test dataversion1-120 { | |
| db eval { | |
| UPDATE t2 SET y=y+1; | |
| } | |
| file_control_data_version db | |
| } $dv1 | |
| # Changes to the database via another connection are not detected | |
| # until there is a read transaction. | |
| # | |
| sqlite3 db2 test.db | |
| do_test dataversion1-130 { | |
| db2 eval { | |
| SELECT * FROM t1 | |
| } | |
| } {100} | |
| do_test dataversion1-131 { | |
| file_control_data_version db | |
| } $dv1 | |
| do_test dataversion1-132 { | |
| db2 eval { | |
| UPDATE t1 SET x=x+1; | |
| } | |
| set dv2 [file_control_data_version db] | |
| expr {$::dv1==$dv2} | |
| } {1} | |
| do_test dataversion1-133 { | |
| db eval {SELECT * FROM t1} | |
| set dv2 [file_control_data_version db] | |
| expr {$::dv1==$dv2} | |
| } {0} | |
| finish_test |