Alex Behm has posted comments on this change.

Change subject: IMPALA-4336: Cast exprs after unnesting union operands.
......................................................................


Patch Set 1:

(8 comments)

http://gerrit.cloudera.org:8080/#/c/4815/1//COMMIT_MSG
Commit Message:

PS1, Line 15: Also clarifies the use of resultExprs vs. baseTblResultExprs
            : in unions. We should consistently use resultExprs because the
            : final expr substitution happens during planning.
            : The only place where baseTblResultExprs should be used is in
            : UnionStmt.materializeRequiredSlots() because that is called
            : before plan generation and we need to mark the slots of resolved
            : exprs as materialized.
> I am not sure this belongs to the commit message. If you don't have it alre
Shrunk comment here. Moved expanded comment to UnionStmt class comment.


http://gerrit.cloudera.org:8080/#/c/4815/1/fe/src/main/java/org/apache/impala/analysis/UnionStmt.java
File fe/src/main/java/org/apache/impala/analysis/UnionStmt.java:

PS1, Line 202: Propagates DISTINCT from left to right, and checks that all 
union operands are
             :    * are union compatible, adding implicit casts if necessary.
> I think you need to update this comment. This function seems to be doing a 
I removed this comment because it's redundant with the class comment. Let me 
know if you feel the class comment still needs to be expanded/moved.


PS1, Line 203: are
> remove
Done


PS1, Line 218: // Analyze all operands and make sure they return an equal 
number of exprs.
             :     for (int i = 0; i < operands_.size(); ++i) {
             :       try {
             :         operands_.get(i).analyze(analyzer);
             :         QueryStmt firstQuery = operands_.get(0).getQueryStmt();
             :         List<Expr> firstExprs = 
operands_.get(0).getQueryStmt().getResultExprs();
             :         QueryStmt query = operands_.get(i).getQueryStmt();
             :         List<Expr> exprs = query.getResultExprs();
             :         if (firstExprs.size() != exprs.size()) {
             :           throw new AnalysisException("Operands have unequal 
number of columns:\n" +
             :               "'" + queryStmtToSql(firstQuery) + "' has " +
             :               firstExprs.size() + " column(s)\n" +
             :               "'" + queryStmtToSql(query) + "' has " + 
exprs.size() + " column(s)");
             :         }
             :       } catch (AnalysisException e) {
             :         if (analyzer.getMissingTbls().isEmpty()) throw e;
             :       }
             :     }
> This function has grown a bit too much. I would put this block is a separat
Done


Line 241:     // Remember SQL string before unnesting operands.
> the
Done


PS1, Line 258: // Cast all result exprs to a compatible type.
> move above L263
We need to collect them first before we can 
analyzer.castToUnionCompatibleTypes(), so seems relevant to this loop as well. 
Modified comment.


PS1, Line 282: // Should never happen
             :         throw new AnalysisException("Error creating agg info in 
UnionStmt.analyze()");
> Maybe convert it to Preconditions.checkState(false, "Error....")?
Modified to an ISE which is what the Preconditions would also throw. I prefer 
the ISe because we can give it a cause.


http://gerrit.cloudera.org:8080/#/c/4815/1/testdata/workloads/functional-query/queries/QueryTest/union.test
File testdata/workloads/functional-query/queries/QueryTest/union.test:

PS1, Line 1030: (select 80 union all select 90)
> Maybe add a test case with nested union distinct, if not already there.
A nested union distinct cannot be unnested, so is not really related to this 
bug. We have tests for that elsewhere.


-- 
To view, visit http://gerrit.cloudera.org:8080/4815
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I5e3ab7349df7d67d0d9c2baf4a56342d3f04e76d
Gerrit-PatchSet: 1
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Alex Behm <alex.b...@cloudera.com>
Gerrit-Reviewer: Alex Behm <alex.b...@cloudera.com>
Gerrit-Reviewer: Dimitris Tsirogiannis <dtsirogian...@cloudera.com>
Gerrit-HasComments: Yes

Reply via email to