135db31b2Sdrh# 2016-06-02 235db31b2Sdrh# 335db31b2Sdrh# The author disclaims copyright to this source code. In place of 435db31b2Sdrh# a legal notice, here is a blessing: 535db31b2Sdrh# 635db31b2Sdrh# May you do good and not evil. 735db31b2Sdrh# May you find forgiveness for yourself and forgive others. 835db31b2Sdrh# May you share freely, never taking more than you give. 935db31b2Sdrh# 1035db31b2Sdrh#*********************************************************************** 1135db31b2Sdrh# 1235db31b2Sdrh# Test cases for CSV virtual table. 1335db31b2Sdrh 1435db31b2Sdrhset testdir [file dirname $argv0] 1535db31b2Sdrhsource $testdir/tester.tcl 16a4c07346Smistachkinset testprefix csv01 1735db31b2Sdrh 1835db31b2Sdrhifcapable !vtab||!cte { finish_test ; return } 1935db31b2Sdrh 2035db31b2Sdrhload_static_extension db csv 2135db31b2Sdrh 2235db31b2Sdrhdo_execsql_test 1.0 { 2335db31b2Sdrh CREATE VIRTUAL TABLE temp.t1 USING csv( 2435db31b2Sdrh data= 2535db31b2Sdrh'1,2,3,4 2635db31b2Sdrh5,6,7,8 2735db31b2Sdrh9,10,11,12 2835db31b2Sdrh13,14,15,16 2935db31b2Sdrh', 3035db31b2Sdrh columns=4 3135db31b2Sdrh ); 3235db31b2Sdrh SELECT * FROM t1 WHERE c1=10; 3335db31b2Sdrh} {9 10 11 12} 3435db31b2Sdrhdo_execsql_test 1.1 { 3535db31b2Sdrh SELECT * FROM t1 WHERE c1='10'; 3635db31b2Sdrh} {9 10 11 12} 3735db31b2Sdrhdo_execsql_test 1.2 { 3835db31b2Sdrh SELECT rowid FROM t1; 3935db31b2Sdrh} {1 2 3 4} 4035db31b2Sdrh 4135db31b2Sdrhdo_execsql_test 2.0 { 4235db31b2Sdrh DROP TABLE t1; 4335db31b2Sdrh CREATE VIRTUAL TABLE temp.t2 USING csv( 4435db31b2Sdrh data= 4535db31b2Sdrh'1,2,3,4 4635db31b2Sdrh5,6,7,8 4735db31b2Sdrh9,10,11,12 4835db31b2Sdrh13,14,15,16 4935db31b2Sdrh', 5035db31b2Sdrh columns=4, 5135db31b2Sdrh schema='CREATE TABLE t2(a INT, b TEXT, c REAL, d BLOB)' 5235db31b2Sdrh ); 5335db31b2Sdrh SELECT * FROM t2 WHERE a=9; 5435db31b2Sdrh} {9 10 11 12} 5535db31b2Sdrhdo_execsql_test 2.1 { 5635db31b2Sdrh SELECT * FROM t2 WHERE b=10; 5735db31b2Sdrh} {9 10 11 12} 5835db31b2Sdrhdo_execsql_test 2.2 { 5935db31b2Sdrh SELECT * FROM t2 WHERE c=11; 6035db31b2Sdrh} {9 10 11 12} 6135db31b2Sdrhdo_execsql_test 2.3 { 6235db31b2Sdrh SELECT * FROM t2 WHERE d=12; 6335db31b2Sdrh} {} 6435db31b2Sdrhdo_execsql_test 2.4 { 6535db31b2Sdrh SELECT * FROM t2 WHERE d='12'; 6635db31b2Sdrh} {9 10 11 12} 6735db31b2Sdrhdo_execsql_test 2.5 { 6835db31b2Sdrh SELECT * FROM t2 WHERE a='9'; 6935db31b2Sdrh} {9 10 11 12} 7035db31b2Sdrh 7135db31b2Sdrhdo_execsql_test 3.0 { 7235db31b2Sdrh DROP TABLE t2; 7335db31b2Sdrh CREATE VIRTUAL TABLE temp.t3 USING csv( 7435db31b2Sdrh data= 7535db31b2Sdrh'1,2,3,4 7635db31b2Sdrh5,6,7,8 7735db31b2Sdrh9,10,11,12 7835db31b2Sdrh13,14,15,16 7935db31b2Sdrh', 8035db31b2Sdrh columns=4, 8135db31b2Sdrh schema= 8235db31b2Sdrh 'CREATE TABLE t3(a PRIMARY KEY,b TEXT,c TEXT,d TEXT) WITHOUT ROWID', 8335db31b2Sdrh testflags=1 8435db31b2Sdrh ); 8535db31b2Sdrh SELECT a FROM t3 WHERE b=6 OR c=7 OR d=12 ORDER BY +a; 8635db31b2Sdrh} {5 9} 8735db31b2Sdrhdo_execsql_test 3.1 { 8835db31b2Sdrh SELECT a FROM t3 WHERE +b=6 OR c=7 OR d=12 ORDER BY +a; 8935db31b2Sdrh} {5 9} 9035db31b2Sdrh 917edcf627Sdrh# The rowid column is not visible on a WITHOUT ROWID virtual table 927edcf627Sdrhdo_catchsql_test 3.2 { 937edcf627Sdrh SELECT rowid, a FROM t3; 947edcf627Sdrh} {1 {no such column: rowid}} 957edcf627Sdrh 96e3740f27Sdrh# Multi-column WITHOUT ROWID virtual tables may not be writable. 97ac9c3d2cSdrhdo_catchsql_test 4.0 { 98ac9c3d2cSdrh DROP TABLE t3; 99ac9c3d2cSdrh CREATE VIRTUAL TABLE temp.t4 USING csv_wr( 100ac9c3d2cSdrh data= 101ac9c3d2cSdrh'1,2,3,4 102ac9c3d2cSdrh5,6,7,8 103ac9c3d2cSdrh9,10,11,12 104e3740f27Sdrh13,14,15,16', 105ac9c3d2cSdrh columns=4, 106ac9c3d2cSdrh schema= 107e3740f27Sdrh 'CREATE TABLE t3(a,b,c,d,PRIMARY KEY(a,b)) WITHOUT ROWID', 108ac9c3d2cSdrh testflags=1 109ac9c3d2cSdrh ); 110ac9c3d2cSdrh} {1 {vtable constructor failed: t4}} 111ac9c3d2cSdrh 112e3740f27Sdrh# WITHOUT ROWID tables with a single-column PRIMARY KEY may be writable. 113e3740f27Sdrhdo_catchsql_test 4.1 { 114e3740f27Sdrh DROP TABLE IF EXISTS t4; 115e3740f27Sdrh CREATE VIRTUAL TABLE temp.t4 USING csv_wr( 116e3740f27Sdrh data= 117e3740f27Sdrh'1,2,3,4 118e3740f27Sdrh5,6,7,8 119e3740f27Sdrh9,10,11,12 120e3740f27Sdrh13,14,15,16', 121e3740f27Sdrh columns=4, 122e3740f27Sdrh schema= 123e3740f27Sdrh 'CREATE TABLE t3(a,b,c,d,PRIMARY KEY(b)) WITHOUT ROWID', 124e3740f27Sdrh testflags=1 125e3740f27Sdrh ); 126e3740f27Sdrh} {0 {}} 127e3740f27Sdrh 12809fc79bdSdando_catchsql_test 4.2 { 12909fc79bdSdan DROP TABLE IF EXISTS t5; 13009fc79bdSdan CREATE VIRTUAL TABLE temp.t5 USING csv_wr( 13109fc79bdSdan data= 13209fc79bdSdan '1,2,3,4 13309fc79bdSdan 5,6,7,8 13409fc79bdSdan 9,10,11,12 13509fc79bdSdan 13,14,15,16', 13609fc79bdSdan columns=4, 13709fc79bdSdan schema= 13809fc79bdSdan 'CREATE TABLE t3(a,b,c,d) WITHOUT ROWID', 13909fc79bdSdan testflags=1 14009fc79bdSdan ); 1415b156b2bSdan} {1 {vtable constructor failed: t5}} 14209fc79bdSdan 1434d3e6140Sdrh# 2018-04-24 1444d3e6140Sdrh# Memory leak reported on the sqlite-users mailing list by Ralf Junker. 1454d3e6140Sdrh# 1464d3e6140Sdrhdo_catchsql_test 4.3 { 1474d3e6140Sdrh CREATE VIRTUAL TABLE IF NOT EXISTS temp.t1 1484d3e6140Sdrh USING csv(filename='FileDoesNotExist.csv'); 1494d3e6140Sdrh} {1 {cannot open 'FileDoesNotExist.csv' for reading}} 15009fc79bdSdan 151*e893e2e4Sdrh# 2018-06-02 152*e893e2e4Sdrh# Problem with single-column CSV support reported on the mailing list 153*e893e2e4Sdrh# by Trent W. Buck. 154*e893e2e4Sdrh# 155*e893e2e4Sdrhdo_execsql_test 4.4 { 156*e893e2e4Sdrh CREATE VIRTUAL TABLE temp.trent USING csv(data='1'); 157*e893e2e4Sdrh SELECT * FROM trent; 158*e893e2e4Sdrh} {1} 159*e893e2e4Sdrh 16035db31b2Sdrhfinish_test 161