You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Roger Shi (JIRA)" <ji...@apache.org> on 2018/02/09 05:41:00 UTC
[jira] [Comment Edited] (KYLIN-3119) A few bugs in the function
'massageSql' of 'QueryUtil.java'
[ https://issues.apache.org/jira/browse/KYLIN-3119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16357945#comment-16357945 ]
Roger Shi edited comment on KYLIN-3119 at 2/9/18 5:40 AM:
----------------------------------------------------------
[~peng.jianhua], for this line I also have a question. If a string contains continous white space such as 'A B', it will be replaced to 'A B'. It's not the expected behavior. It seems more tests are required to cover these cases.
was (Author: r0ger):
[~peng.jianhua], for this line I also have a question. If a string contains continous white space such as 'A B', it will be replaced to 'A B'. It's not the expected behavior.
> A few bugs in the function 'massageSql' of 'QueryUtil.java'
> -----------------------------------------------------------
>
> Key: KYLIN-3119
> URL: https://issues.apache.org/jira/browse/KYLIN-3119
> Project: Kylin
> Issue Type: Bug
> Components: Query Engine
> Reporter: peng.jianhua
> Assignee: peng.jianhua
> Priority: Major
> Attachments: 0001-KYLIN-3119-A-few-bugs-in-the-function-massageSql-of-.patch, 0001-KYLIN-3119-add-test-cases.patch, 01.PNG, 02.PNG
>
>
> in the function 'massageSql' of 'QueryUtil.java',there are a few bugs:
> 01:
> {code:java}
> while (sql.endsWith(";"))
> sql = sql.substring(0, sql.length() - 1);
> {code}
> if the sql end with ';' and after the ';' still has comments,will be error.Because the sql will add ("\nLIMIT " + limit) at the end.
> 02:
> {code:java}
> if (limit > 0 && !sql.toLowerCase().contains("limit")) {
> sql += ("\nLIMIT " + limit);
> }
> if (offset > 0 && !sql.toLowerCase().contains("offset")) {
> sql += ("\nOFFSET " + offset);
> }
> {code}
> if the sql already has word 'limit' in it,such as Alias,Subquery,Comments,the ‘limit’ in the Input box will be invalid.
> for example,the sql has subquery,and there is 'limit' in subquery.
> {code:java}
> select KYLIN_SALES.PART_DT, count(KYLIN_SALES.PRICE)
> from KYLIN_SALES
> inner join (select ACCOUNT_ID, ACCOUNT_BUYER_LEVEL from KYLIN_ACCOUNT where ACCOUNT_COUNTRY = 'US' limit 10000) as TT
> on KYLIN_SALES.BUYER_ID = TT.ACCOUNT_ID
> group by KYLIN_SALES.PART_DT
> {code}
> the ‘limit’ in the Input box will be invalid.please refer to 01.png and 02.png.
> 03:
> {code:java}
> // https://issues.apache.org/jira/browse/KYLIN-2649
> if (kylinConfig.getForceLimit() > 0 && !sql.toLowerCase().contains("limit")
> && sql.toLowerCase().contains("*")) {
> sql += ("\nLIMIT " + kylinConfig.getForceLimit());
> }
> {code}
> Because KYLIN-2649 is still unresolved,so I didn't change the code,but it has same 'limit' word bugs like above.
> And there are some situations that the sql contains \*,such as {code:java}count(*),kylin_sales.*{code}
> Maybe the \* in subquery too.
> it seems improperly to deal with the sql just use {code:java}
> sql.toLowerCase().contains("*")
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)