Files
dennis zhuang d8563ba56d feat: adds regex_extract function and more type tests (#7107)
* feat: adds format, regex_extract function and more type tests

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* fix: forgot functions

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* chore: forgot null type

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* test: forgot date type

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* feat: remove format function

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* test: update results after upgrading datafusion

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

---------

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
2025-10-25 08:41:49 +00:00

275 lines
9.2 KiB
Plaintext

-- String TRIM and PAD function tests
-- TRIM functions
SELECT TRIM(' hello world ');
+--------------------------------+
| btrim(Utf8(" hello world ")) |
+--------------------------------+
| hello world |
+--------------------------------+
SELECT LTRIM(' hello world ');
+--------------------------------+
| ltrim(Utf8(" hello world ")) |
+--------------------------------+
| hello world |
+--------------------------------+
SELECT RTRIM(' hello world ');
+--------------------------------+
| rtrim(Utf8(" hello world ")) |
+--------------------------------+
| hello world |
+--------------------------------+
-- TRIM with specific characters
SELECT TRIM('x' FROM 'xxxhello worldxxx');
+--------------------------------------------+
| btrim(Utf8("xxxhello worldxxx"),Utf8("x")) |
+--------------------------------------------+
| hello world |
+--------------------------------------------+
SELECT LTRIM('hello world', 'hel');
+----------------------------------------+
| ltrim(Utf8("hello world"),Utf8("hel")) |
+----------------------------------------+
| o world |
+----------------------------------------+
SELECT RTRIM('hello world', 'dlr');
+----------------------------------------+
| rtrim(Utf8("hello world"),Utf8("dlr")) |
+----------------------------------------+
| hello wo |
+----------------------------------------+
-- PAD functions
SELECT LPAD('hello', 10, '*');
+-----------------------------------------+
| lpad(Utf8("hello"),Int64(10),Utf8("*")) |
+-----------------------------------------+
| *****hello |
+-----------------------------------------+
SELECT RPAD('hello', 10, '*');
+-----------------------------------------+
| rpad(Utf8("hello"),Int64(10),Utf8("*")) |
+-----------------------------------------+
| hello***** |
+-----------------------------------------+
-- Truncate
SELECT LPAD('hello', 3, '*');
+----------------------------------------+
| lpad(Utf8("hello"),Int64(3),Utf8("*")) |
+----------------------------------------+
| hel |
+----------------------------------------+
-- Truncate
SELECT RPAD('hello', 3, '*');
+----------------------------------------+
| rpad(Utf8("hello"),Int64(3),Utf8("*")) |
+----------------------------------------+
| hel |
+----------------------------------------+
-- PAD with multi-character padding
SELECT LPAD('test', 10, 'ab');
+-----------------------------------------+
| lpad(Utf8("test"),Int64(10),Utf8("ab")) |
+-----------------------------------------+
| abababtest |
+-----------------------------------------+
SELECT RPAD('test', 10, 'xy');
+-----------------------------------------+
| rpad(Utf8("test"),Int64(10),Utf8("xy")) |
+-----------------------------------------+
| testxyxyxy |
+-----------------------------------------+
-- Test with table data
CREATE TABLE trim_pad_test(s VARCHAR, ts TIMESTAMP TIME INDEX);
Affected Rows: 0
INSERT INTO trim_pad_test VALUES
(' hello ', 1000),
('world ', 2000),
(' test', 3000),
('no-spaces', 4000),
('', 5000),
(NULL, 6000);
Affected Rows: 6
-- Apply TRIM functions to table data
SELECT s, TRIM(s), LTRIM(s), RTRIM(s) FROM trim_pad_test ORDER BY ts;
+-----------+------------------------+------------------------+------------------------+
| s | btrim(trim_pad_test.s) | ltrim(trim_pad_test.s) | rtrim(trim_pad_test.s) |
+-----------+------------------------+------------------------+------------------------+
| hello | hello | hello | hello |
| world | world | world | world |
| test | test | test | test |
| no-spaces | no-spaces | no-spaces | no-spaces |
| | | | |
| | | | |
+-----------+------------------------+------------------------+------------------------+
-- Apply PAD functions
SELECT s, LPAD(TRIM(s), 15, '-'), RPAD(TRIM(s), 15, '+') FROM trim_pad_test WHERE s IS NOT NULL ORDER BY ts;
+-----------+--------------------------------------------------+--------------------------------------------------+
| s | lpad(btrim(trim_pad_test.s),Int64(15),Utf8("-")) | rpad(btrim(trim_pad_test.s),Int64(15),Utf8("+")) |
+-----------+--------------------------------------------------+--------------------------------------------------+
| hello | ----------hello | hello++++++++++ |
| world | ----------world | world++++++++++ |
| test | -----------test | test+++++++++++ |
| no-spaces | ------no-spaces | no-spaces++++++ |
| | --------------- | +++++++++++++++ |
+-----------+--------------------------------------------------+--------------------------------------------------+
-- Test with Unicode characters
SELECT TRIM(' 中文测试 ');
+-----------------------------+
| btrim(Utf8(" 中文测试 ")) |
+-----------------------------+
| 中文测试 |
+-----------------------------+
SELECT LPAD('🚀', 10, '★');
+--------------------------------------+
| lpad(Utf8("🚀"),Int64(10),Utf8("★")) |
+--------------------------------------+
| ★★★★★★★★★🚀 |
+--------------------------------------+
SELECT RPAD('café', 8, '•');
+---------------------------------------+
| rpad(Utf8("café"),Int64(8),Utf8("•")) |
+---------------------------------------+
| café•••• |
+---------------------------------------+
-- Edge cases
SELECT TRIM('');
+-----------------+
| btrim(Utf8("")) |
+-----------------+
| |
+-----------------+
SELECT TRIM(NULL);
+-------------+
| btrim(NULL) |
+-------------+
| |
+-------------+
SELECT LPAD('', 5, '*');
+-----------------------------------+
| lpad(Utf8(""),Int64(5),Utf8("*")) |
+-----------------------------------+
| ***** |
+-----------------------------------+
SELECT RPAD('', 5, '*');
+-----------------------------------+
| rpad(Utf8(""),Int64(5),Utf8("*")) |
+-----------------------------------+
| ***** |
+-----------------------------------+
SELECT LPAD('test', 0, '*');
+---------------------------------------+
| lpad(Utf8("test"),Int64(0),Utf8("*")) |
+---------------------------------------+
| |
+---------------------------------------+
SELECT RPAD('test', 0, '*');
+---------------------------------------+
| rpad(Utf8("test"),Int64(0),Utf8("*")) |
+---------------------------------------+
| |
+---------------------------------------+
-- TRIM with various whitespace characters
SELECT TRIM('\t\nhello\r\n\t');
+--------------------------------+
| btrim(Utf8("\t\nhello\r\n\t")) |
+--------------------------------+
| \t\nhello\r\n\t |
+--------------------------------+
SELECT LTRIM('\t\nhello world');
+--------------------------------+
| ltrim(Utf8("\t\nhello world")) |
+--------------------------------+
| \t\nhello world |
+--------------------------------+
SELECT RTRIM('hello world\r\n');
+--------------------------------+
| rtrim(Utf8("hello world\r\n")) |
+--------------------------------+
| hello world\r\n |
+--------------------------------+
-- Custom TRIM characters
CREATE TABLE custom_trim(s VARCHAR, ts TIMESTAMP TIME INDEX);
Affected Rows: 0
INSERT INTO custom_trim VALUES
('***hello***', 1000),
('---world---', 2000),
('abcTESTabc', 3000);
Affected Rows: 3
SELECT s, TRIM('*' FROM s), TRIM('-' FROM s), TRIM('abc' FROM s) FROM custom_trim ORDER BY ts;
+-------------+--------------------------------+--------------------------------+----------------------------------+
| s | btrim(custom_trim.s,Utf8("*")) | btrim(custom_trim.s,Utf8("-")) | btrim(custom_trim.s,Utf8("abc")) |
+-------------+--------------------------------+--------------------------------+----------------------------------+
| ***hello*** | hello | ***hello*** | ***hello*** |
| ---world--- | ---world--- | world | ---world--- |
| abcTESTabc | abcTESTabc | abcTESTabc | TEST |
+-------------+--------------------------------+--------------------------------+----------------------------------+
DROP TABLE trim_pad_test;
Affected Rows: 0
DROP TABLE custom_trim;
Affected Rows: 0