418454c63f
REPLACE command on a WITHOUT ROWID table with no indexes, triggers or foreign key constraints that causes SQLite to clobber any existing row without separately checking for it. This optimization causes SQLite to omit the expected pre-update-hook callbacks. FossilOrigin-Name: 6281ef974c0ac7a7133c9e1e04c09fdbd627c019c6ff3227293548caf8283864
101 lines
2.1 KiB
Plaintext
101 lines
2.1 KiB
Plaintext
# 2017 Jan 31
|
|
#
|
|
# 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.
|
|
#
|
|
#***********************************************************************
|
|
#
|
|
# The focus of this file is testing the session module. Specifically,
|
|
# testing support for WITHOUT ROWID tables.
|
|
#
|
|
|
|
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 sessionwor
|
|
|
|
proc test_reset {} {
|
|
catch { db close }
|
|
catch { db2 close }
|
|
forcedelete test.db test.db2
|
|
sqlite3 db test.db
|
|
sqlite3 db2 test.db2
|
|
}
|
|
|
|
foreach {tn wo} {
|
|
1 ""
|
|
2 "WITHOUT ROWID"
|
|
} {
|
|
reset_db
|
|
|
|
do_execsql_test 1.$tn.0 "CREATE TABLE t1(a PRIMARY KEY, b) $wo ;"
|
|
|
|
do_iterator_test 1.$tn.1 t1 {
|
|
INSERT INTO t1 VALUES('one', 'two');
|
|
} {
|
|
{INSERT t1 0 X. {} {t one t two}}
|
|
}
|
|
|
|
do_iterator_test 1.$tn.2 t1 {
|
|
UPDATE t1 SET b='three'
|
|
} {
|
|
{UPDATE t1 0 X. {t one t two} {{} {} t three}}
|
|
}
|
|
|
|
do_iterator_test 1.$tn.3 t1 {
|
|
REPLACE INTO t1 VALUES('one', 'four');
|
|
} {
|
|
{UPDATE t1 0 X. {t one t three} {{} {} t four}}
|
|
}
|
|
|
|
do_iterator_test 1.$tn.4 t1 {
|
|
DELETE FROM t1;
|
|
} {
|
|
{DELETE t1 0 X. {t one t four} {}}
|
|
}
|
|
}
|
|
|
|
foreach {tn wo} {
|
|
1 ""
|
|
2 "WITHOUT ROWID"
|
|
} {
|
|
reset_db
|
|
|
|
do_execsql_test 2.$tn.0 "CREATE TABLE t1(a INTEGER PRIMARY KEY, b) $wo ;"
|
|
|
|
do_iterator_test 1.1 t1 {
|
|
INSERT INTO t1 VALUES(1, 'two');
|
|
} {
|
|
{INSERT t1 0 X. {} {i 1 t two}}
|
|
}
|
|
|
|
do_iterator_test 2.$tn.2 t1 {
|
|
UPDATE t1 SET b='three'
|
|
} {
|
|
{UPDATE t1 0 X. {i 1 t two} {{} {} t three}}
|
|
}
|
|
|
|
do_iterator_test 2.$tn.3 t1 {
|
|
REPLACE INTO t1 VALUES(1, 'four');
|
|
} {
|
|
{UPDATE t1 0 X. {i 1 t three} {{} {} t four}}
|
|
}
|
|
|
|
do_iterator_test 2.$tn.4 t1 {
|
|
DELETE FROM t1;
|
|
} {
|
|
{DELETE t1 0 X. {i 1 t four} {}}
|
|
}
|
|
}
|
|
|
|
finish_test
|
|
|