kylin-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "peng.jianhua (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (KYLIN-3119) A few bugs in the function 'massageSql' of 'QueryUtil.java'
Date Mon, 05 Feb 2018 09:03:00 GMT

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

peng.jianhua updated KYLIN-3119:
--------------------------------
    Attachment: 0001-KYLIN-3119-add-test-cases.patch

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

Mime
View raw message