From 323aa0155a51ad78daa6787007aa1b7e8a1b071d Mon Sep 17 00:00:00 2001 From: Yongting You <2010youy01@gmail.com> Date: Wed, 11 Sep 2024 20:31:39 +0800 Subject: [PATCH] automate sqllogictest for different string types --- .../substr/substr_literal.slt.part | 119 ++++++++++++++++++ .../string_functions/substr/substr_runner.slt | 55 ++++++++ .../substr/substr_table.slt.part | 28 +++++ 3 files changed, 202 insertions(+) create mode 100644 datafusion/sqllogictest/test_files/string_functions/substr/substr_literal.slt.part create mode 100644 datafusion/sqllogictest/test_files/string_functions/substr/substr_runner.slt create mode 100644 datafusion/sqllogictest/test_files/string_functions/substr/substr_table.slt.part diff --git a/datafusion/sqllogictest/test_files/string_functions/substr/substr_literal.slt.part b/datafusion/sqllogictest/test_files/string_functions/substr/substr_literal.slt.part new file mode 100644 index 0000000000000..c219422f9b4af --- /dev/null +++ b/datafusion/sqllogictest/test_files/string_functions/substr/substr_literal.slt.part @@ -0,0 +1,119 @@ +query T +SELECT substr('alphabet', -3) +---- +alphabet + +query T +SELECT substr('alphabet', 0) +---- +alphabet + +query T +SELECT substr('alphabet', 1) +---- +alphabet + +query T +SELECT substr('alphabet', 2) +---- +lphabet + +query T +SELECT substr('alphabet', 3) +---- +phabet + +query T +SELECT substr('alphabet', 30) +---- +(empty) + +query T +SELECT substr('alphabet', 3, 2) +---- +ph + +query T +SELECT substr('alphabet', 3, 20) +---- +phabet + +query TT +select + substr(arrow_cast('alphabet', 'LargeUtf8'), 3, 20), + substr(arrow_cast('alphabet', 'Utf8View'), 3, 20); +---- +phabet phabet + +# test range ouside of string length +query TTTTTTTTTTTT +SELECT + substr('hi๐ŸŒ', 1, 3), + substr('hi๐ŸŒ', 1, 4), + substr('hi๐ŸŒ', 1, 100), + substr('hi๐ŸŒ', 0, 1), + substr('hi๐ŸŒ', 0, 2), + substr('hi๐ŸŒ', 0, 4), + substr('hi๐ŸŒ', 0, 5), + substr('hi๐ŸŒ', -10, 100), + substr('hi๐ŸŒ', -10, 12), + substr('hi๐ŸŒ', -10, 5), + substr('hi๐ŸŒ', 10, 0), + substr('hi๐ŸŒ', 10, 10); +---- +hi๐ŸŒ hi๐ŸŒ hi๐ŸŒ (empty) h hi๐ŸŒ hi๐ŸŒ hi๐ŸŒ h (empty) (empty) (empty) + +query TTTTTTTTTTTT +SELECT + substr('', 1, 3), + substr('', 1, 4), + substr('', 1, 100), + substr('', 0, 1), + substr('', 0, 2), + substr('', 0, 4), + substr('', 0, 5), + substr('', -10, 100), + substr('', -10, 12), + substr('', -10, 5), + substr('', 10, 0), + substr('', 10, 10); +---- +(empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) + +# Nulls +query TTTTTTTTTT +SELECT + substr('alphabet', NULL), + substr(NULL, 1), + substr(NULL, NULL), + substr('alphabet', CAST(NULL AS int), -20), + substr('alphabet', 3, CAST(NULL AS int)), + substr(NULL, 3, -4), + substr(NULL, NULL, 4), + substr(NULL, 1, NULL), + substr('', NULL, NULL), + substr(NULL, NULL, NULL); +---- +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL + +query T +SELECT substr('Hello๐ŸŒไธ–็•Œ', 5) +---- +o๐ŸŒไธ–็•Œ + +query T +SELECT substr('Hello๐ŸŒไธ–็•Œ', 5, 3) +---- +o๐ŸŒไธ– + +statement error The SUBSTR function can only accept strings, but got Int64. +SELECT substr(1, 3) + +statement error The SUBSTR function can only accept strings, but got Int64. +SELECT substr(1, 3, 4) + +statement error Execution error: negative substring length not allowed +select substr(arrow_cast('foo', 'Utf8View'), 1, -1); + +statement error Execution error: negative substring length not allowed +select substr('', 1, -1); diff --git a/datafusion/sqllogictest/test_files/string_functions/substr/substr_runner.slt b/datafusion/sqllogictest/test_files/string_functions/substr/substr_runner.slt new file mode 100644 index 0000000000000..ae8894d225a5d --- /dev/null +++ b/datafusion/sqllogictest/test_files/string_functions/substr/substr_runner.slt @@ -0,0 +1,55 @@ +# -------------------------------------- +# Test `substr()` with literal arguments +# -------------------------------------- +include ./substr_literal.slt.part + +# -------------------------------------- +# Setup test tables with different physical string types (Utf8/Utf8View/LargeUtf8) +# and repeat tests in `substr_table.slt.part` +# -------------------------------------- +statement ok +create table test_substr_base ( + col1 VARCHAR +) as values ('foo'), ('hello๐ŸŒไธ–็•Œ'), ('๐Ÿ’ฉ'), ('ThisIsAVeryLongASCIIString'), (''), (NULL); + +# +# Run1: Utf8 +# +statement ok +create table test_substr as +select arrow_cast(col1, 'Utf8') as c1 from test_substr_base; + +include ./substr_table.slt.part + +statement ok +drop table test_substr; + +# +# Run2: Utf8View +# +statement ok +create table test_substr as +select arrow_cast(col1, 'Utf8View') as c1 from test_substr_base; + +include ./substr_table.slt.part + +statement ok +drop table test_substr; + +# +# Run3: LargeUtf8 +# +statement ok +create table test_substr as +select arrow_cast(col1, 'LargeUtf8') as c1 from test_substr_base; + +include ./substr_table.slt.part + +statement ok +drop table test_substr; + +# -------------------------------------- +# Cleanup +# -------------------------------------- +statement ok +drop table test_substr_base; \ No newline at end of file diff --git a/datafusion/sqllogictest/test_files/string_functions/substr/substr_table.slt.part b/datafusion/sqllogictest/test_files/string_functions/substr/substr_table.slt.part new file mode 100644 index 0000000000000..4aba3c50708a4 --- /dev/null +++ b/datafusion/sqllogictest/test_files/string_functions/substr/substr_table.slt.part @@ -0,0 +1,28 @@ +# This file is intended to be run with tables already defined +# with standard data but possibly different types in string columns +# (String, StringView, etc.) + +query TTTTTTTTTTTTTT +select + substr(c1, 1), + substr(c1, 3), + substr(c1, 100), + substr(c1, -1), + substr(c1, 0, 0), + substr(c1, -1, 2), + substr(c1, -2, 10), + substr(c1, -100, 200), + substr(c1, -10, 10), + substr(c1, -100, 10), + substr(c1, 1, 100), + substr(c1, 5, 3), + substr(c1, 100, 200), + substr(c1, 8, 0) +from test_substr; +---- +foo o (empty) foo (empty) (empty) foo foo (empty) (empty) foo (empty) (empty) (empty) +hello๐ŸŒไธ–็•Œ llo๐ŸŒไธ–็•Œ (empty) hello๐ŸŒไธ–็•Œ (empty) (empty) hello๐ŸŒไธ– hello๐ŸŒไธ–็•Œ (empty) (empty) hello๐ŸŒไธ–็•Œ o๐ŸŒไธ– (empty) (empty) +๐Ÿ’ฉ (empty) (empty) ๐Ÿ’ฉ (empty) (empty) ๐Ÿ’ฉ ๐Ÿ’ฉ (empty) (empty) ๐Ÿ’ฉ (empty) (empty) (empty) +ThisIsAVeryLongASCIIString isIsAVeryLongASCIIString (empty) ThisIsAVeryLongASCIIString (empty) (empty) ThisIsA ThisIsAVeryLongASCIIString (empty) (empty) ThisIsAVeryLongASCIIString IsA (empty) (empty) +(empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) (empty) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL \ No newline at end of file