[
https://issues.apache.org/jira/browse/DRILL-5691?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16118140#comment-16118140
]
ASF GitHub Bot commented on DRILL-5691:
---------------------------------------
Github user arina-ielchiieva commented on a diff in the pull request:
https://github.com/apache/drill/pull/889#discussion_r131871049
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/JoinUtils.java
---
@@ -204,24 +205,28 @@ public static void
addLeastRestrictiveCasts(LogicalExpression[] leftExpressions,
/**
* Utility method to check if a subquery (represented by its root
RelNode) is provably scalar. Currently
- * only aggregates with no group-by are considered scalar. In the
future, this method should be generalized
- * to include more cases and reconciled with Calcite's notion of scalar.
+ * only aggregates with no group-by and sub input rel with one row are
considered scalar. In the future,
+ * this method should be generalized to include more cases and
reconciled with Calcite's notion of scalar.
* @param root The root RelNode to be examined
* @return True if the root rel or its descendant is scalar, False
otherwise
*/
public static boolean isScalarSubquery(RelNode root) {
DrillAggregateRel agg = null;
- RelNode currentrel = root;
- while (agg == null && currentrel != null) {
- if (currentrel instanceof DrillAggregateRel) {
- agg = (DrillAggregateRel)currentrel;
- } else if (currentrel instanceof RelSubset) {
- currentrel = ((RelSubset)currentrel).getBest() ;
- } else if (currentrel.getInputs().size() == 1) {
+ RelNode currentRel = root;
+ boolean hasMoreInputs = false;
+ while (agg == null && currentRel != null) {
+ if (currentRel instanceof DrillAggregateRel) {
+ agg = (DrillAggregateRel)currentRel;
+ } else if (currentRel instanceof RelSubset) {
+ currentRel = ((RelSubset)currentRel).getBest() ;
+ } else if (currentRel.getInputs().size() == 1) {
// If the rel is not an aggregate or RelSubset, but is a
single-input rel (could be Project,
// Filter, Sort etc.), check its input
- currentrel = currentrel.getInput(0);
+ currentRel = currentRel.getInput(0);
} else {
+ if(currentRel.getInputs().size()>1){
--- End diff --
Please add spaces: `if (currentRel.getInputs().size() > 1) {`
> multiple count distinct query planning error at physical phase
> ---------------------------------------------------------------
>
> Key: DRILL-5691
> URL: https://issues.apache.org/jira/browse/DRILL-5691
> Project: Apache Drill
> Issue Type: Bug
> Components: Execution - Relational Operators
> Affects Versions: 1.9.0, 1.10.0
> Reporter: weijie.tong
>
> I materialized the count distinct query result in a cache , added a plugin
> rule to translate the (Aggregate、Aggregate、Project、Scan) or
> (Aggregate、Aggregate、Scan) to (Project、Scan) at the PARTITION_PRUNING phase.
> Then ,once user issue count distinct queries , it will be translated to query
> the cache to get the result.
> eg1: " select count(*),sum(a) ,count(distinct b) from t where dt=xx "
> eg2:"select count(*),sum(a) ,count(distinct b) ,count(distinct c) from t
> where dt=xxx "
> eg3:"select count(distinct b), count(distinct c) from t where dt=xxx"
> eg1 will be right and have a query result as I expected , but eg2 will be
> wrong at the physical phase.The error info is here:
> https://gist.github.com/weijietong/1b8ed12db9490bf006e8b3fe0ee52269.
> eg3 will also get the similar error.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)