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