weibin0516 created KYLIN-4069:
---------------------------------
Summary: HivePushDownConverter.doConvert will change sql semantics
in some scenarios
Key: KYLIN-4069
URL: https://issues.apache.org/jira/browse/KYLIN-4069
Project: Kylin
Issue Type: Bug
Components: Query Engine
Affects Versions: v2.6.2
Reporter: weibin0516
Assignee: weibin0516
HivePushDownConverter.doConvert source code is as follows:
{code:java}
public static String doConvert(String originStr, boolean isPrepare) {
// Step1.Replace " with `
String convertedSql = replaceString(originStr, "\"", "`");
// Step2.Replace extract functions
convertedSql = extractReplace(convertedSql);
// Step3.Replace cast type string
convertedSql = castReplace(convertedSql);
// Step4.Replace sub query
convertedSql = subqueryReplace(convertedSql);
// Step5.Replace char_length with length
convertedSql = replaceString(convertedSql, "CHAR_LENGTH", "LENGTH");
convertedSql = replaceString(convertedSql, "char_length", "length");
// Step6.Replace "||" with concat
convertedSql = concatReplace(convertedSql);
// Step7.Add quote for interval in timestampadd
convertedSql = timestampAddDiffReplace(convertedSql);
// Step8.Replace integer with int
convertedSql = replaceString(convertedSql, "INTEGER", "INT");
convertedSql = replaceString(convertedSql, "integer", "int");
// Step9.Add limit 1 for prepare select sql to speed up
if (isPrepare) {
convertedSql = addLimit(convertedSql);
}
return convertedSql;
}
{code}
It is not advisable to directly replace the sql text. The following example
will convert sql to another error sql:
{code:sql}
SELECT "CHAR_LENGTH" FROM datasource.a
{code}
will convert to
{code:sql}
SELECT `LENGTH` FROM datasource.a
{code}
Every use of replaceString in doConvert will cause such problems.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)