public ImmutableBitSet getSortedInputs() throws CalciteSemanticException { ImmutableBitSet.Builder sortedInputsBuilder = ImmutableBitSet.builder(); JoinPredicateInfo joinPredInfo = HiveCalciteUtil.JoinPredicateInfo. constructJoinPredicateInfo(this); List<ImmutableIntList> joinKeysInChildren = new ArrayList<ImmutableIntList>(); joinKeysInChildren.add( ImmutableIntList.copyOf( joinPredInfo.getProjsFromLeftPartOfJoinKeysInChildSchema())); joinKeysInChildren.add( ImmutableIntList.copyOf( joinPredInfo.getProjsFromRightPartOfJoinKeysInChildSchema())); final RelMetadataQuery mq = this.left.getCluster().getMetadataQuery(); for (int i=0; i<this.getInputs().size(); i++) { boolean correctOrderFound = RelCollations.contains( mq.collations(this.getInputs().get(i)), joinKeysInChildren.get(i)); if (correctOrderFound) { sortedInputsBuilder.set(i); } } return sortedInputsBuilder.build(); }
public ImmutableBitSet getSortedInputs() throws CalciteSemanticException { ImmutableBitSet.Builder sortedInputsBuilder = ImmutableBitSet.builder(); JoinPredicateInfo joinPredInfo = HiveCalciteUtil.JoinPredicateInfo. constructJoinPredicateInfo(this); List<ImmutableIntList> joinKeysInChildren = new ArrayList<ImmutableIntList>(); joinKeysInChildren.add( ImmutableIntList.copyOf( joinPredInfo.getProjsFromLeftPartOfJoinKeysInChildSchema())); joinKeysInChildren.add( ImmutableIntList.copyOf( joinPredInfo.getProjsFromRightPartOfJoinKeysInChildSchema())); for (int i=0; i<this.getInputs().size(); i++) { boolean correctOrderFound = RelCollations.contains( RelMetadataQuery.instance().collations(this.getInputs().get(i)), joinKeysInChildren.get(i)); if (correctOrderFound) { sortedInputsBuilder.set(i); } } return sortedInputsBuilder.build(); }
/** Returns whether a collation indicates that the collection is sorted on * a given list of keys. * * @param collation Collation * @param keys List of keys * @return Whether the collection is sorted on the given keys */ public static boolean contains(RelCollation collation, Iterable<Integer> keys) { return contains(collation, Util.distinctList(keys)); }
/** Returns whether one of a list of collations indicates that the collection * is sorted on the given list of keys. */ public static boolean contains(List<RelCollation> collations, ImmutableIntList keys) { final List<Integer> distinctKeys = Util.distinctList(keys); for (RelCollation collation : collations) { if (contains(collation, distinctKeys)) { return true; } } return false; }
/** Returns whether a collation indicates that the collection is sorted on * a given list of keys. * * @param collation Collation * @param keys List of keys * @return Whether the collection is sorted on the given keys */ public static boolean contains(RelCollation collation, Iterable<Integer> keys) { return contains(collation, Util.distinctList(keys)); }
/** Returns whether one of a list of collations indicates that the collection * is sorted on the given list of keys. */ public static boolean contains(List<RelCollation> collations, ImmutableIntList keys) { final List<Integer> distinctKeys = Util.distinctList(keys); for (RelCollation collation : collations) { if (contains(collation, distinctKeys)) { return true; } } return false; }
/** Helper method to determine a {@link Join}'s collation assuming that it * uses a merge-join algorithm. * * <p>If the inputs are sorted on other keys <em>in addition to</em> the join * key, the result preserves those collations too. */ public static List<RelCollation> mergeJoin(RelMetadataQuery mq, RelNode left, RelNode right, ImmutableIntList leftKeys, ImmutableIntList rightKeys) { final ImmutableList.Builder<RelCollation> builder = ImmutableList.builder(); final ImmutableList<RelCollation> leftCollations = mq.collations(left); assert RelCollations.contains(leftCollations, leftKeys) : "cannot merge join: left input is not sorted on left keys"; builder.addAll(leftCollations); final ImmutableList<RelCollation> rightCollations = mq.collations(right); assert RelCollations.contains(rightCollations, rightKeys) : "cannot merge join: right input is not sorted on right keys"; final int leftFieldCount = left.getRowType().getFieldCount(); for (RelCollation collation : rightCollations) { builder.add(RelCollations.shift(collation, leftFieldCount)); } return builder.build(); } }
/** Helper method to determine a {@link Join}'s collation assuming that it * uses a merge-join algorithm. * * <p>If the inputs are sorted on other keys <em>in addition to</em> the join * key, the result preserves those collations too. */ public static List<RelCollation> mergeJoin(RelMetadataQuery mq, RelNode left, RelNode right, ImmutableIntList leftKeys, ImmutableIntList rightKeys) { final ImmutableList.Builder<RelCollation> builder = ImmutableList.builder(); final ImmutableList<RelCollation> leftCollations = mq.collations(left); assert RelCollations.contains(leftCollations, leftKeys) : "cannot merge join: left input is not sorted on left keys"; builder.addAll(leftCollations); final ImmutableList<RelCollation> rightCollations = mq.collations(right); assert RelCollations.contains(rightCollations, rightKeys) : "cannot merge join: right input is not sorted on right keys"; final int leftFieldCount = left.getRowType().getFieldCount(); for (RelCollation collation : rightCollations) { builder.add(RelCollations.shift(collation, leftFieldCount)); } return builder.build(); } }
final List<RelCollation> collations = traits.getTraits(RelCollationTraitDef.INSTANCE); assert collations == null || RelCollations.contains(collations, leftKeys);
final List<RelCollation> collations = traits.getTraits(RelCollationTraitDef.INSTANCE); assert collations == null || RelCollations.contains(collations, leftKeys);
public ImmutableBitSet getSortedInputs() { ImmutableBitSet.Builder sortedInputsBuilder = new ImmutableBitSet.Builder(); JoinPredicateInfo joinPredInfo = HiveCalciteUtil.JoinPredicateInfo. constructJoinPredicateInfo(this); List<ImmutableIntList> joinKeysInChildren = new ArrayList<ImmutableIntList>(); joinKeysInChildren.add( ImmutableIntList.copyOf( joinPredInfo.getProjsFromLeftPartOfJoinKeysInChildSchema())); joinKeysInChildren.add( ImmutableIntList.copyOf( joinPredInfo.getProjsFromRightPartOfJoinKeysInChildSchema())); for (int i=0; i<this.getInputs().size(); i++) { boolean correctOrderFound = RelCollations.contains( RelMetadataQuery.collations(this.getInputs().get(i)), joinKeysInChildren.get(i)); if (correctOrderFound) { sortedInputsBuilder.set(i); } } return sortedInputsBuilder.build(); }
new RelFieldCollation(2, RelFieldCollation.Direction.ASCENDING), new RelFieldCollation(1, RelFieldCollation.Direction.DESCENDING)); assertThat(RelCollations.contains(collation21, Arrays.asList(2)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(1)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(0)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 0)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1, 3)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList()), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1, 2)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1, 1)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(1, 2, 1)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(1, 1)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 2)), is(true)); RelCollations.of( new RelFieldCollation(1, RelFieldCollation.Direction.DESCENDING));
new RelFieldCollation(2, RelFieldCollation.Direction.ASCENDING), new RelFieldCollation(1, RelFieldCollation.Direction.DESCENDING)); assertThat(RelCollations.contains(collation21, Arrays.asList(2)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(1)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(0)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 0)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1, 3)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList()), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1, 2)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 1, 1)), is(true)); assertThat(RelCollations.contains(collation21, Arrays.asList(1, 2, 1)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(1, 1)), is(false)); assertThat(RelCollations.contains(collation21, Arrays.asList(2, 2)), is(true)); RelCollations.of( new RelFieldCollation(1, RelFieldCollation.Direction.DESCENDING));