xref: /sqlite-3.40.0/test/dataversion1.test (revision ea99a31c)
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