Skip to content

Commit

Permalink
automate sqllogictest for different string types
Browse files Browse the repository at this point in the history
  • Loading branch information
2010YOUY01 committed Sep 11, 2024
1 parent 3ece7a7 commit 323aa01
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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);
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 323aa01

Please sign in to comment.