From 94dc1673da824174f9271677ead73cfae1aeb29b Mon Sep 17 00:00:00 2001 From: xiejiajun Date: Sat, 4 Nov 2023 17:05:54 +0800 Subject: [PATCH] [CALCITE-6088] SqlItemOperator fails in RelToSqlConverter --- .../calcite/rel/rel2sql/SqlImplementor.java | 1 + .../rel/rel2sql/RelToSqlConverterTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java index c71dc6558dd..9d39dbf9cb7 100644 --- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java +++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java @@ -668,6 +668,7 @@ public SqlNode toSql(@Nullable RexProgram program, RexNode rex) { .field(lastAccess.getField().getIndex()); break; case ROW: + case ITEM: final SqlNode expr = toSql(program, referencedExpr); sqlIdentifier = new SqlIdentifier(expr.toString(), POS); break; diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java index ddfe9af0c69..b73cc8016cf 100644 --- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java +++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java @@ -2107,6 +2107,22 @@ private SqlDialect nonOrdinalDialect() { .withHive().ok(expected); } + /** Test case for + * [CALCITE-6088] + * SqlItemOperator fails in RelToSqlConverter. */ + @Test void testSqlItemOperator() { + sql("SELECT foo[0].\"EXPR$1\" FROM (SELECT ARRAY[ROW('a', 'b')] AS foo)") + .ok("SELECT \"ARRAY[ROW('a', 'b')][0]\".\"EXPR$1\"\n" + + "FROM (VALUES (0)) AS \"t\" (\"ZERO\")"); + sql("SELECT foo['k'].\"EXPR$1\" FROM (SELECT MAP['k', ROW('a', 'b')] AS foo)") + .ok("SELECT \"MAP['k', ROW('a', 'b')]['k']\".\"EXPR$1\"\n" + + "FROM (VALUES (0)) AS \"t\" (\"ZERO\")"); + sql("select\"books\"[0].\"title\" from \"authors\"") + .schema(CalciteAssert.SchemaSpec.BOOKSTORE) + .ok("SELECT \"`books`[0]\".\"title\"\n" + + "FROM \"bookstore\".\"authors\""); + } + /** Test case for * [CALCITE-3282] * HiveSqlDialect unparse Interger type as Int in order