Uploaded image for project: 'Kylin'
  1. Kylin
  2. KYLIN-4497

PreparedStatement query do not support "limit ? offset ?"

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • Backlog
    • Driver - JDBC
    • None

    Description

      Query

      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);
      

      Error log

      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
      

      Attachments

        Activity

          People

            Wayne0101 Chao Long
            Wayne0101 Chao Long
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: