520bcc1170
FossilOrigin-Name: 90e63b7d845bacc9a1a1db13c1e9a406e5306faa
254 lines
6.5 KiB
Plaintext
254 lines
6.5 KiB
Plaintext
# 2009 Nov 11
|
|
#
|
|
# 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.
|
|
#
|
|
#***********************************************************************
|
|
#
|
|
# The focus of this file is testing the csv extension.
|
|
#
|
|
# $Id: csv1.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
|
|
#
|
|
|
|
if {![info exists testdir]} {
|
|
set testdir [file join [file dirname $argv0] .. .. test]
|
|
}
|
|
source $testdir/tester.tcl
|
|
|
|
# Test plan:
|
|
#
|
|
# csv-1.*: Creating/destroying csv tables.
|
|
# csv-2.*: Linear scans of csv data.
|
|
# csv-3.*: Test renaming an csv table.
|
|
# csv-4.*: CREATE errors
|
|
#
|
|
|
|
ifcapable !csv {
|
|
finish_test
|
|
return
|
|
}
|
|
|
|
# This file is delimited by ',' and has quoted fields.
|
|
set test1csv [file join [file dirname [info script]] test1.csv]
|
|
# This file is delimited by '|' and has quoted fields.
|
|
set test2csv [file join [file dirname [info script]] test2.csv]
|
|
# This file is delimited by '|'. It does NOT have quoted fields.
|
|
set test3csv [file join [file dirname [info script]] test3.csv]
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Test cases csv-1.* test CREATE and DROP table statements.
|
|
#
|
|
|
|
# Test creating and dropping an csv table with a header row.
|
|
#
|
|
do_test csv-1.1.1 {
|
|
execsql " CREATE VIRTUAL TABLE t1 USING csv('$test1csv', ',', USE_HEADER_ROW) "
|
|
} {}
|
|
do_test csv-1.1.2 {
|
|
execsql { SELECT name FROM sqlite_master ORDER BY name }
|
|
} {t1}
|
|
do_test csv-1.1.3 {
|
|
execsql {
|
|
DROP TABLE t1;
|
|
SELECT name FROM sqlite_master ORDER BY name;
|
|
}
|
|
} {}
|
|
|
|
# Test creating and dropping an csv table without a header row.
|
|
#
|
|
do_test csv-1.2.1 {
|
|
execsql " CREATE VIRTUAL TABLE t1 USING csv('$test1csv', ',') "
|
|
} {}
|
|
do_test csv-1.2.2 {
|
|
execsql { SELECT name FROM sqlite_master ORDER BY name }
|
|
} {t1}
|
|
do_test csv-1.2.3 {
|
|
execsql {
|
|
DROP TABLE t1;
|
|
SELECT name FROM sqlite_master ORDER BY name;
|
|
}
|
|
} {}
|
|
|
|
# Test creating and dropping an csv table without a header row
|
|
# and with the default delimiter ','.
|
|
#
|
|
do_test csv-1.3.1 {
|
|
execsql " CREATE VIRTUAL TABLE t1 USING csv('$test1csv') "
|
|
} {}
|
|
do_test csv-1.3.2 {
|
|
execsql { SELECT name FROM sqlite_master ORDER BY name }
|
|
} {t1}
|
|
do_test csv-1.3.3 {
|
|
execsql {
|
|
DROP TABLE t1;
|
|
SELECT name FROM sqlite_master ORDER BY name;
|
|
}
|
|
} {}
|
|
|
|
# Test creating and dropping an csv table without a header row
|
|
# and with the custom delimiter '|'.
|
|
#
|
|
do_test csv-1.4.1 {
|
|
execsql " CREATE VIRTUAL TABLE t1 USING csv('$test2csv', '|') "
|
|
} {}
|
|
do_test csv-1.4.2 {
|
|
execsql { SELECT name FROM sqlite_master ORDER BY name }
|
|
} {t1}
|
|
do_test csv-1.4.3 {
|
|
execsql {
|
|
DROP TABLE t1;
|
|
SELECT name FROM sqlite_master ORDER BY name;
|
|
}
|
|
} {}
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Test cases csv-2.* test linear scans of csv table data.
|
|
#
|
|
do_test csv-2.1.1 {
|
|
execsql " CREATE VIRTUAL TABLE t1 USING csv('$test1csv', ',', USE_HEADER_ROW) "
|
|
} {}
|
|
do_test csv-2.1.2 {
|
|
execsql {
|
|
SELECT * FROM t1;
|
|
}
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-2.1.3 {
|
|
execsql {
|
|
SELECT * FROM t1 WHERE colA='a';
|
|
}
|
|
} {a b c a b c a b {c .. z} a b c,d}
|
|
|
|
do_test csv-2.2.1 {
|
|
execsql " CREATE VIRTUAL TABLE t2 USING csv('$test1csv', ',') "
|
|
} {}
|
|
do_test csv-2.2.2 {
|
|
execsql {
|
|
SELECT * FROM t2;
|
|
}
|
|
} {colA colB colC 1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-2.2.3 {
|
|
execsql {
|
|
SELECT * FROM t2 WHERE col1='a';
|
|
}
|
|
} {a b c a b c a b {c .. z} a b c,d}
|
|
|
|
# Test scanning with the custom delimiter '|'.
|
|
#
|
|
do_test csv-2.3.1 {
|
|
execsql " CREATE VIRTUAL TABLE t3 USING csv('$test2csv', '|') "
|
|
} {}
|
|
do_test csv-2.3.2 {
|
|
execsql {
|
|
SELECT * FROM t3;
|
|
}
|
|
} {colA colB colC 1 2 3 a b c a b c a b {c .. z} a b c|d}
|
|
do_test csv-2.3.3 {
|
|
execsql {
|
|
SELECT * FROM t3 WHERE col1='a';
|
|
}
|
|
} {a b c a b c a b {c .. z} a b c|d}
|
|
|
|
# Test scanning with the custom delimiter ';'. The test file
|
|
# uses | for a delimiter, so everything should be treated as
|
|
# a single column.
|
|
#
|
|
do_test csv-2.4.1 {
|
|
execsql " CREATE VIRTUAL TABLE t4 USING csv('$test3csv', ';') "
|
|
} {}
|
|
do_test csv-2.4.2 {
|
|
execsql {
|
|
SELECT * FROM t4;
|
|
}
|
|
} {colA|colB|colC 1|2|3 a|b|c {a|b|c .. z} a|b|c|d}
|
|
do_test csv-2.4.3 {
|
|
execsql {
|
|
SELECT * FROM t4 WHERE col1 LIKE 'a%';
|
|
}
|
|
} {a|b|c {a|b|c .. z} a|b|c|d}
|
|
|
|
# Test rowid column.
|
|
#
|
|
do_test csv-2.5.1 {
|
|
execsql {
|
|
SELECT rowid FROM t1;
|
|
}
|
|
} {21 27 33 41 58}
|
|
do_test csv-2.5.2 {
|
|
execsql {
|
|
SELECT rowid FROM t1 WHERE colA='a';
|
|
}
|
|
} {27 33 41 58}
|
|
|
|
# Clean-up.
|
|
#
|
|
do_test csv-2.6.1 {
|
|
execsql {
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t3;
|
|
DROP TABLE t4;
|
|
}
|
|
} {}
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Test cases csv-3.* test rename operations.
|
|
#
|
|
do_test csv-3.1.1 {
|
|
execsql " CREATE VIRTUAL TABLE t1 USING csv('$test1csv', ',', USE_HEADER_ROW) "
|
|
execsql " CREATE VIRTUAL TABLE t2 USING csv('$test1csv', ',', USE_HEADER_ROW) "
|
|
} {}
|
|
do_test csv-3.1.2 {
|
|
catchsql { ALTER TABLE t2 RENAME TO t1 }
|
|
} {1 {there is already another table or index with this name: t1}}
|
|
do_test csv-3.1.3 {
|
|
execsql {
|
|
DROP TABLE t1;
|
|
ALTER TABLE t2 RENAME TO t1
|
|
}
|
|
} {}
|
|
do_test csv-3.1.4 {
|
|
execsql { ALTER TABLE t1 RENAME TO t5 }
|
|
execsql { SELECT * FROM t5 }
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-3.1.5 {
|
|
db close
|
|
sqlite3 db test.db
|
|
execsql { SELECT * FROM t5 }
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-3.1.6 {
|
|
execsql { ALTER TABLE t5 RENAME TO 'raisara "one"'''}
|
|
execsql { SELECT * FROM "raisara ""one""'" }
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-3.1.7 {
|
|
execsql { SELECT * FROM 'raisara "one"''' }
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-3.1.8 {
|
|
execsql { ALTER TABLE "raisara ""one""'" RENAME TO "abc 123" }
|
|
execsql { SELECT * FROM "abc 123" }
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
do_test csv-3.1.9 {
|
|
db close
|
|
sqlite3 db test.db
|
|
execsql { SELECT * FROM "abc 123" }
|
|
} {1 2 3 a b c a b c a b {c .. z} a b c,d}
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Test cases csv-4.* test CREATE errors
|
|
#
|
|
|
|
# Test creating and dropping an csv table with a header row.
|
|
#
|
|
do_test csv-4.1.1 {
|
|
catchsql " CREATE VIRTUAL TABLE t1 USING csv() "
|
|
} {1 {No CSV file specified}}
|
|
do_test csv-4.1.2 {
|
|
catchsql " CREATE VIRTUAL TABLE t1 USING csv('foo') "
|
|
} {1 {Error opening CSV file: 'foo'}}
|
|
do_test csv-4.1.3 {
|
|
catchsql " CREATE VIRTUAL TABLE t1 USING csv(foo foo) "
|
|
} {1 {Error opening CSV file: 'foo foo'}}
|