[jira] [Created] (CALCITE-5119) SqlNode#unparse hides an alias table when using CTE
Mitsunori Komatsu created CALCITE-5119: -- Summary: SqlNode#unparse hides an alias table when using CTE Key: CALCITE-5119 URL: https://issues.apache.org/jira/browse/CALCITE-5119 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.30.0 Reporter: Mitsunori Komatsu Hi team, I found SqlNode#unparse hides an alias table when using CTE. {code:java} val planner = Frameworks.getPlanner(config) val sql = """ WITH cte AS ( select 42 as i ) SELECT i FROM ( SELECT [i] from cte ) AS [alias] ORDER BY [alias].[i] """.trimIndent() val node = planner.parse(sql) println(node.toSqlString { c -> c.withDialect(PrestoSqlDialect.DEFAULT) .withAlwaysUseParentheses(false) .withSubQueryStyle(SqlWriter.SubQueryStyle.HYDE) .withClauseStartsLine(false) .withClauseEndsLine(false) }) {code} This code shows the following {code:java} WITH "cte" AS (SELECT 42 AS "i") (SELECT "i" FROM (SELECT "i" FROM "cte") AS "alias") ORDER BY "alias"."i"{code} The `AS "alias"` is inside a block and the last `ORDER BY` can't find `alias` and this query fails with Presto. I think the output should be as follows {code:java} WITH "cte" AS (SELECT 42 AS "i") SELECT "i" FROM (SELECT "i" FROM "cte") AS "alias" ORDER BY "alias"."i"{code} -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Created] (CALCITE-5135) Planner#parse can't parse DAY() function
Mitsunori Komatsu created CALCITE-5135: -- Summary: Planner#parse can't parse DAY() function Key: CALCITE-5135 URL: https://issues.apache.org/jira/browse/CALCITE-5135 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.30.0 Reporter: Mitsunori Komatsu Hi team, I might be missing something, but `Planner#parse` can't parse `DAY()` function while it can parse other YEAR(), MONTH(), HOUR() and so on. {code:java} import org.apache.calcite.sql.parser.SqlParseException; import org.apache.calcite.sql.validate.SqlValidator; import org.apache.calcite.tools.FrameworkConfig; import org.apache.calcite.tools.Frameworks; import org.apache.calcite.tools.Planner; public class Main { public static void main(String[] args) throws SqlParseException { FrameworkConfig config = Frameworks.newConfigBuilder().build(); { Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("select months(t) from tbl")); } { Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("select month(t) from tbl")); } { Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("select hours(t) from tbl")); } { Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("select hour(t) from tbl")); } { Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("select days(t) from tbl")); } { Planner planner = Frameworks.getPlanner(config); // This throws `org.apache.calcite.sql.parser.SqlParseException: Encountered "day" ...` System.out.println(planner.parse("select day(t) from tbl")); } } } {code} Is this a bug? Is there any way to parse DAY() function? Thanks. -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Created] (CALCITE-5143) Planner#parse fails to parse a function when HOUR is passed as an argument
Mitsunori Komatsu created CALCITE-5143: -- Summary: Planner#parse fails to parse a function when HOUR is passed as an argument Key: CALCITE-5143 URL: https://issues.apache.org/jira/browse/CALCITE-5143 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.30.0 Reporter: Mitsunori Komatsu I'm trying to parse and rewrite some SQL dialects including SQL Server which supports some functions that receive HOUR as an argument using. But Calcite's Planner#parse can't handle this kind of SQL. {code:java} FrameworkConfig config = Frameworks.newConfigBuilder().build(); Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("SELECT DATEDIFF(HOUR, NOW(), NOW())")); {code} {code:java} Exception in thread "main" org.apache.calcite.sql.parser.SqlParseException: Incorrect syntax near the keyword 'HOUR' at line 2, column 21. Was expecting one of: "ALL" ... "ARRAY" ... "CASE" ... : "GROUPING" ... "HOUR" ... "HOUR" "(" ... "*" ... ")" ... at org.apache.calcite.sql.parser.impl.SqlParserImpl.convertException(SqlParserImpl.java:389) at org.apache.calcite.sql.parser.impl.SqlParserImpl.normalizeException(SqlParserImpl.java:153) at org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:145) at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:160) at org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:185) at org.apache.calcite.prepare.PlannerImpl.parse(PlannerImpl.java:214) at org.apache.calcite.tools.Planner.parse(Planner.java:50) {code} This issue happens with other date/time keyword-ish ones like YEAR. I guess it happens because HOUR and YEAR are reserved keywords. Is this an expected behavior? If so, is there any workaround? -- This message was sent by Atlassian Jira (v8.20.7#820007)