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

Zhengqiang Duan updated CALCITE-4641:
-------------------------------------
    Description: 
Currently, when parsing a single SQL statement ending with a semicolon, like 
`select * from dual;`, the following exception will be thrown. 
{code:java}
org.apache.calcite.sql.parser.SqlParseException: Encountered ";" at line 1, 
column 19.Was expecting one of:    <EOF>     "AS" ...    "EXCEPT" ...    
"EXTEND" ...    "FETCH" ...    "FOR" ...    "GROUP" ...    "HAVING" ...    
"INTERSECT" ...    "LIMIT" ...    "MATCH_RECOGNIZE" ...    "OFFSET" ...    
"ORDER" ...    "MINUS" ...    "TABLESAMPLE" ...    "UNION" ...    "WHERE" ...   
 "WINDOW" ...    "(" ...    <BRACKET_QUOTED_IDENTIFIER> ...    
<QUOTED_IDENTIFIER> ...    <BACK_QUOTED_IDENTIFIER> ...    
<HYPHENATED_IDENTIFIER> ...    <IDENTIFIER> ...    <UNICODE_QUOTED_IDENTIFIER> 
...    "/*+" ...    "NATURAL" ...    "JOIN" ...    "INNER" ...    "LEFT" ...    
"RIGHT" ...    "FULL" ...    "CROSS" ...    "," ...    "OUTER" ...    "." ...   
 java.lang.RuntimeException: org.apache.calcite.sql.parser.SqlParseException: 
Encountered ";" at line 1, column 19.Was expecting one of:    <EOF>     "AS" 
...    "EXCEPT" ...    "EXTEND" ...    "FETCH" ...    "FOR" ...    "GROUP" ...  
  "HAVING" ...    "INTERSECT" ...    "LIMIT" ...    "MATCH_RECOGNIZE" ...    
"OFFSET" ...    "ORDER" ...    "MINUS" ...    "TABLESAMPLE" ...    "UNION" ...  
  "WHERE" ...    "WINDOW" ...    "(" ...    <BRACKET_QUOTED_IDENTIFIER> ...    
<QUOTED_IDENTIFIER> ...    <BACK_QUOTED_IDENTIFIER> ...    
<HYPHENATED_IDENTIFIER> ...    <IDENTIFIER> ...    <UNICODE_QUOTED_IDENTIFIER> 
...    "/*+" ...    "NATURAL" ...    "JOIN" ...    "INNER" ...    "LEFT" ...    
"RIGHT" ...    "FULL" ...    "CROSS" ...    "," ...    "OUTER" ...    "." ...   
  at 
org.apache.calcite.sql.parser.SqlParseException.writeReplace(SqlParseException.java:171)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498) at 
java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1118) at 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1136) at 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at 
org.gradle.internal.serialize.Message.send(Message.java:36) at 
org.gradle.internal.serialize.BaseSerializerFactory$ThrowableSerializer.write(BaseSerializerFactory.java:321)
 at 
org.gradle.internal.serialize.BaseSerializerFactory$ThrowableSerializer.write(BaseSerializerFactory.java:313)
 at 
org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer$ArraySerializer.write(DefaultMethodArgsSerializer.java:80)
 at 
org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer$ArraySerializer.write(DefaultMethodArgsSerializer.java:61)
 at 
org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.writeArgs(MethodInvocationSerializer.java:78)
 at 
org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.write(MethodInvocationSerializer.java:74)
 at 
org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.write(MethodInvocationSerializer.java:58)
 at 
org.gradle.internal.serialize.kryo.TypeSafeSerializer$2.write(TypeSafeSerializer.java:47)
 at 
org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageWriter.write(InterHubMessageSerializer.java:104)
 at 
org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageWriter.write(InterHubMessageSerializer.java:88)
 at 
org.gradle.internal.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:122)
 at 
org.gradle.internal.remote.internal.hub.MessageHub$ConnectionDispatch.run(MessageHub.java:328)
 at 
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
 at 
org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
 at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at 
org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
 at java.lang.Thread.run(Thread.java:748)
{code}
I think the sql statement contains a semicolon result, which is a legal 
grammar, and I hope it can be supported. Thanks!

 

  was:
Currently, when parsing a single SQL statement ending with a semicolon, like 
`select * from dual;`, the following exception will be thrown.

 

 
{code:java}
org.apache.calcite.sql.parser.SqlParseException: Encountered ";" at line 1, 
column 19.Was expecting one of:    <EOF>     "AS" ...    "EXCEPT" ...    
"EXTEND" ...    "FETCH" ...    "FOR" ...    "GROUP" ...    "HAVING" ...    
"INTERSECT" ...    "LIMIT" ...    "MATCH_RECOGNIZE" ...    "OFFSET" ...    
"ORDER" ...    "MINUS" ...    "TABLESAMPLE" ...    "UNION" ...    "WHERE" ...   
 "WINDOW" ...    "(" ...    <BRACKET_QUOTED_IDENTIFIER> ...    
<QUOTED_IDENTIFIER> ...    <BACK_QUOTED_IDENTIFIER> ...    
<HYPHENATED_IDENTIFIER> ...    <IDENTIFIER> ...    <UNICODE_QUOTED_IDENTIFIER> 
...    "/*+" ...    "NATURAL" ...    "JOIN" ...    "INNER" ...    "LEFT" ...    
"RIGHT" ...    "FULL" ...    "CROSS" ...    "," ...    "OUTER" ...    "." ...   
 java.lang.RuntimeException: org.apache.calcite.sql.parser.SqlParseException: 
Encountered ";" at line 1, column 19.Was expecting one of:    <EOF>     "AS" 
...    "EXCEPT" ...    "EXTEND" ...    "FETCH" ...    "FOR" ...    "GROUP" ...  
  "HAVING" ...    "INTERSECT" ...    "LIMIT" ...    "MATCH_RECOGNIZE" ...    
"OFFSET" ...    "ORDER" ...    "MINUS" ...    "TABLESAMPLE" ...    "UNION" ...  
  "WHERE" ...    "WINDOW" ...    "(" ...    <BRACKET_QUOTED_IDENTIFIER> ...    
<QUOTED_IDENTIFIER> ...    <BACK_QUOTED_IDENTIFIER> ...    
<HYPHENATED_IDENTIFIER> ...    <IDENTIFIER> ...    <UNICODE_QUOTED_IDENTIFIER> 
...    "/*+" ...    "NATURAL" ...    "JOIN" ...    "INNER" ...    "LEFT" ...    
"RIGHT" ...    "FULL" ...    "CROSS" ...    "," ...    "OUTER" ...    "." ...   
  at 
org.apache.calcite.sql.parser.SqlParseException.writeReplace(SqlParseException.java:171)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498) at 
java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1118) at 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1136) at 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at 
org.gradle.internal.serialize.Message.send(Message.java:36) at 
org.gradle.internal.serialize.BaseSerializerFactory$ThrowableSerializer.write(BaseSerializerFactory.java:321)
 at 
org.gradle.internal.serialize.BaseSerializerFactory$ThrowableSerializer.write(BaseSerializerFactory.java:313)
 at 
org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer$ArraySerializer.write(DefaultMethodArgsSerializer.java:80)
 at 
org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer$ArraySerializer.write(DefaultMethodArgsSerializer.java:61)
 at 
org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.writeArgs(MethodInvocationSerializer.java:78)
 at 
org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.write(MethodInvocationSerializer.java:74)
 at 
org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.write(MethodInvocationSerializer.java:58)
 at 
org.gradle.internal.serialize.kryo.TypeSafeSerializer$2.write(TypeSafeSerializer.java:47)
 at 
org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageWriter.write(InterHubMessageSerializer.java:104)
 at 
org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageWriter.write(InterHubMessageSerializer.java:88)
 at 
org.gradle.internal.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:122)
 at 
org.gradle.internal.remote.internal.hub.MessageHub$ConnectionDispatch.run(MessageHub.java:328)
 at 
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
 at 
org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
 at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at 
org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
 at java.lang.Thread.run(Thread.java:748)
{code}
I think the sql statement contains a semicolon result, which is a legal 
grammar, and I hope it can be supported. Thanks!

 


> SqlParser parse single sql statement ending with a semicolon throws exception
> -----------------------------------------------------------------------------
>
>                 Key: CALCITE-4641
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4641
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Zhengqiang Duan
>            Priority: Minor
>
> Currently, when parsing a single SQL statement ending with a semicolon, like 
> `select * from dual;`, the following exception will be thrown. 
> {code:java}
> org.apache.calcite.sql.parser.SqlParseException: Encountered ";" at line 1, 
> column 19.Was expecting one of:    <EOF>     "AS" ...    "EXCEPT" ...    
> "EXTEND" ...    "FETCH" ...    "FOR" ...    "GROUP" ...    "HAVING" ...    
> "INTERSECT" ...    "LIMIT" ...    "MATCH_RECOGNIZE" ...    "OFFSET" ...    
> "ORDER" ...    "MINUS" ...    "TABLESAMPLE" ...    "UNION" ...    "WHERE" ... 
>    "WINDOW" ...    "(" ...    <BRACKET_QUOTED_IDENTIFIER> ...    
> <QUOTED_IDENTIFIER> ...    <BACK_QUOTED_IDENTIFIER> ...    
> <HYPHENATED_IDENTIFIER> ...    <IDENTIFIER> ...    
> <UNICODE_QUOTED_IDENTIFIER> ...    "/*+" ...    "NATURAL" ...    "JOIN" ...   
>  "INNER" ...    "LEFT" ...    "RIGHT" ...    "FULL" ...    "CROSS" ...    "," 
> ...    "OUTER" ...    "." ...    java.lang.RuntimeException: 
> org.apache.calcite.sql.parser.SqlParseException: Encountered ";" at line 1, 
> column 19.Was expecting one of:    <EOF>     "AS" ...    "EXCEPT" ...    
> "EXTEND" ...    "FETCH" ...    "FOR" ...    "GROUP" ...    "HAVING" ...    
> "INTERSECT" ...    "LIMIT" ...    "MATCH_RECOGNIZE" ...    "OFFSET" ...    
> "ORDER" ...    "MINUS" ...    "TABLESAMPLE" ...    "UNION" ...    "WHERE" ... 
>    "WINDOW" ...    "(" ...    <BRACKET_QUOTED_IDENTIFIER> ...    
> <QUOTED_IDENTIFIER> ...    <BACK_QUOTED_IDENTIFIER> ...    
> <HYPHENATED_IDENTIFIER> ...    <IDENTIFIER> ...    
> <UNICODE_QUOTED_IDENTIFIER> ...    "/*+" ...    "NATURAL" ...    "JOIN" ...   
>  "INNER" ...    "LEFT" ...    "RIGHT" ...    "FULL" ...    "CROSS" ...    "," 
> ...    "OUTER" ...    "." ...     at 
> org.apache.calcite.sql.parser.SqlParseException.writeReplace(SqlParseException.java:171)
>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:498) at 
> java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1118) at 
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1136) at 
> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at 
> org.gradle.internal.serialize.Message.send(Message.java:36) at 
> org.gradle.internal.serialize.BaseSerializerFactory$ThrowableSerializer.write(BaseSerializerFactory.java:321)
>  at 
> org.gradle.internal.serialize.BaseSerializerFactory$ThrowableSerializer.write(BaseSerializerFactory.java:313)
>  at 
> org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer$ArraySerializer.write(DefaultMethodArgsSerializer.java:80)
>  at 
> org.gradle.internal.remote.internal.hub.DefaultMethodArgsSerializer$ArraySerializer.write(DefaultMethodArgsSerializer.java:61)
>  at 
> org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.writeArgs(MethodInvocationSerializer.java:78)
>  at 
> org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.write(MethodInvocationSerializer.java:74)
>  at 
> org.gradle.internal.remote.internal.hub.MethodInvocationSerializer$MethodInvocationWriter.write(MethodInvocationSerializer.java:58)
>  at 
> org.gradle.internal.serialize.kryo.TypeSafeSerializer$2.write(TypeSafeSerializer.java:47)
>  at 
> org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageWriter.write(InterHubMessageSerializer.java:104)
>  at 
> org.gradle.internal.remote.internal.hub.InterHubMessageSerializer$MessageWriter.write(InterHubMessageSerializer.java:88)
>  at 
> org.gradle.internal.remote.internal.inet.SocketConnection.dispatch(SocketConnection.java:122)
>  at 
> org.gradle.internal.remote.internal.hub.MessageHub$ConnectionDispatch.run(MessageHub.java:328)
>  at 
> org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
>  at 
> org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
>  at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>  at 
> org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
>  at java.lang.Thread.run(Thread.java:748)
> {code}
> I think the sql statement contains a semicolon result, which is a legal 
> grammar, and I hope it can be supported. Thanks!
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to