1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-04-20 08:47:46 +03:00
sqlite/ext/session/session_gen.test
drh c49bfdbbee Add a missing "db2 close" to the ext/session/session_gen.test test module.
FossilOrigin-Name: 4068f586ddadd3a818645574f7584fcee6d373dbf45805c545100883b495598a
2025-02-01 23:49:01 +00:00

192 lines
3.8 KiB
Plaintext

# 2025 Jan 28
#
# 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.
#
#***********************************************************************
# This file implements regression tests for SQLite library.
#
if {![info exists testdir]} {
set testdir [file join [file dirname [info script]] .. .. test]
}
source [file join [file dirname [info script]] session_common.tcl]
source $testdir/tester.tcl
ifcapable !session {finish_test; return}
set testprefix session_gen
foreach {otn sct} {
1 VIRTUAL
2 STORED
} {
eval [string map [list %TYPE% $sct] {
reset_db
set testprefix $testprefix-$otn
do_execsql_test 1.0 {
CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
CREATE TABLE t2(a INTEGER PRIMARY KEY, b AS (c+1) %TYPE%, c);
CREATE TABLE t3(
a,
b AS (a+10) %TYPE%,
c,
d AS (c+1) %TYPE%,
e,
PRIMARY KEY(c, e)
) WITHOUT ROWID;
CREATE TABLE t4(a AS (c*100) %TYPE%, b INTEGER PRIMARY KEY, c);
CREATE TABLE t5(x, y);
}
foreach {tn sql changeset} {
0.1 {
INSERT INTO t5 VALUES('abc', 'def');
} {
{INSERT t5 0 X.. {} {i 1 t abc t def}}
}
0.2 {
UPDATE t5 SET y='xyz' WHERE rowid=1;
} {
{UPDATE t5 0 X.. {i 1 {} {} t def} {{} {} {} {} t xyz}}
}
0.3 {
DELETE FROM t5;
} {
{DELETE t5 0 X.. {i 1 t abc t xyz} {}}
}
1.1 {
INSERT INTO t2 VALUES(1, 2);
INSERT INTO t2 VALUES(2, 123);
} {
{INSERT t2 0 X. {} {i 1 i 2}}
{INSERT t2 0 X. {} {i 2 i 123}}
}
1.2 {
UPDATE t2 SET c=456 WHERE a=1
} {
{UPDATE t2 0 X. {i 1 i 2} {{} {} i 456}}
}
1.3 {
DELETE FROM t2 WHERE a=2
} {
{DELETE t2 0 X. {i 2 i 123} {}}
}
1.4 {
UPDATE t2 SET a=15
} {
{INSERT t2 0 X. {} {i 15 i 456}}
{DELETE t2 0 X. {i 1 i 456} {}}
}
2.1 {
INSERT INTO t3 VALUES(5, 6, 7);
INSERT INTO t3 VALUES(8, 9, 10);
} {
{INSERT t3 0 .XX {} {i 8 i 9 i 10}}
{INSERT t3 0 .XX {} {i 5 i 6 i 7}}
}
2.2 {
UPDATE t3 SET a = 505 WHERE (c, e) = (6, 7);
} {
{UPDATE t3 0 .XX {i 5 i 6 i 7} {i 505 {} {} {} {}}}
}
2.3 {
DELETE FROM t3 WHERE (c, e) = (9, 10);
} {
{DELETE t3 0 .XX {i 8 i 9 i 10} {}}
}
2.4 {
UPDATE t3 SET c=1000
} {
{DELETE t3 0 .XX {i 505 i 6 i 7} {}}
{INSERT t3 0 .XX {} {i 505 i 1000 i 7}}
}
3.1 {
INSERT INTO t4 VALUES(100, 100);
} {
{INSERT t4 0 X. {} {i 100 i 100}}
}
} {
do_test 1.$tn.1 {
sqlite3session S db main
S object_config rowid 1
S attach *
execsql $sql
} {}
do_changeset_test 1.$tn.2 S $changeset
S delete
}
#-------------------------------------------------------------------------
reset_db
forcedelete test.db2
sqlite3 db2 test.db2
do_common_sql {
CREATE TABLE t0(x INTEGER PRIMARY KEY, y);
INSERT INTO t0 VALUES(1, 'one');
INSERT INTO t0 VALUES(2, 'two');
CREATE TABLE t1(a AS (c*10) %TYPE%, b INTEGER PRIMARY KEY, c);
INSERT INTO t1 VALUES(1, 5);
INSERT INTO t1 VALUES(2, 10);
INSERT INTO t1 VALUES(3, 5);
CREATE TABLE t2(
a, b, c AS (a*b) %TYPE%,
'k 1', 'k 2', PRIMARY KEY('k 1', 'k 2')
) WITHOUT ROWID;
INSERT INTO t2 VALUES('a', 'b', 1, 11);
INSERT INTO t2 VALUES('A', 'B', 2, 22);
INSERT INTO t2 VALUES('Aa', 'Bb', 3, 33);
}
foreach {tn sql} {
1.1 { INSERT INTO t0 VALUES(4, 15) }
1.2 { INSERT INTO t1 VALUES(4, 15) }
1.3 { INSERT INTO t2 VALUES(1, 2, 3, 4) }
2.1 { UPDATE t1 SET c=100 WHERE b=2 }
2.2 { UPDATE t2 SET a=11 }
3.1 { DELETE FROM t2 WHERE (t2.'k 1') = 2 }
3.2 { DELETE FROM t1 }
} {
do_test 2.$tn.1 {
# execsql { PRAGMA vdbe_listing = 1 } db2
do_then_apply_sql $sql
} {}
do_test 2.$tn.2 {
compare_db db db2
} {}
}
db2 close
}]}
finish_test