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 ImmutableBitSet collectColumnsInFilter(TupleFilter filter) { Set<TblColRef> columnsInFilter = new HashSet<>(); TupleFilter.collectColumns(filter, columnsInFilter); BitSet result = new BitSet(); for (TblColRef col : columnsInFilter) result.set(col.getColumnDesc().getZeroBasedIndex()); return new ImmutableBitSet(result); }
void translateFilter(OLAPContext context) { if (this.condition == null) { return; } TupleFilterVisitor visitor = new TupleFilterVisitor(this.columnRowType); TupleFilter filter = this.condition.accept(visitor); // optimize the filter, the optimization has to be segment-irrelevant filter = new FilterOptimizeTransformer().transform(filter); Set<TblColRef> filterColumns = Sets.newHashSet(); TupleFilter.collectColumns(filter, filterColumns); for (TblColRef tblColRef : filterColumns) { if (!tblColRef.isInnerColumn() && context.belongToContextTables(tblColRef)) { context.allColumns.add(tblColRef); context.filterColumns.add(tblColRef); } } context.filter = and(context.filter, filter); }
TupleFilter.collectColumns(havingFilter, aggrOutCols);
@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; }
TupleFilter.collectColumns(filter, inevaluableColumns); return ConstantTupleFilter.TRUE; TupleFilter.collectColumns(filter, inevaluableColumns); return ConstantTupleFilter.TRUE;
TupleFilter filterD = translateDerived(filter, loosenedColumnD); groupsD.addAll(loosenedColumnD); TupleFilter.collectColumns(filterD, filterColumnD); context.setFilterMask(getQueryFilterMask(filterColumnD));
@Override public TupleExpression visitCaseCall(CaseTupleExpression caseExpr) { for (Pair<TupleFilter, TupleExpression> entry : caseExpr.getWhenList()) { TupleFilter filter = entry.getFirst(); if (ifFCols) { TupleFilter.collectColumns(filter, filterColumns); } entry.getSecond().accept(this); } if (caseExpr.getElseExpr() != null) { caseExpr.getElseExpr().accept(this); } return caseExpr; }
private void validateFilterPushDown(GTInfo info) { if (!hasFilterPushDown()) return; Set<TblColRef> filterColumns = Sets.newHashSet(); TupleFilter.collectColumns(filterPushDown, filterColumns); for (TblColRef col : filterColumns) { // filter columns must belong to the table info.validateColRef(col); // filter columns must be returned to satisfy upper layer evaluation (calcite) columns = columns.set(col.getColumnDesc().getZeroBasedIndex()); } // un-evaluatable filter must be removed if (!TupleFilter.isEvaluableRecursively(filterPushDown)) { Set<TblColRef> unevaluableColumns = Sets.newHashSet(); filterPushDown = GTUtil.convertFilterUnevaluatable(filterPushDown, info, unevaluableColumns); // columns in un-evaluatable filter must be returned without loss so upper layer can do final evaluation if (hasAggregation()) { for (TblColRef col : unevaluableColumns) { aggrGroupBy = aggrGroupBy.set(col.getColumnDesc().getZeroBasedIndex()); } } } }
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); } }
TupleFilter.collectColumns(filter, unstrictlyFilteredColumns); return ConstantTupleFilter.TRUE; TupleFilter.collectColumns(filter, unstrictlyFilteredColumns); return ConstantTupleFilter.TRUE;
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 ImmutableBitSet collectColumnsInFilter(TupleFilter filter) { Set<TblColRef> columnsInFilter = new HashSet<>(); TupleFilter.collectColumns(filter, columnsInFilter); BitSet result = new BitSet(); for (TblColRef col : columnsInFilter) result.set(col.getColumnDesc().getZeroBasedIndex()); return new ImmutableBitSet(result); }
void translateFilter(OLAPContext context) { if (this.condition == null) { return; } TupleFilterVisitor visitor = new TupleFilterVisitor(this.columnRowType); TupleFilter filter = this.condition.accept(visitor); // optimize the filter, the optimization has to be segment-irrelevant filter = new FilterOptimizeTransformer().transform(filter); Set<TblColRef> filterColumns = Sets.newHashSet(); TupleFilter.collectColumns(filter, filterColumns); for (TblColRef tblColRef : filterColumns) { if (!tblColRef.isInnerColumn() && context.belongToContextTables(tblColRef)) { context.allColumns.add(tblColRef); context.filterColumns.add(tblColRef); } } context.filter = and(context.filter, filter); }
TupleFilter.collectColumns(havingFilter, aggrOutCols);
@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; }
TupleFilter.collectColumns(filter, inevaluableColumns); return ConstantTupleFilter.TRUE; TupleFilter.collectColumns(filter, inevaluableColumns); return ConstantTupleFilter.TRUE;
@Override public TupleExpression visitCaseCall(CaseTupleExpression caseExpr) { for (Pair<TupleFilter, TupleExpression> entry : caseExpr.getWhenList()) { TupleFilter filter = entry.getFirst(); if (ifFCols) { TupleFilter.collectColumns(filter, filterColumns); } entry.getSecond().accept(this); } if (caseExpr.getElseExpr() != null) { caseExpr.getElseExpr().accept(this); } return caseExpr; }
private void validateFilterPushDown(GTInfo info) { if (!hasFilterPushDown()) return; Set<TblColRef> filterColumns = Sets.newHashSet(); TupleFilter.collectColumns(filterPushDown, filterColumns); for (TblColRef col : filterColumns) { // filter columns must belong to the table info.validateColRef(col); // filter columns must be returned to satisfy upper layer evaluation (calcite) columns = columns.set(col.getColumnDesc().getZeroBasedIndex()); } // un-evaluatable filter must be removed if (!TupleFilter.isEvaluableRecursively(filterPushDown)) { Set<TblColRef> unevaluableColumns = Sets.newHashSet(); filterPushDown = GTUtil.convertFilterUnevaluatable(filterPushDown, info, unevaluableColumns); // columns in un-evaluatable filter must be returned without loss so upper layer can do final evaluation if (hasAggregation()) { for (TblColRef col : unevaluableColumns) { aggrGroupBy = aggrGroupBy.set(col.getColumnDesc().getZeroBasedIndex()); } } } }