drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zfong <...@git.apache.org>
Subject [GitHub] drill pull request #748: DRILL-5263: Prevent left NLJoin with non scalar sub...
Date Tue, 14 Feb 2017 17:11:36 GMT
Github user zfong commented on a diff in the pull request:

    https://github.com/apache/drill/pull/748#discussion_r101089177
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/NestedLoopJoinPrule.java
---
    @@ -49,7 +49,7 @@ protected boolean checkPreconditions(DrillJoinRel join, RelNode left,
RelNode ri
           PlannerSettings settings) {
         JoinRelType type = join.getJoinType();
     
    -    if (! (type == JoinRelType.INNER || type == JoinRelType.LEFT)) {
    +    if (!(type == JoinRelType.INNER || (type == JoinRelType.LEFT && JoinUtils.hasScalarSubqueryInput(left,
right)))) {
    --- End diff --
    
    I see.  So, Calcite is converting a query with a subquery into an equivalent left join
with a scalar subquery.  Do you know if the query returns the correct result in that case
if a nested loop join is used?  If not, then it seems like we should still be returning an
error.
    
    Also, how do you distinguish the case where the query has been converted to this form
by Calcite vs a user explicitly doing a left outer join to a scalar subquery.  It seems like
in this case, if Drill uses a nested loop join, it will also return wrong result.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message