Files
email-tracker/external/duckdb/test/sql/function/string/test_glob.test
2025-10-24 19:21:19 -05:00

257 lines
2.7 KiB
SQL

# name: test/sql/function/string/test_glob.test
# description: Test GLOB statement
# group: [string]
statement ok
PRAGMA enable_verification
# scalar glob
query T
SELECT 'aaa' GLOB 'bbb'
----
0
query T
SELECT 'aaa' GLOB 'aaa'
----
1
query T
SELECT 'aaa' GLOB '*'
----
1
query T
SELECT 'aaa' GLOB '*a'
----
1
query T
SELECT 'aaa' GLOB '*b'
----
0
query T
SELECT 'aaa' GLOB 'a*'
----
1
query T
SELECT 'aaa' GLOB 'b*'
----
0
query T
SELECT 'aaa' GLOB 'a?a'
----
1
query T
SELECT 'aaa' GLOB 'a?'
----
0
query T
SELECT 'aaa' GLOB '??*'
----
1
query T
SELECT 'aaa' GLOB '????*'
----
0
query T
SELECT 'ababac' GLOB '*abac'
----
1
# bracket matching
query T
SELECT '3' GLOB '[0-9]'
----
1
query T
SELECT 'a' GLOB '[0-9]'
----
0
# multiple brackets in a row
query T
SELECT '012' GLOB '[0-9][0-9][0-9]'
----
1
# trailing in pattern after brackets
query T
SELECT '012' GLOB '[0-9][0-9][0-9]a'
----
0
# trailing in string after brackets
query T
SELECT '012a' GLOB '[0-9][0-9][0-9]'
----
0
# more complicated brackets
query T
SELECT 'b3' GLOB '[abc0-9][abc0-9]'
----
1
query T
SELECT 'd3' GLOB '[abc0-9][abc0-9]'
----
0
# inverse brackets
query T
SELECT 'a' GLOB '[!0-9]'
----
1
query T
SELECT '1' GLOB '[!0-9]'
----
0
# escapes
query T
SELECT '*' GLOB '\*'
----
1
query T
SELECT 'a' GLOB '\*'
----
0
# escaped escape
query T
SELECT '\' GLOB '\\'
----
1
# '
query T
SELECT 'a' GLOB '\\'
----
0
# bracket in a bracket
# this is valid as long as the closing bracket is the first non-exclamation mark character
query T
SELECT '3]' GLOB '[]3][]]'
----
1
query T
SELECT '3]' GLOB '[]3][]]'
----
1
# bracket is not properly closed
query T
SELECT '3' GLOB '[3'
----
0
# trailing range
query T
SELECT '3' GLOB '[3-'
----
0
# trailing escape
query T
SELECT '3' GLOB '\\'
----
0
query T
SELECT '3' GLOB '\'
----
0
# a bunch of asterisks
query T
SELECT '3' GLOB '3***'
----
1
query T
SELECT '1245' GLOB '**1***2*******4*5***'
----
1
query T
SELECT 'aaaaaaaaaaaaaaaaaaaaaaa' GLOB '*a'
----
1
# special characters in brackets
query T
SELECT '?' GLOB '[?]'
----
1
query T
SELECT '3' GLOB '[?]'
----
0
query T
SELECT '*' GLOB '[*]'
----
1
query T
SELECT '3' GLOB '[*]'
----
0
# multiple ranges in a bracket
query T
SELECT '6' GLOB '[1-35-7]'
----
1
query T
SELECT '4' GLOB '[1-35-7]'
----
0
# trailing bracket
query T
SELECT '4' GLOB '['
----
0
# like with table
statement ok
CREATE TABLE strings(s STRING, pat STRING);
statement ok
INSERT INTO strings VALUES ('abab', 'ab*'), ('aaa', 'a?a'), ('aaa', '*b*')
query T
SELECT s FROM strings WHERE s GLOB 'ab*'
----
abab
query T
SELECT s FROM strings WHERE 'aba' GLOB pat
----
abab
aaa
aaa
query T
SELECT s FROM strings WHERE s GLOB pat
----
abab
aaa