From 62c0277738bce804be84e950faf03488701d35c7 Mon Sep 17 00:00:00 2001 From: Kevin Ge Date: Thu, 5 Oct 2023 13:51:49 -0400 Subject: [PATCH] remove char sets from TrinoSqlDialect --- .../coral/trino/rel2trino/TrinoSqlDialect.java | 5 ----- .../coral/trino/rel2trino/TrinoSqlRewriter.java | 8 ++++++++ .../trino/rel2trino/HiveToTrinoConverterTest.java | 13 +++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlDialect.java b/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlDialect.java index fa0f54739..460575d42 100644 --- a/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlDialect.java +++ b/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlDialect.java @@ -25,11 +25,6 @@ private TrinoSqlDialect(Context context) { super(context); } - @Override - public boolean supportsCharSet() { - return false; - } - /** * Override this method so that so that table alias is prepended to all field references (e.g., "table.column" * or "table.struct.filed" instead of "column" or "struct.field"), which is necessary for diff --git a/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlRewriter.java b/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlRewriter.java index 823b89b7c..20207e7fe 100644 --- a/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlRewriter.java +++ b/coral-trino/src/main/java/com/linkedin/coral/trino/rel2trino/TrinoSqlRewriter.java @@ -60,6 +60,14 @@ private static SqlDataTypeSpec convertTypeSpec(SqlDataTypeSpec type) { final SqlBasicTypeNameSpec realTypeName = new SqlBasicTypeNameSpec(SqlTypeName.REAL, precision, scale, charSetName, parserPos); return new SqlDataTypeSpec(realTypeName, timeZone, parserPos); + case "VARCHAR": + final SqlBasicTypeNameSpec varcharTypeName = + new SqlBasicTypeNameSpec(SqlTypeName.VARCHAR, precision, scale, null, parserPos); // remove CHARACTER SET + return new SqlDataTypeSpec(varcharTypeName, timeZone, parserPos); + case "CHAR": + final SqlBasicTypeNameSpec charTypeName = + new SqlBasicTypeNameSpec(SqlTypeName.CHAR, precision, scale, null, parserPos); // remove CHARACTER SET + return new SqlDataTypeSpec(charTypeName, timeZone, parserPos); default: return type; } diff --git a/coral-trino/src/test/java/com/linkedin/coral/trino/rel2trino/HiveToTrinoConverterTest.java b/coral-trino/src/test/java/com/linkedin/coral/trino/rel2trino/HiveToTrinoConverterTest.java index 816df7bc0..0c5f8c91b 100644 --- a/coral-trino/src/test/java/com/linkedin/coral/trino/rel2trino/HiveToTrinoConverterTest.java +++ b/coral-trino/src/test/java/com/linkedin/coral/trino/rel2trino/HiveToTrinoConverterTest.java @@ -380,6 +380,19 @@ public void testNamedStructWithArrayWithoutType() { assertEquals(expandedSql, targetSql); } + @Test + public void testNestedNamedStructWithArrayWithoutType() { + RelNode relNode = + TestUtils.getHiveToRelConverter().convertSql("SELECT NAMED_STRUCT('value', NAMED_STRUCT('value2', ARRAY()))"); + String targetSql = + "SELECT CAST(ROW(CAST(ROW(ARRAY[]) AS ROW(\"value2\" ARRAY))) AS ROW(\"value\" ROW(\"value2\" ARRAY)))\n" + + "FROM (VALUES (0)) AS \"t\" (\"ZERO\")"; + + RelToTrinoConverter relToTrinoConverter = TestUtils.getRelToTrinoConverter(); + String expandedSql = relToTrinoConverter.convert(relNode); + assertEquals(expandedSql, targetSql); + } + @Test public void testNamedStructWithStringTypeArray() { RelNode relNode =