/ Artifact Content
Login

Artifact 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68ccf2a7bb8:


# 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