1# 2016-06-02 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# 12# Test cases for CSV virtual table. 13 14set testdir [file dirname $argv0] 15source $testdir/tester.tcl 16set testprefix csv01 17 18ifcapable !vtab||!cte { finish_test ; return } 19 20load_static_extension db csv 21 22do_execsql_test 1.0 { 23 CREATE VIRTUAL TABLE temp.t1 USING csv( 24 data= 25'1,2,3,4 265,6,7,8 279,10,11,12 2813,14,15,16 29', 30 columns=4 31 ); 32 SELECT * FROM t1 WHERE c1=10; 33} {9 10 11 12} 34do_execsql_test 1.1 { 35 SELECT * FROM t1 WHERE c1='10'; 36} {9 10 11 12} 37do_execsql_test 1.2 { 38 SELECT rowid FROM t1; 39} {1 2 3 4} 40 41do_execsql_test 1.3 { 42 DROP TABLE temp.t1; 43 CREATE VIRTUAL TABLE temp.t1 USING csv( 44 data= 45'a,b,"mix-bloom-eel","soft opinion" 461,2,3,4 475,6,7,8 489,10,11,12 4913,14,15,16 50', 51 header=1 52 ); 53 SELECT * FROM t1 WHERE "soft opinion"=12; 54} {9 10 11 12} 55do_execsql_test 1.4 { 56 SELECT name FROM pragma_table_xinfo('t1'); 57} {a b mix-bloom-eel {soft opinion}} 58 59do_execsql_test 1.5 { 60 DROP TABLE temp.t1; 61 CREATE VIRTUAL TABLE temp.t1 USING csv( 62 data= 63'a,b,"mix-bloom-eel","soft opinion" 641,2,3,4 655,6,7,8 669,10,11,12 6713,14,15,16 68', 69 header=false 70 ); 71 SELECT * FROM t1 WHERE c1='b'; 72} {a b mix-bloom-eel {soft opinion}} 73do_execsql_test 1.6 { 74 SELECT name FROM pragma_table_xinfo('t1'); 75} {c0 c1 c2 c3} 76 77do_execsql_test 1.7 { 78 DROP TABLE temp.t1; 79 CREATE VIRTUAL TABLE temp.t1 USING csv( 80 data= 81'a,b,"mix-bloom-eel","soft opinion" 821,2,3,4 835,6,7,8 849,10,11,12 8513,14,15,16 86', 87 header, 88 schema='CREATE TABLE x(x0,x1,x2,x3,x4)', 89 columns=5 90 ); 91 SELECT * FROM t1 WHERE x1='6'; 92} {5 6 7 8 {}} 93do_execsql_test 1.8 { 94 SELECT name FROM pragma_table_xinfo('t1'); 95} {x0 x1 x2 x3 x4} 96 97 98do_execsql_test 2.0 { 99 DROP TABLE t1; 100 CREATE VIRTUAL TABLE temp.t2 USING csv( 101 data= 102'1,2,3,4 1035,6,7,8 1049,10,11,12 10513,14,15,16 106', 107 columns=4, 108 schema='CREATE TABLE t2(a INT, b TEXT, c REAL, d BLOB)' 109 ); 110 SELECT * FROM t2 WHERE a=9; 111} {9 10 11 12} 112do_execsql_test 2.1 { 113 SELECT * FROM t2 WHERE b=10; 114} {9 10 11 12} 115do_execsql_test 2.2 { 116 SELECT * FROM t2 WHERE c=11; 117} {9 10 11 12} 118do_execsql_test 2.3 { 119 SELECT * FROM t2 WHERE d=12; 120} {} 121do_execsql_test 2.4 { 122 SELECT * FROM t2 WHERE d='12'; 123} {9 10 11 12} 124do_execsql_test 2.5 { 125 SELECT * FROM t2 WHERE a='9'; 126} {9 10 11 12} 127 128do_execsql_test 3.0 { 129 DROP TABLE t2; 130 CREATE VIRTUAL TABLE temp.t3 USING csv( 131 data= 132'1,2,3,4 1335,6,7,8 1349,10,11,12 13513,14,15,16 136', 137 columns=4, 138 schema= 139 'CREATE TABLE t3(a PRIMARY KEY,b TEXT,c TEXT,d TEXT) WITHOUT ROWID', 140 testflags=1 141 ); 142 SELECT a FROM t3 WHERE b=6 OR c=7 OR d=12 ORDER BY +a; 143} {5 9} 144do_execsql_test 3.1 { 145 SELECT a FROM t3 WHERE +b=6 OR c=7 OR d=12 ORDER BY +a; 146} {5 9} 147 148# The rowid column is not visible on a WITHOUT ROWID virtual table 149do_catchsql_test 3.2 { 150 SELECT rowid, a FROM t3; 151} {1 {no such column: rowid}} 152 153# Multi-column WITHOUT ROWID virtual tables may not be writable. 154do_catchsql_test 4.0 { 155 DROP TABLE t3; 156 CREATE VIRTUAL TABLE temp.t4 USING csv_wr( 157 data= 158'1,2,3,4 1595,6,7,8 1609,10,11,12 16113,14,15,16', 162 columns=4, 163 schema= 164 'CREATE TABLE t3(a,b,c,d,PRIMARY KEY(a,b)) WITHOUT ROWID', 165 testflags=1 166 ); 167} {1 {bad schema: 'CREATE TABLE t3(a,b,c,d,PRIMARY KEY(a,b)) WITHOUT ROWID' - not an error}} 168 169# WITHOUT ROWID tables with a single-column PRIMARY KEY may be writable. 170do_catchsql_test 4.1 { 171 DROP TABLE IF EXISTS t4; 172 CREATE VIRTUAL TABLE temp.t4 USING csv_wr( 173 data= 174'1,2,3,4 1755,6,7,8 1769,10,11,12 17713,14,15,16', 178 columns=4, 179 schema= 180 'CREATE TABLE t3(a,b,c,d,PRIMARY KEY(b)) WITHOUT ROWID', 181 testflags=1 182 ); 183} {0 {}} 184 185do_catchsql_test 4.2 { 186 DROP TABLE IF EXISTS t5; 187 CREATE VIRTUAL TABLE temp.t5 USING csv_wr( 188 data= 189 '1,2,3,4 190 5,6,7,8 191 9,10,11,12 192 13,14,15,16', 193 columns=4, 194 schema= 195 'CREATE TABLE t3(a,b,c,d) WITHOUT ROWID', 196 testflags=1 197 ); 198} {1 {bad schema: 'CREATE TABLE t3(a,b,c,d) WITHOUT ROWID' - PRIMARY KEY missing on table t3}} 199 200# 2018-04-24 201# Memory leak reported on the sqlite-users mailing list by Ralf Junker. 202# 203do_catchsql_test 4.3 { 204 CREATE VIRTUAL TABLE IF NOT EXISTS temp.t1 205 USING csv(filename='FileDoesNotExist.csv'); 206} {1 {cannot open 'FileDoesNotExist.csv' for reading}} 207 208# 2018-06-02 209# Problem with single-column CSV support reported on the mailing list 210# by Trent W. Buck. 211# 212do_execsql_test 4.4 { 213 CREATE VIRTUAL TABLE temp.trent USING csv(data='1'); 214 SELECT * FROM trent; 215} {1} 216 217finish_test 218