From 41ed2edc5fe8cddf68e3be66acd8f4666c2f1857 Mon Sep 17 00:00:00 2001 From: zhengdong Date: Wed, 23 Nov 2016 16:03:16 +0800 Subject: [PATCH] KYLIN-2213 UnsupportedOperationException when excute 'not like' query on cube v1 --- .../org/apache/kylin/dict/BuiltInFunctionTransformer.java | 14 ++++++++++++-- .../kylin/metadata/filter/BuiltInFunctionTupleFilter.java | 11 +++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) mode change 100644 => 100755 core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java mode change 100644 => 100755 core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java b/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java old mode 100644 new mode 100755 index 9707f8f..0f8e895 --- a/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java +++ b/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java @@ -89,7 +89,12 @@ public class BuiltInFunctionTransformer implements ITupleFilterTransformer { if (dict == null) return null; - CompareTupleFilter translated = new CompareTupleFilter(FilterOperatorEnum.IN); + CompareTupleFilter translated; + if (builtInFunctionTupleFilter.isReversed()) { + translated = new CompareTupleFilter(FilterOperatorEnum.NOTIN); + } else { + translated = new CompareTupleFilter(FilterOperatorEnum.IN); + } translated.addChild(new ColumnTupleFilter(columnRef)); try { @@ -121,7 +126,12 @@ public class BuiltInFunctionTransformer implements ITupleFilterTransformer { if (dict == null) return null; - CompareTupleFilter translated = new CompareTupleFilter(FilterOperatorEnum.IN); + CompareTupleFilter translated; + if (builtInFunctionTupleFilter.isReversed()) { + translated = new CompareTupleFilter(FilterOperatorEnum.NOTIN); + } else { + translated = new CompareTupleFilter(FilterOperatorEnum.IN); + } translated.addChild(new ColumnTupleFilter(columnRef)); try { diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java old mode 100644 new mode 100755 index 734b374..1e836b7 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java @@ -47,6 +47,7 @@ public class BuiltInFunctionTupleFilter extends FunctionTupleFilter { protected Method method; protected List methodParams; protected boolean isValidFunc = false; + private boolean isReversed = false; public BuiltInFunctionTupleFilter(String name) { this(name, null); @@ -99,6 +100,16 @@ public class BuiltInFunctionTupleFilter extends FunctionTupleFilter { } @Override + public TupleFilter reverse() { + isReversed = !isReversed; + return this; + } + + public boolean isReversed() { + return isReversed; + } + + @Override public void addChild(TupleFilter child) { if (child instanceof ColumnTupleFilter || child instanceof BuiltInFunctionTupleFilter) { columnContainerFilter = child; -- 2.8.3