blob: 61d5e2452bc7ea3e40ba6bb64a67af889ef8dd12 [file] [log] [blame]
#!sqlite3
#
# 2025-12-28
#
# 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.
#
#***********************************************************************
#
# Test cases for the ".import" command of the CLI.
# To run these tests:
#
# ./sqlite3 test/import01.sql
#
.testcase setup
.open :memory:
.mode tty
.check ''
.testcase 100
CREATE TABLE t1(a,b,c);
.import -csv <<END t1
111,222,333
abc,def,ghi
END
SELECT * FROM t1;
.check <<END
╭───────┬───────┬───────╮
a b c
╞═══════╪═══════╪═══════╡
'111' '222' '333'
abc def ghi
╰───────┴───────┴───────╯
END
.testcase 110
DELETE FROM t1;
.import -colsep ";" <<END t1
this;is a;test
one;two;three
END
SELECT * FROM t1;
.check <<END
╭──────┬──────┬───────╮
a b c
╞══════╪══════╪═══════╡
this is a test
one two three
╰──────┴──────┴───────╯
END
.testcase 120
DELETE FROM t1;
.import -colsep "," -rowsep ';' <<END t1
this,is a,test;one,two,three;
END
SELECT * FROM t1;
.check <<END
╭──────┬──────┬───────╮
a b c
╞══════╪══════╪═══════╡
this is a test
one two three
╰──────┴──────┴───────╯
END
.testcase 130
DELETE FROM t1;
.import -csv -colsep "," -rowsep "\n" <<END t1
this,"is a","test ""with quotes"""
"second",,"line"
END
SELECT * FROM t1;
.check <<END
╭────────┬──────┬────────────────────╮
a b c
╞════════╪══════╪════════════════════╡
this is a test "with quotes"
second line
╰────────┴──────┴────────────────────╯
END
.testcase 131
DELETE FROM t1;
.import -ascii -colsep "," -rowsep "\n" <<END t1
this,"is a","test ""with quotes"""
"second",,"line"
END
SELECT * FROM t1;
.check <<END
╭──────────┬────────┬────────────────────────╮
a b c
╞══════════╪════════╪════════════════════════╡
this "is a" "test ""with quotes"""
"second" "line"
╰──────────┴────────┴────────────────────────╯
END
.testcase 140
DROP TABLE t1;
.import -csv <<END t1
"abc","def","xy z"
"This","is","a"
"test","...",
END
SELECT * FROM t1;
.check <<END
╭──────┬─────┬──────╮
abc def xy z
╞══════╪═════╪══════╡
This is a
test ...
╰──────┴─────┴──────╯
END
.testcase 141
SELECT sql FROM sqlite_schema WHERE name='t1';
.check <<END
╭──────────────────────────────────────╮
sql
╞══════════════════════════════════════╡
CREATE TABLE "t1"(
"abc" TEXT, "def" TEXT, "xy z" TEXT)
╰──────────────────────────────────────╯
END
.testcase 150
DROP TABLE t1;
.import -csv -v <<END t1
"abc","def","xy z"
"This","is","a"
"test","...",
END
SELECT * FROM t1;
.check <<END
Column separator ",", row separator "\n"
CREATE TABLE "main"."t1"(
"abc" TEXT, "def" TEXT, "xy z" TEXT)
Added 2 rows with 0 errors using 3 lines of input
╭──────┬─────┬──────╮
abc def xy z
╞══════╪═════╪══════╡
This is a
test ...
╰──────┴─────┴──────╯
END
.testcase 160
DROP TABLE t1;
.import -csv -schema TEMP <<END t2
"x"
"abcdef"
END
SELECT * FROM t2;
.tables
.check <<END
╭────────╮
x
╞════════╡
abcdef
╰────────╯
temp.t2
END
.testcase 170
.import -csv -skip 2 <<END t3
a,b,c
d,e,f
g,h,i
j,k,l
m,n,o
END
SELECT * FROM t3;
.check <<END
╭───┬───┬───╮
g h i
╞═══╪═══╪═══╡
j k l
m n o
╰───┴───┴───╯
END
.testcase 180
DELETE FROM t3;
.import -csv -skip 7 <<END t3
a,b,c
d,e,f
g,h,i
j,k,l
m,n,o
END
SELECT * FROM t3;
.check <<END
END
.testcase 200 --error-prefix ERROR:
.import -csv
.check 'ERROR: Missing FILE argument'
.testcase 201
.import -csv file1.csv
.check 'ERROR: Missing TABLE argument'
.testcase --error-prefix test-error: 202
.import -csvxyzzy file1.csv
.check <<END
test-error: .import -csvxyzzy file1.csv
test-error: ^--- unknown option
END
.testcase 203
.import -csv file1.csv t4 -colsep
.check <<END
test-error: .import -csv file1.csv t4 -colsep
test-error: missing argument ---^
END