diff --git a/core/src/main/java/org/apache/calcite/sql/dialect/SnowflakeSqlDialect.java b/core/src/main/java/org/apache/calcite/sql/dialect/SnowflakeSqlDialect.java index 9686a9ec1b5..9deb0836eee 100644 --- a/core/src/main/java/org/apache/calcite/sql/dialect/SnowflakeSqlDialect.java +++ b/core/src/main/java/org/apache/calcite/sql/dialect/SnowflakeSqlDialect.java @@ -29,6 +29,8 @@ import org.apache.calcite.sql.parser.SqlParserPos; import org.apache.calcite.sql.type.SqlTypeName; +import org.checkerframework.checker.nullness.qual.Nullable; + /** * A SqlDialect implementation for the Snowflake database. */ @@ -105,6 +107,11 @@ public static SqlNode rewriteMaxMin(SqlNode aggCall, RelDataType relDataType) { return aggCall; } + @Override public void unparseOffsetFetch(SqlWriter writer, @Nullable SqlNode offset, + @Nullable SqlNode fetch) { + unparseFetchUsingLimit(writer, offset, fetch); + } + @Override public boolean supportsApproxCountDistinct() { return true; } 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 6004fec86a1..d744247e4a2 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 @@ -3012,13 +3012,18 @@ private SqlDialect nonOrdinalDialect() { + "FROM `foodmart`.`product`\n" + "LIMIT 100\n" + "OFFSET 10"; + final String expectedSnowflake = "SELECT \"product_id\"\n" + + "FROM \"foodmart\".\"product\"\n" + + "LIMIT 100\n" + + "OFFSET 10"; final String expectedVertica = "SELECT \"product_id\"\n" + "FROM \"foodmart\".\"product\"\n" + "LIMIT 100\n" + "OFFSET 10"; sql(query).withHive().ok(expected) .withVertica().ok(expectedVertica) - .withStarRocks().ok(expectedStarRocks); + .withStarRocks().ok(expectedStarRocks) + .withSnowflake().ok(expectedSnowflake); } @Test void testPositionFunctionForHive() {