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

250 lines
3.2 KiB
SQL

# name: test/sql/function/string/test_prefix.test
# description: Prefix test
# group: [string]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
# "Early out prefix"
query T
SELECT prefix('abcd', 'a')
----
1
query T
SELECT prefix('abcd', 'ab')
----
1
query T
SELECT prefix('abcd', 'abc')
----
1
query T
SELECT prefix('abcd', 'abcd')
----
1
query T
SELECT prefix('abcd', 'b')
----
0
# "Inlined string"
query T
SELECT prefix('abcdefgh', 'a')
----
1
query T
SELECT prefix('abcdefgh', 'ab')
----
1
query T
SELECT prefix('abcdefgh', 'abc')
----
1
query T
SELECT prefix('abcdefgh', 'abcd')
----
1
query T
SELECT prefix('abcdefgh', 'abcde')
----
1
query T
SELECT prefix('abcdefgh', 'b')
----
0
# Longer (non-inlined) strings
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'a')
----
1
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'ab')
----
1
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'abc')
----
1
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'abcd')
----
1
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'abcde')
----
1
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'b')
----
0
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwx')
----
1
query T
SELECT prefix('abcdefghijklmnopqrstuvwxyz', 'abcfefghijklmnopqrstuvwx')
----
0
# "Empty string and prefix"
query T
SELECT prefix('', 'aaa')
----
0
query T
SELECT prefix('aaa', '')
----
1
# "Issue #572 alloc exception on empty table"
statement ok
CREATE TABLE t0(c0 VARCHAR)
query T
SELECT * FROM t0 WHERE PREFIX(t0.c0, '')
----
# "Prefix test with UTF8"
query T
SELECT prefix('átomo', 'á')
----
1
query T
SELECT prefix('átomo', 'á')
----
1
query T
SELECT prefix('átomo', 'a')
----
0
query T
SELECT prefix('olá mundo', 'olá')
----
1
query T
SELECT prefix('olá mundo', 'olá')
----
1
query T
SELECT prefix('olá mundo', 'ola')
----
0
query T
SELECT prefix('ñeft', 'ñ')
----
1
query T
SELECT prefix('ñeft', 'ñ')
----
1
query T
SELECT prefix('ñeft', 'ñeft')
----
1
query T
SELECT prefix('ñeft', 'neft')
----
0
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ')
----
1
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ')
----
1
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two n')
----
0
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ three')
----
1
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ three ₡')
----
1
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ three ₡ four 🦆')
----
1
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ three ₡ four 🦆 end')
----
1
query T
SELECT prefix('two ñ three ₡ four 🦆 end', 'two ñ three ₡ four 🦆 end')
----
1
# test empty prefix removal
statement ok
INSERT INTO t0 VALUES ('a'), ('b'), ('d')
query I
SELECT COUNT(*) FROM t0 WHERE prefix(t0.c0, '');
----
3
query II
SELECT c0, prefix(t0.c0, '') FROM t0 WHERE c0 <> 'b' ORDER BY t0.c0;
----
a 1
d 1
# now with a NULL value
statement ok
INSERT INTO t0 VALUES (NULL)
query I
SELECT COUNT(*) FROM t0 WHERE prefix(t0.c0, '');
----
3
query II
SELECT c0, prefix(t0.c0, '') FROM t0 WHERE c0 IS NULL OR c0 <> 'b' ORDER BY t0.c0;
----
NULL NULL
a 1
d 1