Chao Long created KYLIN-4497:
--------------------------------

             Summary: PreparedStatement query do not support "limit ? offset ?"
                 Key: KYLIN-4497
                 URL: https://issues.apache.org/jira/browse/KYLIN-4497
             Project: Kylin
          Issue Type: Bug
          Components: Driver - JDBC
            Reporter: Chao Long
            Assignee: Chao Long
             Fix For: v3.1.0


Query
{code:java}
String sql = "select part_dt, sum(price) from KYLIN_SALES group by part_dt 
order by part_dt limit ? offset ?";

conn = getConnection();
statement = conn.prepareStatement(sql);
statement.setInt(1, 10);
statement.setInt(2, 0);
{code}
Error log
{code:java}
2020-05-15 09:32:36,062 ERROR [Query b87327f4-7299-32f2-4a2e-c19795a42288-44] 
service.QueryService:542 : Exception while executing query
java.sql.SQLException: Error while preparing statement [select part_dt, 
sum(price) from KYLIN_SALES group by part_dt order by part_dt limit ? offset ?]
        at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
        at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:210)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:192)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:89)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:175)
        at 
org.apache.kylin.rest.service.QueryService.createPreparedContext(QueryService.java:1262)
        at 
org.apache.kylin.rest.service.QueryService.access$600(QueryService.java:141)
        at 
org.apache.kylin.rest.service.QueryService$PreparedContextFactory.create(QueryService.java:1301)
        at 
org.apache.kylin.rest.service.QueryService$PreparedContextFactory.create(QueryService.java:1296)
        at 
org.apache.commons.pool2.BaseKeyedPooledObjectFactory.makeObject(BaseKeyedPooledObjectFactory.java:60)
        at 
org.apache.commons.pool2.impl.GenericKeyedObjectPool.create(GenericKeyedObjectPool.java:1064)
        at 
org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:358)
        at 
org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:281)
        at 
org.apache.kylin.rest.service.QueryService.queryWithSqlMassage(QueryService.java:680)
        at 
org.apache.kylin.rest.service.QueryService.query(QueryService.java:219)
        at 
org.apache.kylin.rest.service.QueryService.queryAndUpdateCache(QueryService.java:480)
        at 
org.apache.kylin.rest.service.QueryService.doQueryWithCache(QueryService.java:440)
        at 
org.apache.kylin.rest.service.QueryService.doQueryWithCache(QueryService.java:378)
        at 
org.apache.kylin.rest.controller.QueryController.query(QueryController.java:93)
        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 
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at 
com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:209)
        at 
com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:244)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
        at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
        at 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1195)
        at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
        at 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassCastException: org.apache.calcite.rex.RexDynamicParam 
cannot be cast to org.apache.calcite.rex.RexLiteral
        at 
org.apache.kylin.query.relnode.OLAPLimitRel.implementOLAP(OLAPLimitRel.java:88)
        at 
org.apache.kylin.query.relnode.OLAPRel$OLAPImplementor.visitChild(OLAPRel.java:84)
        at 
org.apache.kylin.query.relnode.OLAPToEnumerableConverter.implement(OLAPToEnumerableConverter.java:77)
        at 
org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:103)
        at 
org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:92)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1278)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:331)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:796)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:655)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:618)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:221)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:203)
        ... 93 more
{code}



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

Reply via email to