1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-14 00:22:38 +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:
drh
2017-08-10 17:53:11 +00:00
parent e3740f272b
commit 4dd176eaab
7 changed files with 207 additions and 19 deletions

View File

@@ -60,7 +60,7 @@ do_test vtab2-2.1 {
set ::abc 123
execsql {
CREATE VIRTUAL TABLE vars USING tclvar;
SELECT * FROM vars WHERE name='abc';
SELECT name, arrayname, value FROM vars WHERE name='abc';
}
} [list abc "" 123]
do_test vtab2-2.2 {
@@ -68,7 +68,7 @@ do_test vtab2-2.2 {
set A(2) 4
set A(3) 9
execsql {
SELECT * FROM vars WHERE name='A';
SELECT name, arrayname, value FROM vars WHERE name='A';
}
} [list A 1 1 A 2 4 A 3 9]
unset -nocomplain result

View File

@@ -39,7 +39,9 @@ do_test vtabE-1 {
CREATE VIRTUAL TABLE t1 USING tclvar;
CREATE VIRTUAL TABLE t2 USING tclvar;
CREATE TABLE t3(a INTEGER PRIMARY KEY, b);
SELECT t1.*, t2.*, abs(t3.b + abs(t2.value + abs(t1.value)))
SELECT t1.name, t1.arrayname, t1.value,
t2.name, t2.arrayname, t2.value,
abs(t3.b + abs(t2.value + abs(t1.value)))
FROM t1 LEFT JOIN t2 ON t2.name = t1.arrayname
LEFT JOIN t3 ON t3.a=t2.value
WHERE t1.name = 'vtabE'

View File

@@ -55,7 +55,7 @@ register_tclvar_module db
set ::xyz 10
do_execsql_test 2.0 {
CREATE VIRTUAL TABLE vars USING tclvar;
SELECT * FROM vars WHERE name = 'xyz';
SELECT name, arrayname, value FROM vars WHERE name = 'xyz';
} {xyz {} 10}
set x1 aback

102
test/vtabJ.test Normal file
View 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