257 lines
2.7 KiB
SQL
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
|
|
|