public TblColRef getColumn() { if (columnContainerFilter == null) return null; if (columnContainerFilter instanceof ColumnTupleFilter) return ((ColumnTupleFilter) columnContainerFilter).getColumn(); else if (columnContainerFilter instanceof BuiltInFunctionTupleFilter) return ((BuiltInFunctionTupleFilter) columnContainerFilter).getColumn(); throw new UnsupportedOperationException("Wrong type TupleFilter in FunctionTupleFilter."); }
public static void collectColumns(TupleFilter filter, Set<TblColRef> collector) { if (filter == null || collector == null) return; if (filter instanceof ColumnTupleFilter) { ColumnTupleFilter columnTupleFilter = (ColumnTupleFilter) filter; collector.add(columnTupleFilter.getColumn()); } for (TupleFilter child : filter.getChildren()) { collectColumns(child, collector); } }
private void collectColumnsRecursively(TupleFilter filter, Set<TblColRef> collector) { if (filter == null) return; if (filter instanceof ColumnTupleFilter) { collector.add(((ColumnTupleFilter) filter).getColumn()); } for (TupleFilter child : filter.getChildren()) { collectColumnsRecursively(child, collector); } }
@Override public void addChild(TupleFilter child) { if (child instanceof ColumnTupleFilter) { super.addChild(child); ColumnTupleFilter columnFilter = (ColumnTupleFilter) child; if (this.column != null) { throw new IllegalStateException("Duplicate columns! old is " + column.getName() + " and new is " + columnFilter.getColumn().getName()); } this.column = columnFilter.getColumn(); } else if (child instanceof ConstantTupleFilter) { // super.addChild(child) is omitted because the filter table name is useless at storage side, // we'll extract the useful filterTableResourceIdentifier,filterTableType etc and save it at the MassInTupleFilter itself if (filterTableName == null) { filterTableName = (String) child.getValues().iterator().next(); ExternalFilterDesc externalFilterDesc = TableMetadataManager.getInstance(KylinConfig.getInstanceFromEnv()).getExtFilterDesc(filterTableName); if (externalFilterDesc == null) { throw new IllegalArgumentException("External filter named " + filterTableName + " is not found"); } filterTableType = externalFilterDesc.getFilterTableType(); filterTableResourceIdentifier = externalFilterDesc.getFilterResourceIdentifier(); } } else { throw new IllegalStateException("MassInTupleFilter only has two children: one ColumnTupleFilter and one ConstantTupleFilter"); } }
private CompareTupleFilter eq(ColumnTupleFilter col, int... values) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.IN); r.addChild(col); List<ByteArray> list = Lists.newArrayList(); for (int v : values) { int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); list.add(bytes); } r.addChild(new ConstantTupleFilter(list)); return r; }
private CompareTupleFilter eq(ColumnTupleFilter col, int... values) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.IN); r.addChild(col); List<ByteArray> list = Lists.newArrayList(); for (int v : values) { int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); list.add(bytes); } r.addChild(new ConstantTupleFilter(list)); return r; }
private CompareTupleFilter gt(ColumnTupleFilter col, int v) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.GT); r.addChild(col); int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); r.addChild(new ConstantTupleFilter(bytes)); return r; }
private CompareTupleFilter gt(ColumnTupleFilter col, int v) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.GT); r.addChild(col); int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); r.addChild(new ConstantTupleFilter(bytes)); return r; }
@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() == FilterOperatorEnum.NOT && !TupleFilter.isEvaluableRecursively(filter)) { TupleFilter.collectColumns(filter, unevaluatableColumnCollector); return ConstantTupleFilter.TRUE; } // shortcut for unEvaluatable filter if (!filter.isEvaluable()) { TupleFilter.collectColumns(filter, unevaluatableColumnCollector); return ConstantTupleFilter.TRUE; } // map to column onto grid table if (colMapping != null && filter instanceof ColumnTupleFilter) { ColumnTupleFilter colFilter = (ColumnTupleFilter) filter; int gtColIdx = mapCol(colFilter.getColumn()); return new ColumnTupleFilter(info.colRef(gtColIdx)); } // encode constants if (useEncodeConstants && filter instanceof CompareTupleFilter) { return encodeConstants((CompareTupleFilter) filter); } return filter; }
public static void collectColumns(TupleFilter filter, Set<TblColRef> columns) { if (filter == null) return; if (filter instanceof ColumnTupleFilter) { ColumnTupleFilter columnTupleFilter = (ColumnTupleFilter) filter; columns.add(columnTupleFilter.getColumn()); } for (TupleFilter child : filter.getChildren()) { collectColumns(child, columns); } }
@Override public void addChild(TupleFilter child) { super.addChild(child); if (child instanceof ColumnTupleFilter) { ColumnTupleFilter columnFilter = (ColumnTupleFilter) child; if (this.column != null) { throw new IllegalStateException("Duplicate columns! old is " + column.getName() + " and new is " + columnFilter.getColumn().getName()); } this.column = columnFilter.getColumn(); // if value is before column, we need to reverse the operator. e.g. "1 >= c1" => "c1 <= 1" if (!this.conditionValues.isEmpty() && needSwapOperator()) { this.operator = SWAP_OP_MAP.get(this.operator); } } else if (child instanceof ConstantTupleFilter) { this.conditionValues.addAll(child.getValues()); this.firstCondValue = this.conditionValues.iterator().next(); } else if (child instanceof DynamicTupleFilter) { DynamicTupleFilter dynamicFilter = (DynamicTupleFilter) child; this.dynamicVariables.put(dynamicFilter.getVariableName(), null); } //TODO // else if (child instanceof ExtractTupleFilter) { // } else if (child instanceof CaseTupleFilter) { // } }
private void collectColumnsRecursively(TupleFilter filter, Set<TblColRef> collector) { if (filter instanceof ColumnTupleFilter) { collectColumns(((ColumnTupleFilter) filter).getColumn(), collector); } for (TupleFilter child : filter.getChildren()) { collectColumnsRecursively(child, collector); } }
public TblColRef getColumn() { if (columnContainerFilter == null) return null; if (columnContainerFilter instanceof ColumnTupleFilter) return ((ColumnTupleFilter) columnContainerFilter).getColumn(); else if (columnContainerFilter instanceof BuiltInFunctionTupleFilter) return ((BuiltInFunctionTupleFilter) columnContainerFilter).getColumn(); throw new UnsupportedOperationException("Wrong type TupleFilter in FunctionTupleFilter."); }
public TblColRef getColumn() { if (columnContainerFilter == null) return null; if (columnContainerFilter instanceof ColumnTupleFilter) return ((ColumnTupleFilter) columnContainerFilter).getColumn(); else if (columnContainerFilter instanceof FunctionTupleFilter) return ((FunctionTupleFilter) columnContainerFilter).getColumn(); throw new UnsupportedOperationException("Wrong type TupleFilter in FunctionTupleFilter."); }
private void collectColumnsRecursively(TupleFilter filter, Set<TblColRef> collector) { if (filter == null) return; if (filter instanceof ColumnTupleFilter) { collector.add(((ColumnTupleFilter) filter).getColumn()); } for (TupleFilter child : filter.getChildren()) { collectColumnsRecursively(child, collector); } }
public static void collectColumns(TupleFilter filter, Set<TblColRef> collector) { if (filter == null || collector == null) return; if (filter instanceof ColumnTupleFilter) { ColumnTupleFilter columnTupleFilter = (ColumnTupleFilter) filter; collector.add(columnTupleFilter.getColumn()); } for (TupleFilter child : filter.getChildren()) { collectColumns(child, collector); } }
public static void collectColumns(TupleFilter filter, Set<TblColRef> columns) { if (filter == null) return; if (filter instanceof ColumnTupleFilter) { ColumnTupleFilter columnTupleFilter = (ColumnTupleFilter) filter; columns.add(columnTupleFilter.getColumn()); } for (TupleFilter child : filter.getChildren()) { collectColumns(child, columns); } }
private CompareTupleFilter gt(ColumnTupleFilter col, int v) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.GT); r.addChild(col); int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); r.addChild(new ConstantTupleFilter(bytes)); return r; }
private CompareTupleFilter gt(ColumnTupleFilter col, int v) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.GT); r.addChild(col); int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); r.addChild(new ConstantTupleFilter(bytes)); return r; }