for(int col:colSet) { final RexInputRef tempColRef = rexBuilder.makeInputRef(rel, col); Set<RexNode> columnOrigins = mq.getExpressionLineage(rel, tempColRef); if (null == columnOrigins || columnOrigins.isEmpty()) {
Set<RexNode> eqOp1ExprsLineage = mq.getExpressionLineage(join, eqOp1); if (eqOp1ExprsLineage == null) { Set<RexNode> eqOp2ExprsLineage = mq.getExpressionLineage(join, eqOp2); if (eqOp2ExprsLineage == null) {
continue; Set<RexNode> eqOp1ExprsLineage = mq.getExpressionLineage(join, eqOp1); if (eqOp1ExprsLineage == null) { continue; Set<RexNode> eqOp2ExprsLineage = mq.getExpressionLineage(join, eqOp2); if (eqOp2ExprsLineage == null) {
/** * Expression lineage from Filter. */ public Set<RexNode> getExpressionLineage(Filter rel, RelMetadataQuery mq, RexNode outputExpression) { return mq.getExpressionLineage(rel.getInput(), outputExpression); }
/** * Expression lineage from Filter. */ public Set<RexNode> getExpressionLineage(Filter rel, RelMetadataQuery mq, RexNode outputExpression) { return mq.getExpressionLineage(rel.getInput(), outputExpression); }
/** * Expression lineage from Exchange. */ public Set<RexNode> getExpressionLineage(Exchange rel, RelMetadataQuery mq, RexNode outputExpression) { return mq.getExpressionLineage(rel.getInput(), outputExpression); }
/** * Expression lineage from Exchange. */ public Set<RexNode> getExpressionLineage(Exchange rel, RelMetadataQuery mq, RexNode outputExpression) { return mq.getExpressionLineage(rel.getInput(), outputExpression); }
/** * Expression lineage from Sort. */ public Set<RexNode> getExpressionLineage(Sort rel, RelMetadataQuery mq, RexNode outputExpression) { return mq.getExpressionLineage(rel.getInput(), outputExpression); }
public Set<RexNode> getExpressionLineage(RelSubset rel, RelMetadataQuery mq, RexNode outputExpression) { return mq.getExpressionLineage(Util.first(rel.getBest(), rel.getOriginal()), outputExpression); }
@Test public void testExpressionLineageInnerJoinRight() { // ename is column 0 in catalog.sales.bonus final RelNode rel = convertSql("select bonus.ename from emp join bonus using (ename)"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertThat(r.size(), is(1)); final RexTableInputRef result = (RexTableInputRef) r.iterator().next(); assertTrue(result.getQualifiedName().equals(ImmutableList.of("CATALOG", "SALES", "BONUS"))); assertThat(result.getIndex(), is(0)); }
@Test public void testExpressionLineageInnerJoinLeft() { // ename is column 1 in catalog.sales.emp final RelNode rel = convertSql("select ename from emp,dept"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertThat(r.size(), is(1)); final RexTableInputRef result = (RexTableInputRef) r.iterator().next(); assertTrue(result.getQualifiedName().equals(EMP_QNAME)); assertThat(result.getIndex(), is(1)); }
@Test public void testExpressionLineageRightJoinRight() { // ename is column 0 in catalog.sales.bonus final RelNode rel = convertSql("select bonus.ename from emp right join bonus using (ename)"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertThat(r.size(), is(1)); final RexTableInputRef result = (RexTableInputRef) r.iterator().next(); assertEquals(result.getQualifiedName(), ImmutableList.of("CATALOG", "SALES", "BONUS")); assertThat(result.getIndex(), is(0)); }
@Test public void testExpressionLineageInnerJoinLeft() { // ename is column 1 in catalog.sales.emp final RelNode rel = convertSql("select ename from emp,dept"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertThat(r.size(), is(1)); final RexTableInputRef result = (RexTableInputRef) r.iterator().next(); assertEquals(result.getQualifiedName(), EMP_QNAME); assertThat(result.getIndex(), is(1)); }
@Test public void testExpressionLineageStar() { // All columns in output final RelNode tableRel = convertSql("select * from emp"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(4, tableRel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(tableRel, ref); final String inputRef = RexInputRef.of(4, tableRel.getRowType().getFieldList()).toString(); assertThat(r.size(), is(1)); final String resultString = r.iterator().next().toString(); assertThat(resultString, startsWith(EMP_QNAME.toString())); assertThat(resultString, endsWith(inputRef)); }
@Test public void testExpressionLineageStar() { // All columns in output final RelNode tableRel = convertSql("select * from emp"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(4, tableRel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(tableRel, ref); final String inputRef = RexInputRef.of(4, tableRel.getRowType().getFieldList()).toString(); assertThat(r.size(), is(1)); final String resultString = r.iterator().next().toString(); assertThat(resultString, startsWith(EMP_QNAME.toString())); assertThat(resultString, endsWith(inputRef)); }
@Test public void testExpressionLineageOuterJoin() { // lineage cannot be determined final RelNode rel = convertSql("select name as dname from emp left outer join dept" + " on emp.deptno = dept.deptno"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertNull(r); }
@Test public void testExpressionLineageAggregateAggColumn() { // lineage cannot be determined final RelNode rel = convertSql("select deptno, count(*) from emp where deptno > 10 " + "group by deptno having count(*) = 0"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(1, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertNull(r); }
@Test public void testExpressionLineageAggregateAggColumn() { // lineage cannot be determined final RelNode rel = convertSql("select deptno, count(*) from emp where deptno > 10 " + "group by deptno having count(*) = 0"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(1, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertNull(r); }
@Test public void testExpressionLineageValues() { // lineage cannot be determined final RelNode rel = convertSql("select * from (values (1), (2)) as t(c)"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertNull(r); }
@Test public void testExpressionLineageValues() { // lineage cannot be determined final RelNode rel = convertSql("select * from (values (1), (2)) as t(c)"); final RelMetadataQuery mq = RelMetadataQuery.instance(); final RexNode ref = RexInputRef.of(0, rel.getRowType().getFieldList()); final Set<RexNode> r = mq.getExpressionLineage(rel, ref); assertNull(r); }