should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,485 @@
# 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()'.