minor, fix checkstyle
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a9ba1da1 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a9ba1da1 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a9ba1da1 Branch: refs/heads/1.5.x-CDH5.7 Commit: a9ba1da138966cb3fd6c4bd6950fe4b48597cf8d Parents: 9e0b8d8 Author: Hongbin Ma <mahong...@apache.org> Authored: Wed Aug 31 11:54:02 2016 +0800 Committer: Hongbin Ma <mahong...@apache.org> Committed: Wed Aug 31 11:54:02 2016 +0800 ---------------------------------------------------------------------- .../java/org/apache/kylin/gridtable/GTUtil.java | 383 ++++++++++--------- 1 file changed, 199 insertions(+), 184 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/a9ba1da1/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java b/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java index ce0f016..7406e81 100644 --- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java +++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTUtil.java @@ -75,224 +75,239 @@ public class GTUtil { IFilterCodeSystem<ByteArray> filterCodeSystem = wrap(info.codeSystem.getComparator()); - byte[] bytes = TupleFilterSerializer.serialize(rootFilter, new TupleFilterSerializer.Decorator() { - @Override - public TupleFilter onSerialize(TupleFilter filter) { - if (filter == null) - return null; - - // In case of NOT(unEvaluatableFilter), we should immediately replace it as TRUE, - // Otherwise, unEvaluatableFilter will later be replace with TRUE and NOT(unEvaluatableFilter) - // will always return FALSE. - if (filter.getOperator() == TupleFilter.FilterOperatorEnum.NOT && !TupleFilter.isEvaluableRecursively(filter)) { - TupleFilter.collectColumns(filter, unevaluatableColumnCollector); - return ConstantTupleFilter.TRUE; - } + byte[] bytes = TupleFilterSerializer.serialize(rootFilter, new GTConvertDecorator(unevaluatableColumnCollector, colMapping, info, encodeConstants), filterCodeSystem); - // shortcut for unEvaluatable filter - if (!filter.isEvaluable()) { - TupleFilter.collectColumns(filter, unevaluatableColumnCollector); - return ConstantTupleFilter.TRUE; - } + return TupleFilterSerializer.deserialize(bytes, filterCodeSystem); + } - // map to column onto grid table - if (colMapping != null && filter instanceof ColumnTupleFilter) { - ColumnTupleFilter colFilter = (ColumnTupleFilter) filter; - int gtColIdx = colMapping.indexOf(colFilter.getColumn()); - return new ColumnTupleFilter(info.colRef(gtColIdx)); - } + public static IFilterCodeSystem<ByteArray> wrap(final IGTComparator comp) { + return new IFilterCodeSystem<ByteArray>() { - // encode constants - if (encodeConstants && filter instanceof CompareTupleFilter) { - return encodeConstants((CompareTupleFilter) filter); - } - if (encodeConstants && filter instanceof BuiltInFunctionTupleFilter) { - if (!((BuiltInFunctionTupleFilter) filter).hasNested()) { - return encodeConstants((BuiltInFunctionTupleFilter) filter); - } else { - throw new IllegalStateException("Nested BuiltInFunctionTupleFilter is not supported to be pushed down"); - } - } + @Override + public int compare(ByteArray o1, ByteArray o2) { + return comp.compare(o1, o2); + } - return filter; + @Override + public boolean isNull(ByteArray code) { + return comp.isNull(code); } - @SuppressWarnings({ "rawtypes", "unchecked" }) - private TupleFilter encodeConstants(CompareTupleFilter oldCompareFilter) { - // extract ColumnFilter & ConstantFilter - TblColRef externalCol = oldCompareFilter.getColumn(); + @Override + public void serialize(ByteArray code, ByteBuffer buffer) { + if (code == null) + BytesUtil.writeByteArray(null, 0, 0, buffer); + else + BytesUtil.writeByteArray(code.array(), code.offset(), code.length(), buffer); + } - if (externalCol == null) { - return oldCompareFilter; - } + @Override + public ByteArray deserialize(ByteBuffer buffer) { + return new ByteArray(BytesUtil.readByteArray(buffer)); + } + }; + } - Collection constValues = oldCompareFilter.getValues(); - if (constValues == null || constValues.isEmpty()) { - return oldCompareFilter; - } + private static class GTConvertDecorator implements TupleFilterSerializer.Decorator { + private final Set<TblColRef> unevaluatableColumnCollector; + private final List<TblColRef> colMapping; + private final GTInfo info; + private final boolean encodeConstants; + + public GTConvertDecorator(Set<TblColRef> unevaluatableColumnCollector, List<TblColRef> colMapping, GTInfo info, boolean encodeConstants) { + this.unevaluatableColumnCollector = unevaluatableColumnCollector; + this.colMapping = colMapping; + this.info = info; + this.encodeConstants = encodeConstants; + buf = ByteBuffer.allocate(info.getMaxColumnLength()); + } + + @Override + public TupleFilter onSerialize(TupleFilter filter) { + if (filter == null) + return null; + + // In case of NOT(unEvaluatableFilter), we should immediately replace it as TRUE, + // Otherwise, unEvaluatableFilter will later be replace with TRUE and NOT(unEvaluatableFilter) + // will always return FALSE. + if (filter.getOperator() == TupleFilter.FilterOperatorEnum.NOT && !TupleFilter.isEvaluableRecursively(filter)) { + TupleFilter.collectColumns(filter, unevaluatableColumnCollector); + return ConstantTupleFilter.TRUE; + } - //CompareTupleFilter containing BuiltInFunctionTupleFilter will not reach here caz it will be transformed by BuiltInFunctionTransformer - CompareTupleFilter newCompareFilter = new CompareTupleFilter(oldCompareFilter.getOperator()); - newCompareFilter.addChild(new ColumnTupleFilter(externalCol)); - - //for CompareTupleFilter containing dynamicVariables, the below codes will actually replace dynamicVariables - //with normal ConstantTupleFilter - - Object firstValue = constValues.iterator().next(); - int col = colMapping == null ? externalCol.getColumnDesc().getZeroBasedIndex() : colMapping.indexOf(externalCol); - - TupleFilter result; - ByteArray code; - - // translate constant into code - switch (newCompareFilter.getOperator()) { - case EQ: - case IN: - Set newValues = Sets.newHashSet(); - for (Object value : constValues) { - code = translate(col, value, 0); - if (code != null) - newValues.add(code); - } - if (newValues.isEmpty()) { - result = ConstantTupleFilter.FALSE; - } else { - newCompareFilter.addChild(new ConstantTupleFilter(newValues)); - result = newCompareFilter; - } - break; - case NEQ: - code = translate(col, firstValue, 0); - if (code == null) { - result = ConstantTupleFilter.TRUE; - } else { - newCompareFilter.addChild(new ConstantTupleFilter(code)); - result = newCompareFilter; - } - break; - case LT: - code = translate(col, firstValue, 1); - if (code == null) { - result = ConstantTupleFilter.TRUE; - } else { - newCompareFilter.addChild(new ConstantTupleFilter(code)); - result = newCompareFilter; - } - break; - case LTE: - code = translate(col, firstValue, -1); - if (code == null) { - result = ConstantTupleFilter.FALSE; - } else { - newCompareFilter.addChild(new ConstantTupleFilter(code)); - result = newCompareFilter; - } - break; - case GT: - code = translate(col, firstValue, -1); - if (code == null) { - result = ConstantTupleFilter.TRUE; - } else { - newCompareFilter.addChild(new ConstantTupleFilter(code)); - result = newCompareFilter; - } - break; - case GTE: - code = translate(col, firstValue, 1); - if (code == null) { - result = ConstantTupleFilter.FALSE; - } else { - newCompareFilter.addChild(new ConstantTupleFilter(code)); - result = newCompareFilter; - } - break; - default: - throw new IllegalStateException("Cannot handle operator " + newCompareFilter.getOperator()); - } - return result; + // shortcut for unEvaluatable filter + if (!filter.isEvaluable()) { + TupleFilter.collectColumns(filter, unevaluatableColumnCollector); + return ConstantTupleFilter.TRUE; } - @SuppressWarnings({ "rawtypes", "unchecked" }) - private TupleFilter encodeConstants(BuiltInFunctionTupleFilter funcFilter) { - // extract ColumnFilter & ConstantFilter - TblColRef externalCol = funcFilter.getColumn(); + // map to column onto grid table + if (colMapping != null && filter instanceof ColumnTupleFilter) { + ColumnTupleFilter colFilter = (ColumnTupleFilter) filter; + int gtColIdx = colMapping.indexOf(colFilter.getColumn()); + return new ColumnTupleFilter(info.colRef(gtColIdx)); + } - if (externalCol == null) { - return funcFilter; + // encode constants + if (encodeConstants && filter instanceof CompareTupleFilter) { + return encodeConstants((CompareTupleFilter) filter); + } + if (encodeConstants && filter instanceof BuiltInFunctionTupleFilter) { + if (!((BuiltInFunctionTupleFilter) filter).hasNested()) { + return encodeConstants((BuiltInFunctionTupleFilter) filter); + } else { + throw new IllegalStateException("Nested BuiltInFunctionTupleFilter is not supported to be pushed down"); } + } - Collection constValues = funcFilter.getConstantTupleFilter().getValues(); - if (constValues == null || constValues.isEmpty()) { - return funcFilter; - } + return filter; + } - BuiltInFunctionTupleFilter newFuncFilter; - try { - newFuncFilter = funcFilter.getClass().getConstructor(String.class).newInstance(funcFilter.getName()); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { - throw new RuntimeException(e); - } - newFuncFilter.addChild(new ColumnTupleFilter(externalCol)); + @SuppressWarnings({ "rawtypes", "unchecked" }) + private TupleFilter encodeConstants(CompareTupleFilter oldCompareFilter) { + // extract ColumnFilter & ConstantFilter + TblColRef externalCol = oldCompareFilter.getColumn(); - int col = colMapping == null ? externalCol.getColumnDesc().getZeroBasedIndex() : colMapping.indexOf(externalCol); + if (externalCol == null) { + return oldCompareFilter; + } + + Collection constValues = oldCompareFilter.getValues(); + if (constValues == null || constValues.isEmpty()) { + return oldCompareFilter; + } + + //CompareTupleFilter containing BuiltInFunctionTupleFilter will not reach here caz it will be transformed by BuiltInFunctionTransformer + CompareTupleFilter newCompareFilter = new CompareTupleFilter(oldCompareFilter.getOperator()); + newCompareFilter.addChild(new ColumnTupleFilter(externalCol)); + + //for CompareTupleFilter containing dynamicVariables, the below codes will actually replace dynamicVariables + //with normal ConstantTupleFilter - ByteArray code; + Object firstValue = constValues.iterator().next(); + int col = colMapping == null ? externalCol.getColumnDesc().getZeroBasedIndex() : colMapping.indexOf(externalCol); - // translate constant into code + TupleFilter result; + ByteArray code; + + // translate constant into code + switch (newCompareFilter.getOperator()) { + case EQ: + case IN: Set newValues = Sets.newHashSet(); for (Object value : constValues) { code = translate(col, value, 0); - if (code == null) { - throw new IllegalStateException("Cannot serialize BuiltInFunctionTupleFilter"); - } - newValues.add(code); + if (code != null) + newValues.add(code); + } + if (newValues.isEmpty()) { + result = ConstantTupleFilter.FALSE; + } else { + newCompareFilter.addChild(new ConstantTupleFilter(newValues)); + result = newCompareFilter; + } + break; + case NEQ: + code = translate(col, firstValue, 0); + if (code == null) { + result = ConstantTupleFilter.TRUE; + } else { + newCompareFilter.addChild(new ConstantTupleFilter(code)); + result = newCompareFilter; + } + break; + case LT: + code = translate(col, firstValue, 1); + if (code == null) { + result = ConstantTupleFilter.TRUE; + } else { + newCompareFilter.addChild(new ConstantTupleFilter(code)); + result = newCompareFilter; + } + break; + case LTE: + code = translate(col, firstValue, -1); + if (code == null) { + result = ConstantTupleFilter.FALSE; + } else { + newCompareFilter.addChild(new ConstantTupleFilter(code)); + result = newCompareFilter; } - newFuncFilter.addChild(new ConstantTupleFilter(newValues)); + break; + case GT: + code = translate(col, firstValue, -1); + if (code == null) { + result = ConstantTupleFilter.TRUE; + } else { + newCompareFilter.addChild(new ConstantTupleFilter(code)); + result = newCompareFilter; + } + break; + case GTE: + code = translate(col, firstValue, 1); + if (code == null) { + result = ConstantTupleFilter.FALSE; + } else { + newCompareFilter.addChild(new ConstantTupleFilter(code)); + result = newCompareFilter; + } + break; + default: + throw new IllegalStateException("Cannot handle operator " + newCompareFilter.getOperator()); + } + return result; + } - return newFuncFilter; + @SuppressWarnings({ "rawtypes", "unchecked" }) + private TupleFilter encodeConstants(BuiltInFunctionTupleFilter funcFilter) { + // extract ColumnFilter & ConstantFilter + TblColRef externalCol = funcFilter.getColumn(); + + if (externalCol == null) { + return funcFilter; } - transient ByteBuffer buf = ByteBuffer.allocate(info.getMaxColumnLength()); + Collection constValues = funcFilter.getConstantTupleFilter().getValues(); + if (constValues == null || constValues.isEmpty()) { + return funcFilter; + } - private ByteArray translate(int col, Object value, int roundingFlag) { - try { - buf.clear(); - info.codeSystem.encodeColumnValue(col, value, roundingFlag, buf); - return ByteArray.copyOf(buf.array(), 0, buf.position()); - } catch (IllegalArgumentException ex) { - return null; - } + BuiltInFunctionTupleFilter newFuncFilter; + try { + newFuncFilter = funcFilter.getClass().getConstructor(String.class).newInstance(funcFilter.getName()); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + throw new RuntimeException(e); } - }, filterCodeSystem); + newFuncFilter.addChild(new ColumnTupleFilter(externalCol)); - return TupleFilterSerializer.deserialize(bytes, filterCodeSystem); - } + int col = colMapping == null ? externalCol.getColumnDesc().getZeroBasedIndex() : colMapping.indexOf(externalCol); - public static IFilterCodeSystem<ByteArray> wrap(final IGTComparator comp) { - return new IFilterCodeSystem<ByteArray>() { + ByteArray code; - @Override - public int compare(ByteArray o1, ByteArray o2) { - return comp.compare(o1, o2); + // translate constant into code + Set newValues = Sets.newHashSet(); + for (Object value : constValues) { + code = translate(col, value, 0); + if (code == null) { + throw new IllegalStateException("Cannot serialize BuiltInFunctionTupleFilter"); + } + newValues.add(code); } + newFuncFilter.addChild(new ConstantTupleFilter(newValues)); - @Override - public boolean isNull(ByteArray code) { - return comp.isNull(code); - } + return newFuncFilter; + } - @Override - public void serialize(ByteArray code, ByteBuffer buffer) { - if (code == null) - BytesUtil.writeByteArray(null, 0, 0, buffer); - else - BytesUtil.writeByteArray(code.array(), code.offset(), code.length(), buffer); - } + transient ByteBuffer buf; - @Override - public ByteArray deserialize(ByteBuffer buffer) { - return new ByteArray(BytesUtil.readByteArray(buffer)); + private ByteArray translate(int col, Object value, int roundingFlag) { + try { + buf.clear(); + info.codeSystem.encodeColumnValue(col, value, roundingFlag, buf); + return ByteArray.copyOf(buf.array(), 0, buf.position()); + } catch (IllegalArgumentException ex) { + return null; } - }; + } } }