xref: /sqlite-3.40.0/test/csv01.test (revision e893e2e4)
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