You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by GitBox <gi...@apache.org> on 2019/04/12 07:14:53 UTC

[GitHub] [calcite] danny0405 opened a new pull request #1157: [CALCITE-2696] Improve design of join-like relational expressions

danny0405 opened a new pull request #1157: [CALCITE-2696] Improve design of join-like relational expressions
URL: https://github.com/apache/calcite/pull/1157
 
 
   ### Diff
   - Deprecate SemiJoin, EquiJoin, EnumerableSemiJoin, SemiJoinType,
   EnumerableSemiJoinRule, EnumerableThetaJoin
   - Make EnumerableMergeJoin extends Join instead of EquiJoin
   - Add SEMI and ANTI join type to JoinRelType, add method
   returnsJustFirstInput() to decide if the join only outputs left side
   - Correlate use JoinRelType instead of SemiJoinType
   - Rename EnumerableCorrelate to EnumerableNestedLoopJoin and make it
   exptends Join instead of Correlate
   - Rename EnumerableJoin to EnumerableHashJoin
   - EnumerableJoinRule will convert semi-join to EnumerableNestedLoopJoin
   (EnumerableSemiJoin's function is merged into this rule)
   - Add method isNonCorrelateSemiJoin() in Join.java to make sure if this
   join is a semi-join (Comes from SemiJoinRule) or comes from
   decorrelation(SubqueryRemoveRule or RelDecorrelator), the returns value
   true means the join is a semi-join equivalent to SemiJoin before this
   patch.
   - Cache the JoinInfo in Join and use it to get leftKeys and rightKeys,
   merge the SemiJoin#computeSelfCost to Join#computeSelfCost
   - RelBuilder removes SemiJoinFactory, method #semiJoin now return a
   LogicalJoin with JoinRelType#SEMI
   
   ### Rules tweak
   - JoinAddRedundantSemiJoinRule now create LogicalJoin with
   JoinRelType#SEMI instead of SemiJoin
   - JoinToCorrelateRule remove SEMI instance and change the matchs
   condition to !join.getJoinType().generatesNullsOnLeft() which also
   allowed ANTI compared before this patch.
   - SemiJoinRule match SEMI join specificlly
   
   ### Metadata tweak
   - RelMdAllPredicates, RelMdExpressionLineage: Add full rowType to
   getAllPredicates(Join) cause semi-join only outputs one side
   - RelMdColumnUniqueness, RelMdSelectivity, RelMdDistinctRowCount,
   RelMdSize, RelMdUniqueKeys: merge semi-join logic to join
   
   ### Test cases change
   - MaterializationTest#testJoinMaterialization11 now can materialize
   successfully, cause i allow logical SemiJoin node to match, the original
   matchs SemiJoin as SemiJoin.class.isAssignableFrom(), which i think is
   wrong cause this will only matches subClasses of SemiJoin which is only
   EnumerableSemiJoin before this patch.
   - SortRemoveRuleTest#removeSortOverEnumerableCorrelate, because
   CALCITE-2018, the final EnumerableSort's cost was cache by the previous
   EnumerableSort with logical childs, so i remove the EnumerableSortRule
   and the best plan is correct
   - sub-query.iq has better plan for null correlate

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services