1e7ff403aSdanielk1977# 2006 June 10 2e7ff403aSdanielk1977# 3e7ff403aSdanielk1977# The author disclaims copyright to this source code. In place of 4e7ff403aSdanielk1977# a legal notice, here is a blessing: 5e7ff403aSdanielk1977# 6e7ff403aSdanielk1977# May you do good and not evil. 7e7ff403aSdanielk1977# May you find forgiveness for yourself and forgive others. 8e7ff403aSdanielk1977# May you share freely, never taking more than you give. 9e7ff403aSdanielk1977# 10e7ff403aSdanielk1977#*********************************************************************** 11e7ff403aSdanielk1977# This file implements regression tests for SQLite library. 12e7ff403aSdanielk1977# 13e7ff403aSdanielk1977 14e7ff403aSdanielk1977set testdir [file dirname $argv0] 15e7ff403aSdanielk1977source $testdir/tester.tcl 167377945aSdanset testprefix vtab2 17e7ff403aSdanielk1977 184b2688abSdanielk1977ifcapable !vtab||!schema_pragmas { 19e7ff403aSdanielk1977 finish_test 20e7ff403aSdanielk1977 return 21e7ff403aSdanielk1977} 22e7ff403aSdanielk1977 23e7ff403aSdanielk1977register_schema_module [sqlite3_connection_pointer db] 24e7ff403aSdanielk1977do_test vtab2-1.1 { 25e7ff403aSdanielk1977 execsql { 26e7ff403aSdanielk1977 CREATE VIRTUAL TABLE schema USING schema; 27e7ff403aSdanielk1977 SELECT * FROM schema; 28e7ff403aSdanielk1977 } 29e7ff403aSdanielk1977} [list \ 30e7ff403aSdanielk1977 main schema 0 database {} 0 {} 0 \ 31e7ff403aSdanielk1977 main schema 1 tablename {} 0 {} 0 \ 32e7ff403aSdanielk1977 main schema 2 cid {} 0 {} 0 \ 33e7ff403aSdanielk1977 main schema 3 name {} 0 {} 0 \ 34e7ff403aSdanielk1977 main schema 4 type {} 0 {} 0 \ 35e7ff403aSdanielk1977 main schema 5 not_null {} 0 {} 0 \ 36e7ff403aSdanielk1977 main schema 6 dflt_value {} 0 {} 0 \ 37e7ff403aSdanielk1977 main schema 7 pk {} 0 {} 0 \ 38e7ff403aSdanielk1977] 394b2688abSdanielk1977 400817d0dfSdanielk1977# See ticket #2230. 410817d0dfSdanielk1977# 420817d0dfSdanielk1977do_test vtab2-1.2 { 430817d0dfSdanielk1977 execsql { 440817d0dfSdanielk1977 SELECT length(tablename) FROM schema GROUP by tablename; 450817d0dfSdanielk1977 } 460817d0dfSdanielk1977} {6} 470817d0dfSdanielk1977do_test vtab2-1.3 { 480817d0dfSdanielk1977 execsql { 490817d0dfSdanielk1977 SELECT tablename FROM schema GROUP by length(tablename); 500817d0dfSdanielk1977 } 510817d0dfSdanielk1977} {schema} 520817d0dfSdanielk1977do_test vtab2-1.4 { 530817d0dfSdanielk1977 execsql { 540817d0dfSdanielk1977 SELECT length(tablename) FROM schema GROUP by length(tablename); 550817d0dfSdanielk1977 } 560817d0dfSdanielk1977} {6} 570817d0dfSdanielk1977 58169f8a0cSdanielk1977register_tclvar_module [sqlite3_connection_pointer db] 59169f8a0cSdanielk1977do_test vtab2-2.1 { 60169f8a0cSdanielk1977 set ::abc 123 61169f8a0cSdanielk1977 execsql { 62169f8a0cSdanielk1977 CREATE VIRTUAL TABLE vars USING tclvar; 63*4dd176eaSdrh SELECT name, arrayname, value FROM vars WHERE name='abc'; 64169f8a0cSdanielk1977 } 65169f8a0cSdanielk1977} [list abc "" 123] 66169f8a0cSdanielk1977do_test vtab2-2.2 { 67169f8a0cSdanielk1977 set A(1) 1 68169f8a0cSdanielk1977 set A(2) 4 69169f8a0cSdanielk1977 set A(3) 9 70169f8a0cSdanielk1977 execsql { 71*4dd176eaSdrh SELECT name, arrayname, value FROM vars WHERE name='A'; 72169f8a0cSdanielk1977 } 73169f8a0cSdanielk1977} [list A 1 1 A 2 4 A 3 9] 7429a0138cSdrhunset -nocomplain result 7529a0138cSdrhunset -nocomplain var 7609df9e28Sdrhset result {} 7709df9e28Sdrhforeach var [lsort [info vars tcl_*]] { 7809df9e28Sdrh catch {lappend result $var [set $var]} 7909df9e28Sdrh} 80169f8a0cSdanielk1977do_test vtab2-2.3 { 81169f8a0cSdanielk1977 execsql { 82169f8a0cSdanielk1977 SELECT name, value FROM vars 83169f8a0cSdanielk1977 WHERE name MATCH 'tcl_*' AND arrayname = '' 84169f8a0cSdanielk1977 ORDER BY name; 85169f8a0cSdanielk1977 } 8609df9e28Sdrh} $result 8729a0138cSdrhunset result 8829a0138cSdrhunset var 89169f8a0cSdanielk1977 902945b4a1Sdrh# Ticket #2894. 912945b4a1Sdrh# 922945b4a1Sdrh# Make sure we do call Column(), and Rowid() methods of 932945b4a1Sdrh# a virtual table when that table is in a LEFT JOIN. 942945b4a1Sdrh# 952945b4a1Sdrhdo_test vtab2-3.1 { 962945b4a1Sdrh execsql { 972945b4a1Sdrh SELECT * FROM schema WHERE dflt_value IS NULL LIMIT 1 982945b4a1Sdrh } 992945b4a1Sdrh} {main schema 0 database {} 0 {} 0} 1002945b4a1Sdrhdo_test vtab2-3.2 { 1012945b4a1Sdrh execsql { 1022945b4a1Sdrh SELECT *, b.rowid 1032945b4a1Sdrh FROM schema a LEFT JOIN schema b ON a.dflt_value=b.dflt_value 1042945b4a1Sdrh WHERE a.rowid=1 1052945b4a1Sdrh } 1062945b4a1Sdrh} {main schema 0 database {} 0 {} 0 {} {} {} {} {} {} {} {} {}} 1075d8806e0Sdrhdo_test vtab2-3.3 { 1085d8806e0Sdrh execsql { 1095d8806e0Sdrh SELECT *, b.rowid 1105d8806e0Sdrh FROM schema a LEFT JOIN schema b ON a.dflt_value IS b.dflt_value 1115d8806e0Sdrh AND a.dflt_value IS NOT NULL 1125d8806e0Sdrh WHERE a.rowid=1 1135d8806e0Sdrh } 1145d8806e0Sdrh} {main schema 0 database {} 0 {} 0 {} {} {} {} {} {} {} {} {}} 1152945b4a1Sdrh 116d0ffa1e8Sdanielk1977do_test vtab2-4.1 { 117d0ffa1e8Sdanielk1977 execsql { 118d0ffa1e8Sdanielk1977 BEGIN TRANSACTION; 119d0ffa1e8Sdanielk1977 CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(b, c)); 120d0ffa1e8Sdanielk1977 CREATE TABLE fkey( 121d0ffa1e8Sdanielk1977 to_tbl, 122d0ffa1e8Sdanielk1977 to_col 123d0ffa1e8Sdanielk1977 ); 124d0ffa1e8Sdanielk1977 INSERT INTO "fkey" VALUES('t1',NULL); 125d0ffa1e8Sdanielk1977 COMMIT; 126d0ffa1e8Sdanielk1977 } 127d0ffa1e8Sdanielk1977} {} 128d0ffa1e8Sdanielk1977do_test vtab2-4.2 { 129d0ffa1e8Sdanielk1977 execsql { CREATE VIRTUAL TABLE v_col USING schema } 130d0ffa1e8Sdanielk1977} {} 131d0ffa1e8Sdanielk1977do_test vtab2-4.3 { 132d0ffa1e8Sdanielk1977 execsql { SELECT name FROM v_col WHERE tablename = 't1' AND pk } 133d0ffa1e8Sdanielk1977} {a} 134d0ffa1e8Sdanielk1977do_test vtab2-4.4 { 135d0ffa1e8Sdanielk1977 execsql { 136d0ffa1e8Sdanielk1977 UPDATE fkey 137d0ffa1e8Sdanielk1977 SET to_col = (SELECT name FROM v_col WHERE tablename = 't1' AND pk); 138d0ffa1e8Sdanielk1977 } 139d0ffa1e8Sdanielk1977} {} 140d0ffa1e8Sdanielk1977do_test vtab2-4.5 { 141d0ffa1e8Sdanielk1977 execsql { SELECT * FROM fkey } 142d0ffa1e8Sdanielk1977} {t1 a} 143d0ffa1e8Sdanielk1977 1447377945aSdan#------------------------------------------------------------------------- 1457377945aSdan# 146e56f53efSdanifcapable fts3 { 1477377945aSdan reset_db 1487377945aSdan do_execsql_test 5.1 { 1497377945aSdan PRAGMA encoding='UTF16'; 1507377945aSdan } 1517377945aSdan 1527377945aSdan do_test 5.2 { 1537377945aSdan sqlite3_exec_hex db { CREATE VIRTUAL TABLE %C8 USING fts3 } 1547377945aSdan } {0 {}} 1557377945aSdan 1567377945aSdan do_test 5.3 { 1577377945aSdan sqlite3_exec_hex db { CREATE VIRTUAL TABLE %C9 USING s } 1587377945aSdan } {/1 {malformed database schema.* already exists}/} 159e56f53efSdan} 1607377945aSdan 1617377945aSdan 1627377945aSdan 163e7ff403aSdanielk1977finish_test 164