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

JunQiangZhang updated KYLIN-2813:
---------------------------------
    Description: 
maping  file:
<select id="***List" resultMap="***Map">
        <![CDATA[
          SELECT  a.appversion,
          a.os, a.recordtime
          FROM *** AS a
          WHERE a.recorddate=#{recordDate}
        ]]>
    
        if test="os!=null">
            AND a.os=#{os}
        </if>
        <if test="appVersion!=null">
            AND a.appversion={appVersion}
        </if>
        ORDER BY a.recordtime DESC
        <![CDATA[
          LIMIT #{rowCount}
          OFFSET #{offSet}
        ]]>
    </select>

The rowCount and offSet is replace by params. when i query use this.
It cause:
2017-08-25 11:09:14,739 ERROR [Query c31e532a-e6c6-4af6-b5c8-7015a6082326-526] 
service.QueryService:382 : Exception when execute sql
java.sql.SQLException: Error while preparing statement [SELECT  a.appversion,
          a.os, a.recordtime
          FROM *** AS a
          WHERE a.recorddate=?
            AND a.os=?
        ORDER BY a.recordtime DESC
         
          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:203)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:185)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:86)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:165)
        at 
org.apache.kylin.rest.service.QueryService.execute(QueryService.java:551)
        at 
org.apache.kylin.rest.service.QueryService.queryWithSqlMassage(QueryService.java:466)
        at 
org.apache.kylin.rest.service.QueryService.query(QueryService.java:153)
        at 
org.apache.kylin.rest.service.QueryService.doQueryWithCache(QueryService.java:357)
        at 
org.apache.kylin.rest.controller.QueryController.prepareQuery(QueryController.java:76)

        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: parse failed: Encountered "LIMIT ?" at 
line 17, column 11.
Was expecting one of:
    <EOF> 
    "LIMIT" <UNSIGNED_INTEGER_LITERAL> ...
    "LIMIT" <DECIMAL_NUMERIC_LITERAL> ...
    "LIMIT" <APPROX_NUMERIC_LITERAL> ...
    "LIMIT" "ALL" ...
    "OFFSET" ...
    "FETCH" ...
    "," ...
    "NULLS" ...
    
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:750)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:632)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:602)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:214)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:196)
        ... 79 more
Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered "LIMIT 
?" at line 17, column 11.
Was expecting one of:
    <EOF> 
        ... 83 more
Caused by: org.apache.calcite.sql.parser.impl.ParseException: Encountered 
"LIMIT ?" at line 17, column 11.
Was expecting one of:
    <EOF> 
    "LIMIT" <UNSIGNED_INTEGER_LITERAL> ...
    "LIMIT" <DECIMAL_NUMERIC_LITERAL> ...
    "LIMIT" <APPROX_NUMERIC_LITERAL> ...
    "LIMIT" "ALL" ...
    "OFFSET" ...
    "FETCH" ...
    "," ...
    "NULLS" ...
    
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.generateParseException(SqlParserImpl.java:21455)
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_consume_token(SqlParserImpl.java:21278)
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmtEof(SqlParserImpl.java:843)
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.parseSqlStmtEof(SqlParserImpl.java:185)

It seems that cannot pass the QueryService.execute conn.prepareStatement.

If I set the LIMIT and offset with a constant value. it will pass.


  was:
maping  file:
<select id="queryAPMList" resultMap="YanXuanAPMMap">
        <![CDATA[
          SELECT a.username, a.apmtype, a.appversion,
          a.os, a.recordtime
          FROM HOLMES.SRC_LOG_YANXUAN_APM AS a
          WHERE a.recorddate=#{recordDate}
          AND a.appid='11'
        ]]>
        <if test="userName!=null">
            AND a.username=#{userName}
        </if>
        <if test="apmType!=null">
            AND a.apmtype=#{apmType}
        </if>
        <if test="os!=null">
            AND a.os=#{os}
        </if>
        <if test="appVersion!=null">
            AND a.appversion={appVersion}
        </if>
        ORDER BY a.recordtime DESC
        <![CDATA[
          LIMIT #{rowCount}
          OFFSET #{offSet}
        ]]>
    </select>

The rowCount and offSet is replace by params. when i query use this.
It cause:
2017-08-25 11:09:14,739 ERROR [Query c31e532a-e6c6-4af6-b5c8-7015a6082326-526] 
service.QueryService:382 : Exception when execute sql
java.sql.SQLException: Error while preparing statement [SELECT a.username, 
a.apmtype, a.appversion,
          a.os, a.recordtime
          FROM HOLMES.SRC_LOG_YANXUAN_APM AS a
          WHERE a.recorddate=?
          AND a.appid='11'
         
         
         
            AND a.apmtype=?
         
         
            AND a.os=?
         
         
        ORDER BY a.recordtime DESC
         
          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:203)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:185)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:86)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:165)
        at 
org.apache.kylin.rest.service.QueryService.execute(QueryService.java:551)
        at 
org.apache.kylin.rest.service.QueryService.queryWithSqlMassage(QueryService.java:466)
        at 
org.apache.kylin.rest.service.QueryService.query(QueryService.java:153)
        at 
org.apache.kylin.rest.service.QueryService.doQueryWithCache(QueryService.java:357)
        at 
org.apache.kylin.rest.controller.QueryController.prepareQuery(QueryController.java:76)

        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: parse failed: Encountered "LIMIT ?" at 
line 17, column 11.
Was expecting one of:
    <EOF> 
    "LIMIT" <UNSIGNED_INTEGER_LITERAL> ...
    "LIMIT" <DECIMAL_NUMERIC_LITERAL> ...
    "LIMIT" <APPROX_NUMERIC_LITERAL> ...
    "LIMIT" "ALL" ...
    "OFFSET" ...
    "FETCH" ...
    "," ...
    "NULLS" ...
    
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:750)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:632)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:602)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:214)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:196)
        ... 79 more
Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered "LIMIT 
?" at line 17, column 11.
Was expecting one of:
    <EOF> 
        ... 83 more
Caused by: org.apache.calcite.sql.parser.impl.ParseException: Encountered 
"LIMIT ?" at line 17, column 11.
Was expecting one of:
    <EOF> 
    "LIMIT" <UNSIGNED_INTEGER_LITERAL> ...
    "LIMIT" <DECIMAL_NUMERIC_LITERAL> ...
    "LIMIT" <APPROX_NUMERIC_LITERAL> ...
    "LIMIT" "ALL" ...
    "OFFSET" ...
    "FETCH" ...
    "," ...
    "NULLS" ...
    
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.generateParseException(SqlParserImpl.java:21455)
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_consume_token(SqlParserImpl.java:21278)
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmtEof(SqlParserImpl.java:843)
        at 
org.apache.calcite.sql.parser.impl.SqlParserImpl.parseSqlStmtEof(SqlParserImpl.java:185)

It seems that cannot pass the QueryService.execute conn.prepareStatement.

If I set the LIMIT and offset with a constant value. it will pass.



> SQL parse exception when 'LIMIT ?' is used in prepared statement
> ----------------------------------------------------------------
>
>                 Key: KYLIN-2813
>                 URL: https://issues.apache.org/jira/browse/KYLIN-2813
>             Project: Kylin
>          Issue Type: Bug
>          Components: Query Engine
>    Affects Versions: v2.0.0
>         Environment: kylin version:2.0.0
> org.mybatis.spring.boot:1.3.0
>            Reporter: JunQiangZhang
>            Assignee: liyang
>
> maping  file:
> <select id="***List" resultMap="***Map">
>         <![CDATA[
>           SELECT  a.appversion,
>           a.os, a.recordtime
>           FROM *** AS a
>           WHERE a.recorddate=#{recordDate}
>         ]]>
>     
>         if test="os!=null">
>             AND a.os=#{os}
>         </if>
>         <if test="appVersion!=null">
>             AND a.appversion={appVersion}
>         </if>
>         ORDER BY a.recordtime DESC
>         <![CDATA[
>           LIMIT #{rowCount}
>           OFFSET #{offSet}
>         ]]>
>     </select>
> The rowCount and offSet is replace by params. when i query use this.
> It cause:
> 2017-08-25 11:09:14,739 ERROR [Query 
> c31e532a-e6c6-4af6-b5c8-7015a6082326-526] service.QueryService:382 : 
> Exception when execute sql
> java.sql.SQLException: Error while preparing statement [SELECT  a.appversion,
>           a.os, a.recordtime
>           FROM *** AS a
>           WHERE a.recorddate=?
>             AND a.os=?
>         ORDER BY a.recordtime DESC
>          
>           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:203)
>       at 
> org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:185)
>       at 
> org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:86)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:165)
>       at 
> org.apache.kylin.rest.service.QueryService.execute(QueryService.java:551)
>       at 
> org.apache.kylin.rest.service.QueryService.queryWithSqlMassage(QueryService.java:466)
>       at 
> org.apache.kylin.rest.service.QueryService.query(QueryService.java:153)
>       at 
> org.apache.kylin.rest.service.QueryService.doQueryWithCache(QueryService.java:357)
>       at 
> org.apache.kylin.rest.controller.QueryController.prepareQuery(QueryController.java:76)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.RuntimeException: parse failed: Encountered "LIMIT ?" at 
> line 17, column 11.
> Was expecting one of:
>     <EOF> 
>     "LIMIT" <UNSIGNED_INTEGER_LITERAL> ...
>     "LIMIT" <DECIMAL_NUMERIC_LITERAL> ...
>     "LIMIT" <APPROX_NUMERIC_LITERAL> ...
>     "LIMIT" "ALL" ...
>     "OFFSET" ...
>     "FETCH" ...
>     "," ...
>     "NULLS" ...
>     
>       at 
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:750)
>       at 
> org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:632)
>       at 
> org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:602)
>       at 
> org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:214)
>       at 
> org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:196)
>       ... 79 more
> Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered 
> "LIMIT ?" at line 17, column 11.
> Was expecting one of:
>     <EOF> 
>       ... 83 more
> Caused by: org.apache.calcite.sql.parser.impl.ParseException: Encountered 
> "LIMIT ?" at line 17, column 11.
> Was expecting one of:
>     <EOF> 
>     "LIMIT" <UNSIGNED_INTEGER_LITERAL> ...
>     "LIMIT" <DECIMAL_NUMERIC_LITERAL> ...
>     "LIMIT" <APPROX_NUMERIC_LITERAL> ...
>     "LIMIT" "ALL" ...
>     "OFFSET" ...
>     "FETCH" ...
>     "," ...
>     "NULLS" ...
>     
>       at 
> org.apache.calcite.sql.parser.impl.SqlParserImpl.generateParseException(SqlParserImpl.java:21455)
>       at 
> org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_consume_token(SqlParserImpl.java:21278)
>       at 
> org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmtEof(SqlParserImpl.java:843)
>       at 
> org.apache.calcite.sql.parser.impl.SqlParserImpl.parseSqlStmtEof(SqlParserImpl.java:185)
> It seems that cannot pass the QueryService.execute conn.prepareStatement.
> If I set the LIMIT and offset with a constant value. it will pass.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to