mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Test case for writing to a WITHOUT ROWID virtual table. The TCLVAR virtual
table is modified to add a "fullname" column which is the primary key, and to accept update operations against the primary key. FossilOrigin-Name: 6997e00c3221f266f4d9187501d8a9e5bafb85551e88a744cdc8ffe3b75ec2a4
This commit is contained in:
102
test/vtabJ.test
Normal file
102
test/vtabJ.test
Normal file
@ -0,0 +1,102 @@
|
||||
# 2017-08-10
|
||||
#
|
||||
# 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 tests of writing to WITHOUT ROWID virtual tables
|
||||
# using the tclvar eponymous virtual table.
|
||||
#
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
set testprefix vtabJ
|
||||
|
||||
ifcapable !vtab {
|
||||
finish_test
|
||||
return
|
||||
}
|
||||
|
||||
register_tclvar_module db
|
||||
|
||||
unset -nocomplain vtabJ
|
||||
do_test 100 {
|
||||
set vtabJ(1) this
|
||||
set vtabJ(two) is
|
||||
set vtabJ(3) {a test}
|
||||
db eval {
|
||||
SELECT fullname, value FROM tclvar WHERE name='vtabJ' ORDER BY fullname;
|
||||
}
|
||||
} {vtabJ(1) this vtabJ(3) {a test} vtabJ(two) is}
|
||||
|
||||
do_execsql_test 110 {
|
||||
INSERT INTO tclvar(fullname, value)
|
||||
VALUES('vtabJ(4)',4),('vtabJ(five)',555);
|
||||
SELECT fullname, value FROM tclvar WHERE name='vtabJ' ORDER BY fullname;
|
||||
} {vtabJ(1) this vtabJ(3) {a test} vtabJ(4) 4 vtabJ(five) 555 vtabJ(two) is}
|
||||
do_test 111 {
|
||||
set res {}
|
||||
foreach vname [lsort [array names vtabJ]] {
|
||||
lappend res vtabJ($vname) $vtabJ($vname)
|
||||
}
|
||||
set res
|
||||
} {vtabJ(1) this vtabJ(3) {a test} vtabJ(4) 4 vtabJ(five) 555 vtabJ(two) is}
|
||||
|
||||
do_test 120 {
|
||||
db eval {
|
||||
INSERT INTO tclvar(fullname, value) VALUES('vtabJ(4)',444);
|
||||
}
|
||||
set vtabJ(4)
|
||||
} {444}
|
||||
|
||||
do_test 130 {
|
||||
db eval {
|
||||
INSERT INTO tclvar(fullname, value) VALUES('vtabJ(4)',NULL);
|
||||
}
|
||||
info exists vtabJ(4)
|
||||
} {0}
|
||||
|
||||
do_test 140 {
|
||||
db eval {
|
||||
UPDATE tclvar SET value=55 WHERE fullname='vtabJ(five)';
|
||||
}
|
||||
set vtabJ(five)
|
||||
} {55}
|
||||
|
||||
do_test 150 {
|
||||
db eval {
|
||||
UPDATE tclvar SET fullname='vtabJ(5)' WHERE fullname='vtabJ(five)';
|
||||
}
|
||||
set vtabJ(5)
|
||||
} {55}
|
||||
do_test 151 {
|
||||
info exists vtabJ(five)
|
||||
} {0}
|
||||
do_test 152 {
|
||||
set res {}
|
||||
foreach vname [lsort [array names vtabJ]] {
|
||||
lappend res vtabJ($vname) $vtabJ($vname)
|
||||
}
|
||||
set res
|
||||
} {vtabJ(1) this vtabJ(3) {a test} vtabJ(5) 55 vtabJ(two) is}
|
||||
|
||||
do_execsql_test 160 {
|
||||
SELECT fullname FROM tclvar WHERE arrayname='two'
|
||||
} {vtabJ(two)}
|
||||
do_execsql_test 161 {
|
||||
DELETE FROM tclvar WHERE arrayname='two';
|
||||
SELECT fullname, value FROM tclvar WHERE name='vtabJ' ORDER BY fullname;
|
||||
} {vtabJ(1) this vtabJ(3) {a test} vtabJ(5) 55}
|
||||
do_test 162 {
|
||||
set res {}
|
||||
foreach vname [lsort [array names vtabJ]] {
|
||||
lappend res vtabJ($vname) $vtabJ($vname)
|
||||
}
|
||||
set res
|
||||
} {vtabJ(1) this vtabJ(3) {a test} vtabJ(5) 55}
|
||||
|
||||
finish_test
|
Reference in New Issue
Block a user