2024-03-25 23:00:40 +03:00
|
|
|
# 2024-03-26
|
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
#***********************************************************************
|
|
|
|
#
|
|
|
|
|
|
|
|
set testdir [file dirname $argv0]
|
|
|
|
source $testdir/tester.tcl
|
|
|
|
set testprefix vtabL
|
|
|
|
|
|
|
|
ifcapable !vtab {
|
|
|
|
finish_test
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
register_tcl_module db
|
|
|
|
|
|
|
|
proc vtab_command {method args} {
|
|
|
|
switch -- $method {
|
|
|
|
xConnect {
|
|
|
|
return $::create_table_sql
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return {}
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach {tn cts} {
|
|
|
|
1 {SELECT 123}
|
|
|
|
2 {SELECT 123, 456}
|
|
|
|
3 {INSERT INTO t1 VALUES(5, 6)}
|
|
|
|
4 {CREATE INDEX i1 ON t1(a)}
|
|
|
|
5 {CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN SELECT 1; END;}
|
|
|
|
6 {DROP TABLE nosuchtable}
|
|
|
|
7 {DROP TABLE x1}
|
|
|
|
8 {DROP TABLE t1}
|
2024-05-16 19:22:51 +03:00
|
|
|
} {
|
|
|
|
set ::create_table_sql $cts
|
|
|
|
do_catchsql_test 1.$tn {
|
|
|
|
CREATE VIRTUAL TABLE x1 USING tcl(vtab_command);
|
|
|
|
} {1 {declare_vtab: syntax error}}
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach {tn cts} {
|
2024-03-26 21:07:39 +03:00
|
|
|
9 {CREATE TABLE xyz AS SELECT * FROM sqlite_schema}
|
|
|
|
10 {CREATE TABLE xyz AS SELECT 1 AS 'col'}
|
2024-03-25 23:00:40 +03:00
|
|
|
} {
|
|
|
|
set ::create_table_sql $cts
|
|
|
|
do_catchsql_test 1.$tn {
|
|
|
|
CREATE VIRTUAL TABLE x1 USING tcl(vtab_command);
|
2024-05-16 19:22:51 +03:00
|
|
|
} {1 {declare_vtab: SQL logic error}}
|
2024-03-25 23:00:40 +03:00
|
|
|
}
|
|
|
|
|
2024-03-26 21:07:39 +03:00
|
|
|
foreach {tn cts} {
|
|
|
|
1 {CREATE TABLE IF NOT EXISTS t1(a, b)}
|
|
|
|
2 {CREATE TABLE ""(a, b PRIMARY KEY) WITHOUT ROWID}
|
|
|
|
} {
|
|
|
|
set ::create_table_sql $cts
|
|
|
|
execsql { DROP TABLE IF EXISTS x1 }
|
|
|
|
do_execsql_test 2.$tn.1 {
|
|
|
|
CREATE VIRTUAL TABLE x1 USING tcl(vtab_command);
|
|
|
|
}
|
|
|
|
do_execsql_test 2.$tn.2 {
|
|
|
|
SELECT a, b FROM x1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-25 23:00:40 +03:00
|
|
|
finish_test
|
|
|
|
|