This is an automated email from the ASF dual-hosted git repository. nic pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 08075e0 KYLIN-4157 When using PrepareStatement query, functions within WHERE will cause InternalErrorException 08075e0 is described below commit 08075e0d0dee9106546c2c1112699a57a3d25c62 Author: mawu2 <ma...@cisco.com> AuthorDate: Wed Sep 4 20:47:19 2019 +0800 KYLIN-4157 When using PrepareStatement query, functions within WHERE will cause InternalErrorException --- .../org/apache/kylin/query/relnode/OLAPContext.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java index 2087b22..59f84df 100755 --- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java +++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPContext.java @@ -25,6 +25,7 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import org.apache.calcite.DataContext; @@ -317,8 +318,7 @@ public class OLAPContext { Object value = dataContext.get(variable); if (value != null) { String str = value.toString(); - if (compFilter.getColumn().getType().isDateTimeFamily()) - str = String.valueOf(DateFormat.stringToMillis(str)); + str = transferDateTimeColumnToMillis(compFilter, str); compFilter.clearPreviousVariableValues(variable); compFilter.bindVariable(variable, str); } @@ -326,6 +326,19 @@ public class OLAPContext { } } } + + private String transferDateTimeColumnToMillis(CompareTupleFilter compFilter, String value) { + TblColRef column = compFilter.getColumn(); + // To fix KYLIN-4157, when using PrepareStatement query, functions within WHERE will cause InternalErrorException + if (Objects.isNull(column)){ + return value; + } + + if (column.getType().isDateTimeFamily()){ + value = String.valueOf(DateFormat.stringToMillis(value)); + } + return value; + } // ============================================================================ public interface IAccessController {