Return-Path: X-Original-To: apmail-hive-commits-archive@www.apache.org Delivered-To: apmail-hive-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 22E7218418 for ; Tue, 9 Jun 2015 01:57:17 +0000 (UTC) Received: (qmail 93821 invoked by uid 500); 9 Jun 2015 01:57:10 -0000 Delivered-To: apmail-hive-commits-archive@hive.apache.org Received: (qmail 93738 invoked by uid 500); 9 Jun 2015 01:57:10 -0000 Mailing-List: contact commits-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hive-dev@hive.apache.org Delivered-To: mailing list commits@hive.apache.org Received: (qmail 92376 invoked by uid 99); 9 Jun 2015 01:57:10 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 09 Jun 2015 01:57:10 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id B49F3DFFCD; Tue, 9 Jun 2015 01:57:09 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: xuefu@apache.org To: commits@hive.apache.org Date: Tue, 09 Jun 2015 01:57:43 -0000 Message-Id: <9159944c0dea40fa8242874bda0e88e3@git.apache.org> In-Reply-To: <50807250f7aa4d21881bc5eed563a377@git.apache.org> References: <50807250f7aa4d21881bc5eed563a377@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [35/50] [abbrv] hive git commit: HIVE-10874: Fail in TestMinimrCliDriver.testCliDriver_ql_rewrite_gbtoidx_cbo_2.q due to duplicate column name (Jesus Camacho Rodriguez via Laljo John Pullokkaran) HIVE-10874: Fail in TestMinimrCliDriver.testCliDriver_ql_rewrite_gbtoidx_cbo_2.q due to duplicate column name (Jesus Camacho Rodriguez via Laljo John Pullokkaran) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/17bedcc0 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/17bedcc0 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/17bedcc0 Branch: refs/heads/spark Commit: 17bedcc0016b557228f7ae3be1596ae9cb93ecb8 Parents: 9c45f92 Author: jpullokk Authored: Thu Jun 4 13:54:29 2015 -0700 Committer: jpullokk Committed: Thu Jun 4 14:00:58 2015 -0700 ---------------------------------------------------------------------- .../calcite/reloperators/HiveAggregate.java | 58 ++++++++++++++++++++ 1 file changed, 58 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/17bedcc0/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveAggregate.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveAggregate.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveAggregate.java index bea5eec..903cc19 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveAggregate.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveAggregate.java @@ -18,7 +18,9 @@ package org.apache.hadoop.hive.ql.optimizer.calcite.reloperators; import java.util.List; +import java.util.Set; +import org.apache.calcite.linq4j.Ord; import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelOptCost; import org.apache.calcite.plan.RelOptPlanner; @@ -29,10 +31,16 @@ import org.apache.calcite.rel.core.Aggregate; import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.core.RelFactories.AggregateFactory; import org.apache.calcite.rel.metadata.RelMetadataQuery; +import org.apache.calcite.rel.type.RelDataType; +import org.apache.calcite.rel.type.RelDataTypeFactory; +import org.apache.calcite.rel.type.RelDataTypeField; +import org.apache.calcite.sql.type.SqlTypeName; import org.apache.calcite.util.ImmutableBitSet; +import org.apache.calcite.util.IntList; import org.apache.hadoop.hive.ql.optimizer.calcite.TraitsUtil; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Sets; public class HiveAggregate extends Aggregate implements HiveRelNode { @@ -81,6 +89,56 @@ public class HiveAggregate extends Aggregate implements HiveRelNode { containsAll(groupSet.asList()); } + @Override + protected RelDataType deriveRowType() { + return deriveRowType(getCluster().getTypeFactory(), getInput().getRowType(), + indicator, groupSet, groupSets, aggCalls); + } + + public static RelDataType deriveRowType(RelDataTypeFactory typeFactory, + final RelDataType inputRowType, boolean indicator, + ImmutableBitSet groupSet, List groupSets, + final List aggCalls) { + final IntList groupList = groupSet.toList(); + assert groupList.size() == groupSet.cardinality(); + final RelDataTypeFactory.FieldInfoBuilder builder = typeFactory.builder(); + final List fieldList = inputRowType.getFieldList(); + final Set containedNames = Sets.newHashSet(); + for (int groupKey : groupList) { + containedNames.add(fieldList.get(groupKey).getName()); + builder.add(fieldList.get(groupKey)); + } + if (indicator) { + for (int groupKey : groupList) { + final RelDataType booleanType = + typeFactory.createTypeWithNullability( + typeFactory.createSqlType(SqlTypeName.BOOLEAN), false); + String name = "i$" + fieldList.get(groupKey).getName(); + int i = 0; + while (containedNames.contains(name)) { + name += "_" + i++; + } + containedNames.add(name); + builder.add(name, booleanType); + } + } + for (Ord aggCall : Ord.zip(aggCalls)) { + String name; + if (aggCall.e.name != null) { + name = aggCall.e.name; + } else { + name = "$f" + (groupList.size() + aggCall.i); + } + int i = 0; + while (containedNames.contains(name)) { + name += "_" + i++; + } + containedNames.add(name); + builder.add(name, aggCall.e.type); + } + return builder.build(); + } + private static class HiveAggRelFactory implements AggregateFactory { @Override