xref: /sqlite-3.40.0/ext/session/sessionwor.test (revision fadc0e34)
1cb9a3643Sdan# 2017 Jan 31
2cb9a3643Sdan#
3cb9a3643Sdan# The author disclaims copyright to this source code.  In place of
4cb9a3643Sdan# a legal notice, here is a blessing:
5cb9a3643Sdan#
6cb9a3643Sdan#    May you do good and not evil.
7cb9a3643Sdan#    May you find forgiveness for yourself and forgive others.
8cb9a3643Sdan#    May you share freely, never taking more than you give.
9cb9a3643Sdan#
10cb9a3643Sdan#***********************************************************************
11cb9a3643Sdan#
12cb9a3643Sdan# The focus of this file is testing the session module. Specifically,
13cb9a3643Sdan# testing support for WITHOUT ROWID tables.
14cb9a3643Sdan#
15cb9a3643Sdan
16cb9a3643Sdanif {![info exists testdir]} {
17cb9a3643Sdan  set testdir [file join [file dirname [info script]] .. .. test]
18cb9a3643Sdan}
19cb9a3643Sdansource [file join [file dirname [info script]] session_common.tcl]
20cb9a3643Sdansource $testdir/tester.tcl
21cb9a3643Sdanifcapable !session {finish_test; return}
22cb9a3643Sdan
23cb9a3643Sdanset testprefix sessionwor
24cb9a3643Sdan
25cb9a3643Sdanproc test_reset {} {
26cb9a3643Sdan  catch { db close }
27cb9a3643Sdan  catch { db2 close }
28cb9a3643Sdan  forcedelete test.db test.db2
29cb9a3643Sdan  sqlite3 db test.db
30cb9a3643Sdan  sqlite3 db2 test.db2
31cb9a3643Sdan}
32cb9a3643Sdan
33418454c6Sdanforeach {tn wo} {
34418454c6Sdan  1 ""
35418454c6Sdan  2 "WITHOUT ROWID"
36418454c6Sdan} {
37418454c6Sdan  reset_db
38cb9a3643Sdan
39418454c6Sdan  do_execsql_test 1.$tn.0 "CREATE TABLE t1(a PRIMARY KEY, b) $wo ;"
40cb9a3643Sdan
41418454c6Sdan  do_iterator_test 1.$tn.1 t1 {
42cb9a3643Sdan    INSERT INTO t1 VALUES('one', 'two');
43cb9a3643Sdan  } {
44cb9a3643Sdan    {INSERT t1 0 X. {} {t one t two}}
45cb9a3643Sdan  }
46cb9a3643Sdan
47418454c6Sdan  do_iterator_test 1.$tn.2 t1 {
48cb9a3643Sdan    UPDATE t1 SET b='three'
49cb9a3643Sdan  } {
50cb9a3643Sdan    {UPDATE t1 0 X. {t one t two} {{} {} t three}}
51cb9a3643Sdan  }
52cb9a3643Sdan
53418454c6Sdan  do_iterator_test 1.$tn.3 t1 {
54418454c6Sdan    REPLACE INTO t1 VALUES('one', 'four');
55418454c6Sdan  } {
56418454c6Sdan    {UPDATE t1 0 X. {t one t three} {{} {} t four}}
57418454c6Sdan  }
58418454c6Sdan
59418454c6Sdan  do_iterator_test 1.$tn.4 t1 {
60cb9a3643Sdan    DELETE FROM t1;
61cb9a3643Sdan  } {
62418454c6Sdan    {DELETE t1 0 X. {t one t four} {}}
63418454c6Sdan  }
64418454c6Sdan}
65418454c6Sdan
66418454c6Sdanforeach {tn wo} {
67418454c6Sdan  1 ""
68418454c6Sdan  2 "WITHOUT ROWID"
69418454c6Sdan} {
70418454c6Sdan  reset_db
71418454c6Sdan
72*fadc0e34Sdan  do_execsql_test 2.$tn.0.1 "CREATE TABLE t1(a INTEGER PRIMARY KEY, b) $wo ;"
73*fadc0e34Sdan  do_execsql_test 2.$tn.0.2 "CREATE TABLE t2(a INTEGER PRIMARY KEY, b) $wo ;"
74*fadc0e34Sdan  do_execsql_test 2.$tn.0.3 "CREATE TABLE t3(a INTEGER PRIMARY KEY, b) $wo ;"
75418454c6Sdan
76418454c6Sdan  do_iterator_test 1.1 t1 {
77418454c6Sdan    INSERT INTO t1 VALUES(1, 'two');
78418454c6Sdan  } {
79418454c6Sdan    {INSERT t1 0 X. {} {i 1 t two}}
80418454c6Sdan  }
81418454c6Sdan
82418454c6Sdan  do_iterator_test 2.$tn.2 t1 {
83418454c6Sdan    UPDATE t1 SET b='three'
84418454c6Sdan  } {
85418454c6Sdan    {UPDATE t1 0 X. {i 1 t two} {{} {} t three}}
86418454c6Sdan  }
87418454c6Sdan
88418454c6Sdan  do_iterator_test 2.$tn.3 t1 {
89418454c6Sdan    REPLACE INTO t1 VALUES(1, 'four');
90418454c6Sdan  } {
91418454c6Sdan    {UPDATE t1 0 X. {i 1 t three} {{} {} t four}}
92418454c6Sdan  }
93418454c6Sdan
94418454c6Sdan  do_iterator_test 2.$tn.4 t1 {
95418454c6Sdan    DELETE FROM t1;
96418454c6Sdan  } {
97418454c6Sdan    {DELETE t1 0 X. {i 1 t four} {}}
98418454c6Sdan  }
99*fadc0e34Sdan
100*fadc0e34Sdan  do_execsql_test 2.$tn.5 {
101*fadc0e34Sdan    INSERT INTO t1 VALUES(1, 'one');
102*fadc0e34Sdan    INSERT INTO t1 VALUES(2, 'two');
103*fadc0e34Sdan    INSERT INTO t1 VALUES(3, 'three');
104*fadc0e34Sdan  }
105*fadc0e34Sdan
106*fadc0e34Sdan  do_iterator_test 2.$tn.6 t2 {
107*fadc0e34Sdan    INSERT INTO t2 SELECT a, b FROM t1
108*fadc0e34Sdan  } {
109*fadc0e34Sdan    {INSERT t2 0 X. {} {i 1 t one}}
110*fadc0e34Sdan    {INSERT t2 0 X. {} {i 2 t two}}
111*fadc0e34Sdan    {INSERT t2 0 X. {} {i 3 t three}}
112*fadc0e34Sdan  }
113*fadc0e34Sdan  do_iterator_test 2.$tn.7 t3 {
114*fadc0e34Sdan    INSERT INTO t3 SELECT * FROM t1
115*fadc0e34Sdan  } {
116*fadc0e34Sdan    {INSERT t3 0 X. {} {i 1 t one}}
117*fadc0e34Sdan    {INSERT t3 0 X. {} {i 2 t two}}
118*fadc0e34Sdan    {INSERT t3 0 X. {} {i 3 t three}}
119*fadc0e34Sdan  }
120cb9a3643Sdan}
121cb9a3643Sdan
122cb9a3643Sdanfinish_test
123418454c6Sdan
124