JSqlParser icon indicating copy to clipboard operation
JSqlParser copied to clipboard

Cannot parse druid sql

Open shuitai opened this issue 3 years ago • 1 comments

Cannot parse druid sql: https://druid.apache.org/docs/latest/querying/sql.html

String sql = "SELECT count(machineId), FLOOR(__time TO HOUR) FROM xaxd_brokerloadindexv1 WHERE __time BETWEEN '2010-02-12 00:00:00' AND '2019-02-23 00:00:00' GROUP BY FLOOR(__time TO HOUR)"; Select select = (Select) CCJSqlParserUtil.parse(sql);

The sample SQL is: SELECT count(machineId), FLOOR(__time TO HOUR) FROM xaxd_brokerloadindexv1 WHERE __time BETWEEN '2010-02-12 00:00:00' AND '2019-02-23 00:00:00' GROUP BY FLOOR(__time TO HOUR)

The exception is: Exception in thread "main" net.sf.jsqlparser.JSQLParserException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "(" at line 1, column 31.

Was expecting one of:

"&"
"::"
";"
"<<"
">>"
"COLLATE"
"CONNECT"
"EMIT"
"GROUP"
"HAVING"
"INTO"
"START"
"WINDOW"
"["
"^"
"|"
<EOF>

at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:263)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:81)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:47)
at com.java.test.SqlParserTest.main(SqlParserTest.java:12)

Caused by: java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "(" at line 1, column 31.

Was expecting one of:

"&"
"::"
";"
"<<"
">>"
"COLLATE"
"CONNECT"
"EMIT"
"GROUP"
"HAVING"
"INTO"
"START"
"WINDOW"
"["
"^"
"|"
<EOF>

at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:258)
... 3 more

Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "(" at line 1, column 31.

Was expecting one of:

"&"
"::"
";"
"<<"
">>"
"COLLATE"
"CONNECT"
"EMIT"
"GROUP"
"HAVING"
"INTO"
"START"
"WINDOW"
"["
"^"
"|"
<EOF>

at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:33398)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:33231)
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:167)
at net.sf.jsqlparser.parser.CCJSqlParserUtil$1.call(CCJSqlParserUtil.java:253)
at net.sf.jsqlparser.parser.CCJSqlParserUtil$1.call(CCJSqlParserUtil.java:250)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)

shuitai avatar Sep 07 '22 05:09 shuitai

Greetings.

The RDBMS specific <timestamp> TO HOUR is not supported (simply because it is not standard compliant. Maybe you can use the standard complaint Extract( <field> FROM <expression>) instead.

Without the TO HOUR your statement parses fine.

manticore-projects avatar Sep 07 '22 07:09 manticore-projects