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

Reply via email to