486 lines
9.1 KiB
SQL
486 lines
9.1 KiB
SQL
# name: test/sql/function/string/parse_path.test
|
|
# description: parse path functions test
|
|
# group: [string]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
require notwindows
|
|
|
|
# all separators option
|
|
query T
|
|
SELECT * FROM (VALUES (parse_path('path/to/file.csv', 'system')), (parse_path('path/to/file.csv\file2.csv', 'both_slash')), (parse_path('path/to/file.csv', 'forward_slash')), (parse_path('path\to\file.csv/file2.csv', 'backslash'))) tbl(i);
|
|
----
|
|
[path, to, file.csv]
|
|
[path, to, file.csv, file2.csv]
|
|
[path, to, file.csv]
|
|
[path, to, file.csv/file2.csv]
|
|
|
|
# default separator
|
|
query T
|
|
SELECT parse_path('path/to/file.csv\file2.csv');
|
|
----
|
|
[path, to, file.csv, file2.csv]
|
|
|
|
# no separators in path
|
|
query T
|
|
SELECT parse_path('file.csv', 'both_slash');
|
|
----
|
|
[file.csv]
|
|
|
|
# start with separator
|
|
query T
|
|
SELECT parse_path('/path/to/file.csv', 'forward_slash');
|
|
----
|
|
[/, path, to, file.csv]
|
|
|
|
query T
|
|
select parse_path('\path\to\file', 'forward_slash');
|
|
----
|
|
[\path\to\file]
|
|
|
|
# consecutive separators
|
|
query T
|
|
SELECT parse_path('//path/to//file.csv', 'forward_slash');
|
|
----
|
|
[/, path, to, file.csv]
|
|
|
|
# special characters
|
|
query T
|
|
SELECT parse_path('p@th\t0\wh@t3ve%\42/12 ch,ars.sth', 'both_slash');
|
|
----
|
|
[p@th, t0, wh@t3ve%, 42, '12 ch,ars.sth']
|
|
|
|
# custom separator
|
|
query T
|
|
SELECT parse_path('path/to/file.csv','@');
|
|
----
|
|
[path, to, file.csv]
|
|
|
|
query T
|
|
SELECT parse_path('path/to/file.csv', NULL);
|
|
----
|
|
[path, to, file.csv]
|
|
|
|
query T
|
|
SELECT parse_path(NULL, NULL);
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_path(NULL, '');
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_path('');
|
|
----
|
|
[]
|
|
|
|
query T
|
|
SELECT parse_path('', '');
|
|
----
|
|
[]
|
|
|
|
query T
|
|
select parse_path('/');
|
|
----
|
|
[/]
|
|
|
|
query T
|
|
select parse_path('///');
|
|
----
|
|
[/]
|
|
|
|
# only separators in path
|
|
query T
|
|
SELECT parse_path('/\\/', 'both_slash');
|
|
----
|
|
[/]
|
|
|
|
# test incorrect usage
|
|
statement error
|
|
SELECT parse_path();
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_path()'. You might need to add explicit type casts.
|
|
|
|
statement error
|
|
SELECT parse_path('/path/to', true, 'system');
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_path(STRING_LITERAL, BOOLEAN, STRING_LITERAL)'.
|
|
|
|
|
|
# test parse_dirname
|
|
# all separators option
|
|
query T
|
|
SELECT * FROM (VALUES (parse_dirname('path/to/file.csv', 'system')), (parse_dirname('path/to/file.csv\file2.csv', 'both_slash')), (parse_dirname('path/to/file.csv', 'forward_slash')), (parse_dirname('path\to\file.csv/file2.csv', 'backslash'))) tbl(i);
|
|
----
|
|
path
|
|
path
|
|
path
|
|
path
|
|
|
|
# default separator
|
|
query T
|
|
SELECT parse_dirname('path/to/file.csv\file2.csv');
|
|
----
|
|
path
|
|
|
|
# no separator in path
|
|
query T
|
|
SELECT parse_dirname('file.csv', 'backslash');
|
|
----
|
|
(empty)
|
|
|
|
# only separators in path
|
|
query T
|
|
SELECT parse_dirname('\', 'backslash');
|
|
----
|
|
\
|
|
|
|
# path with only one separator, different from the separator option
|
|
query T
|
|
SELECT parse_dirname('/', 'backslash');
|
|
----
|
|
(empty)
|
|
|
|
# start with separator
|
|
query T
|
|
SELECT parse_dirname('/path/to/file.csv', 'forward_slash');
|
|
----
|
|
/
|
|
|
|
# no forward slashes in the path
|
|
query T
|
|
SELECT parse_dirname('\path\to\file', 'forward_slash');
|
|
----
|
|
(empty)
|
|
|
|
# have consecutive separators
|
|
query T
|
|
SELECT parse_dirname('///path/to//file.csv', 'forward_slash');
|
|
----
|
|
/
|
|
|
|
# special characters
|
|
query T
|
|
SELECT parse_dirname('wh@t3ve%\42/12 ch,ars.sth', 'both_slash');
|
|
----
|
|
wh@t3ve%
|
|
|
|
# custom separator
|
|
query T
|
|
SELECT parse_dirname('path/to/file.csv','@');
|
|
----
|
|
path
|
|
|
|
query T
|
|
SELECT parse_dirname('path/to/file.csv', NULL);
|
|
----
|
|
path
|
|
|
|
query T
|
|
SELECT parse_dirname(NULL, NULL);
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_dirname(NULL, '');
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_dirname('');
|
|
----
|
|
(empty)
|
|
|
|
query T
|
|
SELECT parse_dirname('', '');
|
|
----
|
|
(empty)
|
|
|
|
# test incorrect usage
|
|
statement error
|
|
SELECT parse_dirname();
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_dirname()'.
|
|
|
|
statement error
|
|
SELECT parse_dirname('/path/to', true, 'system');
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_dirname(STRING_LITERAL, BOOLEAN, STRING_LITERAL)'.
|
|
|
|
# test parse_dirpath
|
|
# all separators option
|
|
query T
|
|
SELECT * FROM (VALUES (parse_dirpath('path/to/file.csv', 'system')), (parse_dirpath('path/to/file.csv\file2.csv', 'both_slash')), (parse_dirpath('path/to/file.csv', 'forward_slash')), (parse_dirpath('path\to\file.csv/file2.csv', 'backslash'))) tbl(i);
|
|
----
|
|
path/to
|
|
path/to/file.csv
|
|
path/to
|
|
path\to
|
|
|
|
# default separator
|
|
query T
|
|
SELECT parse_dirpath('path/to/file.csv\file2.csv');
|
|
----
|
|
path/to/file.csv
|
|
|
|
# no separator in path
|
|
query T
|
|
SELECT parse_dirpath('file.csv', 'backslash');
|
|
----
|
|
(empty)
|
|
|
|
# only separators in path
|
|
query T
|
|
SELECT parse_dirpath('\', 'backslash');
|
|
----
|
|
\
|
|
|
|
# path with only one separator, different from the separator option
|
|
query T
|
|
SELECT parse_dirpath('/', 'backslash');
|
|
----
|
|
(empty)
|
|
|
|
# start with separator
|
|
query T
|
|
SELECT parse_dirpath('/path/to/file.csv', 'forward_slash');
|
|
----
|
|
/path/to
|
|
|
|
# no forward slashes in the path
|
|
query T
|
|
SELECT parse_dirpath('\path\to\file', 'forward_slash');
|
|
----
|
|
(empty)
|
|
|
|
# have consecutive separators
|
|
query T
|
|
SELECT parse_dirpath('///path/to//file.csv', 'forward_slash');
|
|
----
|
|
///path/to/
|
|
|
|
# special characters
|
|
query T
|
|
SELECT parse_dirpath('wh@t3ve%\42/12 ch,ars.sth', 'both_slash');
|
|
----
|
|
wh@t3ve%\42
|
|
|
|
# custom separator
|
|
query T
|
|
SELECT parse_dirpath('path/to/file.csv','@');
|
|
----
|
|
path/to
|
|
|
|
query T
|
|
SELECT parse_dirpath('path/to/file.csv', NULL);
|
|
----
|
|
path/to
|
|
|
|
query T
|
|
SELECT parse_dirpath(NULL, NULL);
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_dirpath(NULL, '');
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_dirpath('');
|
|
----
|
|
(empty)
|
|
|
|
query T
|
|
SELECT parse_dirpath('', '');
|
|
----
|
|
(empty)
|
|
|
|
# test incorrect usage
|
|
statement error
|
|
SELECT parse_dirpath();
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_dirpath()'.
|
|
|
|
statement error
|
|
SELECT parse_dirpath('/path/to', true, 'system');
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_dirpath(STRING_LITERAL, BOOLEAN, STRING_LITERAL)'.
|
|
|
|
|
|
# test parse_filename
|
|
# all separators option, default trim_extension
|
|
query T
|
|
SELECT * FROM (VALUES (parse_filename('path/to/file.csv', 'system')), (parse_filename('path/to/file.csv\file2.csv', 'both_slash')), (parse_filename('path/to/file.csv', 'forward_slash')), (parse_filename('path\to\file.csv/file2.csv', 'backslash'))) tbl(i);
|
|
----
|
|
file.csv
|
|
file2.csv
|
|
file.csv
|
|
file.csv/file2.csv
|
|
|
|
# default separator
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv\file2.csv');
|
|
----
|
|
file2.csv
|
|
|
|
query T
|
|
SELECT parse_filename('/path/to/file.csv\file2.csv', true);
|
|
----
|
|
file2
|
|
|
|
query T
|
|
SELECT parse_filename('/path/to/file.csv\file2.csv', false);
|
|
----
|
|
file2.csv
|
|
|
|
# trim extension
|
|
query T
|
|
SELECT * FROM (VALUES (parse_filename('path/to/file.csv', true, 'system')), (parse_filename('path/to/file.csv\file2.csv', true, 'both_slash')), (parse_filename('path/to/file.csv', true, 'forward_slash')), (parse_filename('path\to\file.csv/file2.csv', true, 'backslash'))) tbl(i);
|
|
----
|
|
file
|
|
file2
|
|
file
|
|
file.csv/file2
|
|
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv\file2', true, 'forward_slash');
|
|
----
|
|
file
|
|
|
|
# use varchar type for boolean values as 2nd argument
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv', 'true', 'system');
|
|
----
|
|
file
|
|
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv', 'false', 'system');
|
|
----
|
|
file.csv
|
|
|
|
# no separators in path
|
|
query T
|
|
SELECT parse_filename('file.csv', 'backslash');
|
|
----
|
|
file.csv
|
|
|
|
query T
|
|
SELECT parse_filename('file.csv', true, 'backslash');
|
|
----
|
|
file
|
|
|
|
# only separators in path
|
|
query T
|
|
select parse_filename('/');
|
|
----
|
|
(empty)
|
|
|
|
query T
|
|
select parse_filename('//');
|
|
----
|
|
(empty)
|
|
|
|
query T
|
|
select parse_filename('/', 'backslash');
|
|
----
|
|
/
|
|
|
|
query T
|
|
SELECT parse_filename('/', true, 'forward_slash');
|
|
----
|
|
(empty)
|
|
|
|
# separator at the end
|
|
query T
|
|
SELECT parse_filename('path/to/', 'forward_slash');
|
|
----
|
|
(empty)
|
|
|
|
query T
|
|
SELECT parse_filename('path/to///', true, 'forward_slash');
|
|
----
|
|
(empty)
|
|
|
|
# special characters
|
|
query T
|
|
SELECT parse_filename('wh@t3ve%\42/12 ch,ars.sth', 'both_slash');
|
|
----
|
|
12 ch,ars.sth
|
|
|
|
query T
|
|
SELECT parse_filename('wh@t3ve%\42/12 ch,ars.sth', true, 'both_slash');
|
|
----
|
|
12 ch,ars
|
|
|
|
# custom separator
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv','@');
|
|
----
|
|
file.csv
|
|
|
|
# no extension
|
|
query T
|
|
SELECT parse_filename('path/to/file', true, 'both_slash');
|
|
----
|
|
file
|
|
|
|
query T
|
|
SELECT parse_filename(NULL, true, 'system');
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv', NULL);
|
|
----
|
|
file.csv
|
|
|
|
query T
|
|
SELECT parse_filename('path/to/file.csv', NULL, NULL);
|
|
----
|
|
file.csv
|
|
|
|
query T
|
|
SELECT parse_filename(NULL, NULL, NULL);
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_filename(NULL, '');
|
|
----
|
|
NULL
|
|
|
|
query T
|
|
SELECT parse_filename('', '');
|
|
----
|
|
(empty)
|
|
|
|
query T
|
|
SELECT parse_filename('');
|
|
----
|
|
(empty)
|
|
|
|
# test incorrect usage
|
|
statement error
|
|
SELECT parse_filename(true);
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_filename(BOOLEAN)'.
|
|
|
|
statement error
|
|
SELECT parse_filename('path/to/file.csv', 'system', true);
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_filename(STRING_LITERAL, STRING_LITERAL, BOOLEAN)'.
|
|
|
|
statement error
|
|
SELECT parse_filename('path/to/file.csv', 'system', 'true');
|
|
----
|
|
Conversion Error: Could not convert string 'system' to BOOL
|
|
|
|
statement error
|
|
SELECT parse_filename();
|
|
----
|
|
Binder Error: No function matches the given name and argument types 'parse_filename()'.
|