public Double getSelectivity(SortRel rel, RexNode predicate) { return RelMetadataQuery.getSelectivity( rel.getChild(), predicate); }
public Set<RelColumnOrigin> getColumnOrigins( SortRel rel, int iOutputColumn) { return invokeGetColumnOrigins( rel.getChild(), iOutputColumn); }
public Double getPopulationSize(SortRel rel, BitSet groupKey) { return RelMetadataQuery.getPopulationSize( rel.getChild(), groupKey); }
public Set<BitSet> getUniqueKeys(SortRel rel, boolean ignoreNulls) { return RelMetadataQuery.getUniqueKeys(rel.getChild(), ignoreNulls); }
public Double getPopulationSize(SortRel rel, BitSet groupKey) { return RelMetadataQuery.getPopulationSize( rel.getChild(), groupKey); }
public Boolean areColumnsUnique( SortRel rel, BitSet columns, boolean ignoreNulls) { return RelMetadataQuery.areColumnsUnique( rel.getChild(), columns, ignoreNulls); }
public Boolean areColumnsUnique( SortRel rel, BitSet columns, boolean ignoreNulls) { return RelMetadataQuery.areColumnsUnique( rel.getChild(), columns, ignoreNulls); }
public Set<RelColumnOrigin> getColumnOrigins( SortRel rel, int iOutputColumn) { return invokeGetColumnOrigins( rel.getChild(), iOutputColumn); }
public Double getRowCount(SortRel rel) { return RelMetadataQuery.getRowCount(rel.getChild()); }
public Set<BitSet> getUniqueKeys(SortRel rel, boolean ignoreNulls) { return RelMetadataQuery.getUniqueKeys(rel.getChild(), ignoreNulls); }
public void onMatch(RelOptRuleCall call) { ProjectRel project = call.rel(0); SortRel sort = call.rel(1); if (sort.getClass() != SortRel.class) { return; } RelNode newProject = project.copy( project.getTraitSet(), ImmutableList.of(sort.getChild())); final SortRel newSort = sort.copy( sort.getTraitSet(), newProject, sort.getCollation(), sort.offset, sort.fetch); call.transformTo(newSort); } }
public RelNode convert(RelNode rel) { final SortRel sort = (SortRel) rel; if (sort.offset != null || sort.fetch != null) { // Cannot implement "OFFSET n FETCH n" currently. return null; } final RelTraitSet traitSet = sort.getTraitSet().replace(out); return new JdbcSortRel(rel.getCluster(), traitSet, convert(sort.getChild(), traitSet), sort.getCollation()); } }
public RelNode convert(RelNode rel) { final SortRel sort = (SortRel) rel; if (sort.offset != null || sort.fetch != null) { // Cannot implement "OFFSET n FETCH n" currently. return null; } final RelTraitSet traitSet = sort.getTraitSet().replace(out); return new JdbcSortRel(rel.getCluster(), traitSet, convert(sort.getChild(), traitSet), sort.getCollation()); } }
public Double getRowCount(SemiJoinRel rel) { // create a RexNode representing the selectivity of the // semijoin filter and pass it to getSelectivity RexNode semiJoinSelectivity = RelMdUtil.makeSemiJoinSelectivityRexNode(rel); return NumberUtil.multiply( RelMetadataQuery.getSelectivity( rel.getLeft(), semiJoinSelectivity), RelMetadataQuery.getRowCount(rel.getLeft())); }
@Override public void onMatch(RelOptRuleCall call) { if (!call.getPlanner().getRelTraitDefs() .contains(RelCollationTraitDef.INSTANCE)) { // Collation is not an active trait. return; } final SortRel sort = call.rel(0); if (sort.offset != null || sort.fetch != null) { // Don't remove sort if would also remove OFFSET or LIMIT. return; } final RelCollation collation = sort.getCollation(); final RelTraitSet traits = sort.getTraitSet().replace(collation); call.transformTo(convert(sort.getChild(), traits)); } }
public Double getDistinctRowCount( FilterRelBase rel, BitSet groupKey, RexNode predicate) { // REVIEW zfong 4/18/06 - In the Broadbase code, duplicates are not // removed from the two filter lists. However, the code below is // doing so. RexNode unionPreds = RelMdUtil.unionPreds( rel.getCluster().getRexBuilder(), predicate, rel.getCondition()); return RelMetadataQuery.getDistinctRowCount( rel.getChild(), groupKey, unionPreds); }
public Double getDistinctRowCount( FilterRelBase rel, BitSet groupKey, RexNode predicate) { // REVIEW zfong 4/18/06 - In the Broadbase code, duplicates are not // removed from the two filter lists. However, the code below is // doing so. RexNode unionPreds = RelMdUtil.unionPreds( rel.getCluster().getRexBuilder(), predicate, rel.getCondition()); return RelMetadataQuery.getDistinctRowCount( rel.getChild(), groupKey, unionPreds); }
@Override public void onMatch( RelOptRuleCall call ) { SortRel rel = call.rel( 0 ); // Cascading sort does not implement limits if( rel.offset != null || rel.fetch != null ) return; RelTraitSet newTraits = rel.getTraitSet().plus( Cascading.CONVENTION ); call.transformTo( new CascadingSortRel( rel.getCluster(), newTraits, convert( rel.getChild(), newTraits ), rel.getCollation(), rel.offset, rel.fetch ) ); } }
public RelNode convert(RelNode rel) { final SortRel sort = (SortRel) rel; if (sort.offset != null || sort.fetch != null) { return null; } final RelTraitSet traitSet = sort.getTraitSet().replace(EnumerableConvention.INSTANCE); final RelNode input = sort.getChild(); return new EnumerableSortRel( rel.getCluster(), traitSet, convert( input, input.getTraitSet().replace(EnumerableConvention.INSTANCE)), sort.getCollation(), null, null); } }
public Double getSelectivity(FilterRelBase rel, RexNode predicate) { // Take the difference between the predicate passed in and the // predicate in the filter's condition, so we don't apply the // selectivity of the filter twice. If no predicate is passed in, // use the filter's condition. if (predicate != null) { return RelMetadataQuery.getSelectivity( rel.getChild(), RelMdUtil.minusPreds( rel.getCluster().getRexBuilder(), predicate, rel.getCondition())); } else { return RelMetadataQuery.getSelectivity( rel.getChild(), rel.getCondition()); } }