[ 
https://issues.apache.org/jira/browse/CALCITE-1962?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul O'Riordan updated CALCITE-1962:
------------------------------------
    Description: 
Given the following code:

{{        final SqlParser.ConfigBuilder configBuilder =  
SqlParser.configBuilder();
        configBuilder.setLex(Lex.MYSQL);

        final SqlParser.Config config = configBuilder.build();
        final SqlParser parser = SqlParser.create(str, config);
        final SqlNode parsedStatement = parser.parseQuery("select id from Test 
limit 1");
        //final SqlNode output = parsedStatement.accept(visitor);

        final SqlDialect mysqlDialect = new SqlDialect(DatabaseProduct.MYSQL, 
"mysql", "`", NullCollation.LAST);
        final SqlPrettyWriter spw1 = new SqlPrettyWriter(mysqlDialect);
        System.out.println(spw1.format(parsedStatement));}}

The output is:

{{SELECT `id`
FROM `Test`
FETCH NEXT 1 ROWS ONLY}}


Expected output:

{{SELECT `id`
FROM `Test`
LIMIT 1}}

Suggested fix:

{{diff --git a/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java 
b/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
index 421b9e21d..b26ffd67b 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
@@ -95,26 +95,7 @@ public void unparse(
         unparseListClause(writer, orderBy.orderList);
         writer.endList(listFrame);
       }
-      if (orderBy.offset != null) {
-        final SqlWriter.Frame frame2 =
-            writer.startList(SqlWriter.FrameTypeEnum.OFFSET);
-        writer.newlineAndIndent();
-        writer.keyword("OFFSET");
-        orderBy.offset.unparse(writer, -1, -1);
-        writer.keyword("ROWS");
-        writer.endList(frame2);
-      }
-      if (orderBy.fetch != null) {
-        final SqlWriter.Frame frame3 =
-            writer.startList(SqlWriter.FrameTypeEnum.FETCH);
-        writer.newlineAndIndent();
-        writer.keyword("FETCH");
-        writer.keyword("NEXT");
-        orderBy.fetch.unparse(writer, -1, -1);
-        writer.keyword("ROWS");
-        writer.keyword("ONLY");
-        writer.endList(frame3);
-      }
+      writer.fetchOffset(orderBy.fetch, orderBy.offset);
       writer.endList(frame);
     }
   }}}



  was:
Given the following code:

{{
        final SqlParser.ConfigBuilder configBuilder =  
SqlParser.configBuilder();
        configBuilder.setLex(Lex.MYSQL);

        final SqlParser.Config config = configBuilder.build();
        final SqlParser parser = SqlParser.create(str, config);
        final SqlNode parsedStatement = parser.parseQuery("select id from Test 
limit 1");
        //final SqlNode output = parsedStatement.accept(visitor);

        final SqlDialect mysqlDialect = new SqlDialect(DatabaseProduct.MYSQL, 
"mysql", "`", NullCollation.LAST);
        final SqlPrettyWriter spw1 = new SqlPrettyWriter(mysqlDialect);
        System.out.println(spw1.format(parsedStatement));
}}

The output is:

{{
SELECT `id`
FROM `Test`
FETCH NEXT 1 ROWS ONLY
}}

Expected output:

{{
SELECT `id`
FROM `Test`
LIMIT 1
}}

Suggested fix:

{{
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java 
b/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
index 421b9e21d..b26ffd67b 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
@@ -95,26 +95,7 @@ public void unparse(
         unparseListClause(writer, orderBy.orderList);
         writer.endList(listFrame);
       }
-      if (orderBy.offset != null) {
-        final SqlWriter.Frame frame2 =
-            writer.startList(SqlWriter.FrameTypeEnum.OFFSET);
-        writer.newlineAndIndent();
-        writer.keyword("OFFSET");
-        orderBy.offset.unparse(writer, -1, -1);
-        writer.keyword("ROWS");
-        writer.endList(frame2);
-      }
-      if (orderBy.fetch != null) {
-        final SqlWriter.Frame frame3 =
-            writer.startList(SqlWriter.FrameTypeEnum.FETCH);
-        writer.newlineAndIndent();
-        writer.keyword("FETCH");
-        writer.keyword("NEXT");
-        orderBy.fetch.unparse(writer, -1, -1);
-        writer.keyword("ROWS");
-        writer.keyword("ONLY");
-        writer.endList(frame3);
-      }
+      writer.fetchOffset(orderBy.fetch, orderBy.offset);
       writer.endList(frame);
     }
   }
}}



> SqlOrderBy unparse ignores dialect.
> -----------------------------------
>
>                 Key: CALCITE-1962
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1962
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Paul O'Riordan
>            Assignee: Julian Hyde
>
> Given the following code:
> {{        final SqlParser.ConfigBuilder configBuilder =  
> SqlParser.configBuilder();
>         configBuilder.setLex(Lex.MYSQL);
>         final SqlParser.Config config = configBuilder.build();
>         final SqlParser parser = SqlParser.create(str, config);
>         final SqlNode parsedStatement = parser.parseQuery("select id from 
> Test limit 1");
>         //final SqlNode output = parsedStatement.accept(visitor);
>         final SqlDialect mysqlDialect = new SqlDialect(DatabaseProduct.MYSQL, 
> "mysql", "`", NullCollation.LAST);
>         final SqlPrettyWriter spw1 = new SqlPrettyWriter(mysqlDialect);
>         System.out.println(spw1.format(parsedStatement));}}
> The output is:
> {{SELECT `id`
> FROM `Test`
> FETCH NEXT 1 ROWS ONLY}}
> Expected output:
> {{SELECT `id`
> FROM `Test`
> LIMIT 1}}
> Suggested fix:
> {{diff --git a/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java 
> b/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
> index 421b9e21d..b26ffd67b 100644
> --- a/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
> +++ b/core/src/main/java/org/apache/calcite/sql/SqlOrderBy.java
> @@ -95,26 +95,7 @@ public void unparse(
>          unparseListClause(writer, orderBy.orderList);
>          writer.endList(listFrame);
>        }
> -      if (orderBy.offset != null) {
> -        final SqlWriter.Frame frame2 =
> -            writer.startList(SqlWriter.FrameTypeEnum.OFFSET);
> -        writer.newlineAndIndent();
> -        writer.keyword("OFFSET");
> -        orderBy.offset.unparse(writer, -1, -1);
> -        writer.keyword("ROWS");
> -        writer.endList(frame2);
> -      }
> -      if (orderBy.fetch != null) {
> -        final SqlWriter.Frame frame3 =
> -            writer.startList(SqlWriter.FrameTypeEnum.FETCH);
> -        writer.newlineAndIndent();
> -        writer.keyword("FETCH");
> -        writer.keyword("NEXT");
> -        orderBy.fetch.unparse(writer, -1, -1);
> -        writer.keyword("ROWS");
> -        writer.keyword("ONLY");
> -        writer.endList(frame3);
> -      }
> +      writer.fetchOffset(orderBy.fetch, orderBy.offset);
>        writer.endList(frame);
>      }
>    }}}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to