public Boolean areColumnsUnique(Minus rel, RelMetadataQuery mq, ImmutableBitSet columns, boolean ignoreNulls) { if (areColumnsUnique((SetOp) rel, mq, columns, ignoreNulls)) { return true; } return mq.areColumnsUnique(rel.getInput(0), columns, ignoreNulls); }
public Boolean areColumnsUnique(RelSubset rel, RelMetadataQuery mq, ImmutableBitSet columns, boolean ignoreNulls) { int nullCount = 0; for (RelNode rel2 : rel.getRels()) { if (rel2 instanceof Aggregate || rel2 instanceof Filter || rel2 instanceof Values || rel2 instanceof TableScan || simplyProjects(rel2, columns)) { try { final Boolean unique = mq.areColumnsUnique(rel2, columns, ignoreNulls); if (unique != null) { if (unique) { return true; } } else { ++nullCount; } } catch (CyclicMetadataException e) { // Ignore this relational expression; there will be non-cyclic ones // in this set. } } } return nullCount == 0 ? false : null; }
case INNER: final Pair<ImmutableBitSet, ImmutableBitSet> leftAndRightColumns = splitLeftAndRightColumns(rel.getLeft().getRowType().getFieldCount(), columns); final ImmutableBitSet leftColumns = leftAndRightColumns.left;
public static final RelMetadataProvider SOURCE = ReflectiveRelMetadataProvider.reflectiveSource( BuiltInMethod.COLUMN_UNIQUENESS.method, new RelMdColumnUniqueness());
case INNER: final Pair<ImmutableBitSet, ImmutableBitSet> leftAndRightColumns = splitLeftAndRightColumns(rel.getLeft().getRowType().getFieldCount(), columns); final ImmutableBitSet leftColumns = leftAndRightColumns.left;
public static final RelMetadataProvider SOURCE = ReflectiveRelMetadataProvider.reflectiveSource( BuiltInMethod.COLUMN_UNIQUENESS.method, new RelMdColumnUniqueness());
public Boolean areColumnsUnique(Minus rel, RelMetadataQuery mq, ImmutableBitSet columns, boolean ignoreNulls) { if (areColumnsUnique((SetOp) rel, mq, columns, ignoreNulls)) { return true; } return mq.areColumnsUnique(rel.getInput(0), columns, ignoreNulls); }
splitLeftAndRightColumns(rel.getLeft().getRowType().getFieldCount(), columns); final ImmutableBitSet leftColumns = leftAndRightColumns.left;
public Boolean areColumnsUnique(RelSubset rel, RelMetadataQuery mq, ImmutableBitSet columns, boolean ignoreNulls) { int nullCount = 0; for (RelNode rel2 : rel.getRels()) { if (rel2 instanceof Aggregate || rel2 instanceof Filter || rel2 instanceof Values || rel2 instanceof TableScan || simplyProjects(rel2, columns)) { try { final Boolean unique = mq.areColumnsUnique(rel2, columns, ignoreNulls); if (unique != null) { if (unique) { return true; } } else { ++nullCount; } } catch (CyclicMetadataException e) { // Ignore this relational expression; there will be non-cyclic ones // in this set. } } } return nullCount == 0 ? false : null; }
public Boolean areColumnsUnique(Intersect rel, RelMetadataQuery mq, ImmutableBitSet columns, boolean ignoreNulls) { if (areColumnsUnique((SetOp) rel, mq, columns, ignoreNulls)) { return true; } for (RelNode input : rel.getInputs()) { Boolean b = mq.areColumnsUnique(input, columns, ignoreNulls); if (b != null && b) { return true; } } return false; }
splitLeftAndRightColumns(rel.getLeft().getRowType().getFieldCount(), columns); final ImmutableBitSet leftColumns = leftAndRightColumns.left;
public Boolean areColumnsUnique(Intersect rel, RelMetadataQuery mq, ImmutableBitSet columns, boolean ignoreNulls) { if (areColumnsUnique((SetOp) rel, mq, columns, ignoreNulls)) { return true; } for (RelNode input : rel.getInputs()) { Boolean b = mq.areColumnsUnique(input, columns, ignoreNulls); if (b != null && b) { return true; } } return false; }
.get(BuiltInMethod.COLUMN_UNIQUENESS.method) .iterator().next(); assertThat(handler.areColumnsUnique(values, mq, col0, false), is(true)); assertThat(handler.areColumnsUnique(values, mq, col1, false), is(false)); assertThat(handler.areColumnsUnique(values, mq, colAll, false), is(true)); assertThat(handler.areColumnsUnique(values, mq, colNone, false), is(false));
.get(BuiltInMethod.COLUMN_UNIQUENESS.method) .iterator().next(); assertThat(handler.areColumnsUnique(values, mq, col0, false), is(true)); assertThat(handler.areColumnsUnique(values, mq, col1, false), is(false)); assertThat(handler.areColumnsUnique(values, mq, colAll, false), is(true)); assertThat(handler.areColumnsUnique(values, mq, colNone, false), is(false));