2025-02-13 21:33:25 +01:00
|
|
|
from tests.dialects.test_dialect import Validator
|
|
|
|
|
|
|
|
|
|
|
|
class TestTrino(Validator):
|
|
|
|
dialect = "trino"
|
|
|
|
|
2025-02-13 21:55:40 +01:00
|
|
|
def test_trino(self):
|
2025-03-04 07:54:36 +01:00
|
|
|
self.validate_identity("JSON_QUERY(m.properties, 'lax $.area' OMIT QUOTES NULL ON ERROR)")
|
2025-02-13 21:55:40 +01:00
|
|
|
self.validate_identity("JSON_EXTRACT(content, json_path)")
|
|
|
|
self.validate_identity("JSON_QUERY(content, 'lax $.HY.*')")
|
2025-02-13 22:19:49 +01:00
|
|
|
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITH WRAPPER)")
|
|
|
|
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITH ARRAY WRAPPER)")
|
2025-02-13 21:55:40 +01:00
|
|
|
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITH UNCONDITIONAL WRAPPER)")
|
|
|
|
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITHOUT CONDITIONAL WRAPPER)")
|
2025-02-13 22:00:29 +01:00
|
|
|
self.validate_identity("JSON_QUERY(description, 'strict $.comment' KEEP QUOTES)")
|
|
|
|
self.validate_identity(
|
|
|
|
"JSON_QUERY(description, 'strict $.comment' OMIT QUOTES ON SCALAR STRING)"
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"JSON_QUERY(content, 'strict $.HY.*' WITH UNCONDITIONAL WRAPPER KEEP QUOTES)"
|
|
|
|
)
|
2025-02-13 21:56:19 +01:00
|
|
|
|
|
|
|
def test_listagg(self):
|
2025-02-13 21:56:02 +01:00
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(DISTINCT col, ',') WITHIN GROUP (ORDER BY col ASC) FROM tbl"
|
|
|
|
)
|
2025-02-13 21:56:19 +01:00
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(col, '; ' ON OVERFLOW ERROR) WITHIN GROUP (ORDER BY col ASC) FROM tbl"
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(col, '; ' ON OVERFLOW TRUNCATE WITH COUNT) WITHIN GROUP (ORDER BY col ASC) FROM tbl"
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(col, '; ' ON OVERFLOW TRUNCATE WITHOUT COUNT) WITHIN GROUP (ORDER BY col ASC) FROM tbl"
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(col, '; ' ON OVERFLOW TRUNCATE '...' WITH COUNT) WITHIN GROUP (ORDER BY col ASC) FROM tbl"
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(col, '; ' ON OVERFLOW TRUNCATE '...' WITHOUT COUNT) WITHIN GROUP (ORDER BY col ASC) FROM tbl"
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT LISTAGG(col) WITHIN GROUP (ORDER BY col DESC) FROM tbl",
|
|
|
|
"SELECT LISTAGG(col, ',') WITHIN GROUP (ORDER BY col DESC) FROM tbl",
|
|
|
|
)
|
2025-02-13 21:55:40 +01:00
|
|
|
|
2025-02-13 21:33:25 +01:00
|
|
|
def test_trim(self):
|
|
|
|
self.validate_identity("SELECT TRIM('!' FROM '!foo!')")
|
|
|
|
self.validate_identity("SELECT TRIM(BOTH '$' FROM '$var$')")
|
|
|
|
self.validate_identity("SELECT TRIM(TRAILING 'ER' FROM UPPER('worker'))")
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT TRIM(LEADING FROM ' abcd')",
|
|
|
|
"SELECT LTRIM(' abcd')",
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"SELECT TRIM('!foo!', '!')",
|
|
|
|
"SELECT TRIM('!' FROM '!foo!')",
|
|
|
|
)
|
2025-02-13 21:52:32 +01:00
|
|
|
|
|
|
|
def test_ddl(self):
|
|
|
|
self.validate_identity("ALTER TABLE users RENAME TO people")
|
|
|
|
self.validate_identity("ALTER TABLE IF EXISTS users RENAME TO people")
|
|
|
|
self.validate_identity("ALTER TABLE users ADD COLUMN zip VARCHAR")
|
|
|
|
self.validate_identity("ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS zip VARCHAR")
|
|
|
|
self.validate_identity("ALTER TABLE users DROP COLUMN zip")
|
|
|
|
self.validate_identity("ALTER TABLE IF EXISTS users DROP COLUMN IF EXISTS zip")
|
|
|
|
self.validate_identity("ALTER TABLE users RENAME COLUMN id TO user_id")
|
|
|
|
self.validate_identity("ALTER TABLE IF EXISTS users RENAME COLUMN IF EXISTS id TO user_id")
|
|
|
|
self.validate_identity("ALTER TABLE users ALTER COLUMN id SET DATA TYPE BIGINT")
|
|
|
|
self.validate_identity("ALTER TABLE users ALTER COLUMN id DROP NOT NULL")
|
|
|
|
self.validate_identity(
|
|
|
|
"ALTER TABLE people SET AUTHORIZATION alice", check_command_warning=True
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"ALTER TABLE people SET AUTHORIZATION ROLE PUBLIC", check_command_warning=True
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"ALTER TABLE people SET PROPERTIES x = 'y'", check_command_warning=True
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"ALTER TABLE people SET PROPERTIES foo = 123, 'foo bar' = 456",
|
|
|
|
check_command_warning=True,
|
|
|
|
)
|
|
|
|
self.validate_identity(
|
|
|
|
"ALTER TABLE people SET PROPERTIES x = DEFAULT", check_command_warning=True
|
|
|
|
)
|
|
|
|
self.validate_identity("ALTER VIEW people RENAME TO users")
|
|
|
|
self.validate_identity(
|
|
|
|
"ALTER VIEW people SET AUTHORIZATION alice", check_command_warning=True
|
|
|
|
)
|
2025-02-13 22:00:53 +01:00
|
|
|
self.validate_identity("CREATE SCHEMA foo WITH (LOCATION='s3://bucket/foo')")
|
|
|
|
self.validate_identity(
|
|
|
|
"CREATE TABLE foo.bar WITH (LOCATION='s3://bucket/foo/bar') AS SELECT 1"
|
|
|
|
)
|
2025-02-13 22:00:08 +01:00
|
|
|
|
2025-04-21 09:50:04 +02:00
|
|
|
# Hive connector syntax (partitioned_by)
|
|
|
|
self.validate_identity(
|
|
|
|
"CREATE TABLE foo (a VARCHAR, b INTEGER, c DATE) WITH (PARTITIONED_BY=ARRAY['a', 'b'])"
|
|
|
|
)
|
|
|
|
|
|
|
|
# Iceberg connector syntax (partitioning, can contain Iceberg transform expressions)
|
|
|
|
self.validate_identity(
|
|
|
|
"CREATE TABLE foo (a VARCHAR, b INTEGER, c DATE) WITH (PARTITIONING=ARRAY['a', 'bucket(4, b)', 'month(c)'])",
|
|
|
|
)
|
|
|
|
|
2025-02-13 22:00:08 +01:00
|
|
|
def test_analyze(self):
|
|
|
|
self.validate_identity("ANALYZE tbl")
|
|
|
|
self.validate_identity("ANALYZE tbl WITH (prop1=val1, prop2=val2)")
|