aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/vtab2.test4
-rw-r--r--test/vtabE.test4
-rw-r--r--test/vtabH.test2
-rw-r--r--test/vtabJ.test102
4 files changed, 108 insertions, 4 deletions
diff --git a/test/vtab2.test b/test/vtab2.test
index f0616513b..7bd27a5fd 100644
--- a/test/vtab2.test
+++ b/test/vtab2.test
@@ -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
diff --git a/test/vtabE.test b/test/vtabE.test
index aeb478e3e..cbb6a1e30 100644
--- a/test/vtabE.test
+++ b/test/vtabE.test
@@ -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'
diff --git a/test/vtabH.test b/test/vtabH.test
index 2ebc3f9cc..56c12544f 100644
--- a/test/vtabH.test
+++ b/test/vtabH.test
@@ -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
diff --git a/test/vtabJ.test b/test/vtabJ.test
new file mode 100644
index 000000000..710b2cdd2
--- /dev/null
+++ b/test/vtabJ.test
@@ -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