tRef.getTable().getRowType().getFieldList().get(foreignKeyPos).getType(); RexTableInputRef foreignKeyColumnRef = RexTableInputRef.of(tRef, foreignKeyPos, foreignKeyColumnType); int uniqueKeyPos = constraint.getColumnPairs().get(pos).target; RexTableInputRef uniqueKeyColumnRef = RexTableInputRef.of(nonFkTable, uniqueKeyPos, nonFkTable.getTable().getRowType().getFieldList().get(uniqueKeyPos).getType()); if (ecT.getEquivalenceClassesMap().containsKey(uniqueKeyColumnRef) &&
tRef.getTable().getRowType().getFieldList().get(foreignKeyPos).getType(); RexTableInputRef foreignKeyColumnRef = RexTableInputRef.of(tRef, foreignKeyPos, foreignKeyColumnType); int uniqueKeyPos = constraint.getColumnPairs().get(pos).target; RexTableInputRef uniqueKeyColumnRef = RexTableInputRef.of(nonFkTable, uniqueKeyPos, nonFkTable.getTable().getRowType().getFieldList().get(uniqueKeyPos).getType()); if (ecT.getEquivalenceClassesMap().containsKey(uniqueKeyColumnRef) &&
@Override public RexNode visitTableInputRef(RexTableInputRef inputRef) { if (ec != null) { Set<RexTableInputRef> s = ec.get(inputRef); if (s != null) { inputRef = s.iterator().next(); } } if (tableMapping != null) { inputRef = RexTableInputRef.of( tableMapping.get(inputRef.getTableRef()), inputRef.getIndex(), inputRef.getType()); } return inputRef; } };
@Override public RexNode visitTableInputRef(RexTableInputRef inputRef) { if (tableMapping != null) { inputRef = RexTableInputRef.of( tableMapping.get(inputRef.getTableRef()), inputRef.getIndex(), inputRef.getType()); } if (ec != null) { Set<RexTableInputRef> s = ec.get(inputRef); if (s != null) { inputRef = s.iterator().next(); } } return inputRef; } };
@Override public RexNode visitTableInputRef(RexTableInputRef inputRef) { if (tableMapping != null) { inputRef = RexTableInputRef.of( tableMapping.get(inputRef.getTableRef()), inputRef.getIndex(), inputRef.getType()); } if (ec != null) { Set<RexTableInputRef> s = ec.get(inputRef); if (s != null) { inputRef = s.iterator().next(); } } return inputRef; } };
@Override public RexNode visitTableInputRef(RexTableInputRef inputRef) { if (ec != null) { Set<RexTableInputRef> s = ec.get(inputRef); if (s != null) { inputRef = s.iterator().next(); } } if (tableMapping != null) { inputRef = RexTableInputRef.of( tableMapping.get(inputRef.getTableRef()), inputRef.getIndex(), inputRef.getType()); } return inputRef; } };
tRef.getTable().getRowType().getFieldList().get(foreignKeyPos).getType(); RexTableInputRef foreignKeyColumnRef = RexTableInputRef.of(tRef, foreignKeyPos, foreignKeyColumnType); int uniqueKeyPos = constraint.getColumnPairs().get(pos).target; RexTableInputRef uniqueKeyColumnRef = RexTableInputRef.of(parentTRef, uniqueKeyPos, parentTRef.getTable().getRowType().getFieldList().get(uniqueKeyPos).getType()); if (!foreignKeyColumnType.isNullable()
tRef.getTable().getRowType().getFieldList().get(foreignKeyPos).getType(); RexTableInputRef foreignKeyColumnRef = RexTableInputRef.of(tRef, foreignKeyPos, foreignKeyColumnType); int uniqueKeyPos = constraint.getColumnPairs().get(pos).target; RexTableInputRef uniqueKeyColumnRef = RexTableInputRef.of(parentTRef, uniqueKeyPos, parentTRef.getTable().getRowType().getFieldList().get(uniqueKeyPos).getType()); if (!foreignKeyColumnType.isNullable()
/** * Expression lineage from {@link TableScan}. * * <p>We extract the fields referenced by the expression and we express them * using {@link RexTableInputRef}. */ public Set<RexNode> getExpressionLineage(TableScan rel, RelMetadataQuery mq, RexNode outputExpression) { final RexBuilder rexBuilder = rel.getCluster().getRexBuilder(); // Extract input fields referenced by expression final Set<RelDataTypeField> inputExtraFields = new LinkedHashSet<>(); final RelOptUtil.InputFinder inputFinder = new RelOptUtil.InputFinder(inputExtraFields); outputExpression.accept(inputFinder); final ImmutableBitSet inputFieldsUsed = inputFinder.inputBitSet.build(); // Infer column origin expressions for given references final Map<RexInputRef, Set<RexNode>> mapping = new LinkedHashMap<>(); for (int idx : inputFieldsUsed) { final RexNode inputRef = RexTableInputRef.of( RelTableRef.of(rel.getTable(), 0), RexInputRef.of(idx, rel.getRowType().getFieldList())); final RexInputRef ref = RexInputRef.of(idx, rel.getRowType().getFieldList()); mapping.put(ref, ImmutableSet.of(inputRef)); } // Return result return createAllPossibleExpressions(rexBuilder, outputExpression, mapping); }
/** * Expression lineage from {@link TableScan}. * * <p>We extract the fields referenced by the expression and we express them * using {@link RexTableInputRef}. */ public Set<RexNode> getExpressionLineage(TableScan rel, RelMetadataQuery mq, RexNode outputExpression) { final RexBuilder rexBuilder = rel.getCluster().getRexBuilder(); // Extract input fields referenced by expression final ImmutableBitSet inputFieldsUsed = extractInputRefs(outputExpression); // Infer column origin expressions for given references final Map<RexInputRef, Set<RexNode>> mapping = new LinkedHashMap<>(); for (int idx : inputFieldsUsed) { final RexNode inputRef = RexTableInputRef.of( RelTableRef.of(rel.getTable(), 0), RexInputRef.of(idx, rel.getRowType().getFieldList())); final RexInputRef ref = RexInputRef.of(idx, rel.getRowType().getFieldList()); mapping.put(ref, ImmutableSet.of(inputRef)); } // Return result return createAllPossibleExpressions(rexBuilder, outputExpression, mapping); }
RexTableInputRef queryColumnRef = RexTableInputRef.of(queryTableRef, e.getKey().getIndex(), e.getKey().getType());
RexTableInputRef queryColumnRef = RexTableInputRef.of(queryTableRef, e.getKey().getIndex(), e.getKey().getType());