# 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()'.