You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/09/17 17:56:48 UTC
svn commit: r1625636 - in
/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql:
optimizer/optiq/reloperators/ optimizer/optiq/translator/ parse/
Author: hashutosh
Date: Wed Sep 17 15:56:47 2014
New Revision: 1625636
URL: http://svn.apache.org/r1625636
Log:
HIVE-8159 : CBO: bail from Optiq planning if a Select list contains multiple references to the same name (Ashutosh Chauhan via Harish Butani)
Modified:
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/DerivedTableInjector.java
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java?rev=1625636&r1=1625635&r2=1625636&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java Wed Sep 17 15:56:47 2014
@@ -24,6 +24,7 @@ import java.util.List;
import com.google.common.collect.ImmutableList;
import org.apache.hadoop.hive.ql.optimizer.optiq.HiveOptiqUtil;
+import org.apache.hadoop.hive.ql.optimizer.optiq.OptiqSemanticException;
import org.apache.hadoop.hive.ql.optimizer.optiq.TraitsUtil;
import org.apache.hadoop.hive.ql.optimizer.optiq.cost.HiveCost;
import org.eigenbase.rel.ProjectRelBase;
@@ -40,6 +41,7 @@ import org.eigenbase.reltype.RelDataType
import org.eigenbase.rex.RexBuilder;
import org.eigenbase.rex.RexNode;
import org.eigenbase.rex.RexUtil;
+import org.eigenbase.util.Util;
import org.eigenbase.util.mapping.Mapping;
import org.eigenbase.util.mapping.MappingType;
@@ -79,8 +81,15 @@ public class HiveProjectRel extends Proj
* @param fieldNames
* aliases of the expressions
*/
- public static HiveProjectRel create(RelNode child, List<? extends RexNode> exps, List<String> fieldNames) {
+ public static HiveProjectRel create(RelNode child, List<? extends RexNode> exps,
+ List<String> fieldNames) throws OptiqSemanticException{
RelOptCluster cluster = child.getCluster();
+
+ // 1 Ensure columnNames are unique - OPTIQ-411
+ if (!Util.isDistinct(fieldNames)) {
+ String msg = "Select list contains multiple expressions with the same name." + fieldNames;
+ throw new OptiqSemanticException(msg);
+ }
RelDataType rowType = RexUtil.createStructType(cluster.getTypeFactory(), exps, fieldNames);
return create(cluster, child, exps, rowType, Collections.<RelCollation> emptyList());
}
@@ -127,8 +136,9 @@ public class HiveProjectRel extends Proj
* Field names; if null, or if a particular entry is null, the name
* of the permuted field is used
* @return relational expression which projects a subset of the input fields
+ * @throws OptiqSemanticException
*/
- public static RelNode projectMapping(RelNode rel, Mapping mapping, List<String> fieldNames) {
+ public static RelNode projectMapping(RelNode rel, Mapping mapping, List<String> fieldNames) throws OptiqSemanticException {
assert mapping.getMappingType().isSingleSource();
assert mapping.getMappingType().isMandatorySource();
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java?rev=1625636&r1=1625635&r2=1625636&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ASTConverter.java Wed Sep 17 15:56:47 2014
@@ -25,6 +25,7 @@ import java.util.concurrent.atomic.Atomi
import net.hydromatic.optiq.util.BitSets;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.ql.optimizer.optiq.OptiqSemanticException;
import org.apache.hadoop.hive.ql.optimizer.optiq.reloperators.HiveSortRel;
import org.apache.hadoop.hive.ql.optimizer.optiq.translator.SqlFunctionConverter.HiveToken;
import org.apache.hadoop.hive.ql.parse.ASTNode;
@@ -78,7 +79,7 @@ public class ASTConverter {
hiveAST = new HiveAST();
}
- public static ASTNode convert(final RelNode relNode, List<FieldSchema> resultSchema) {
+ public static ASTNode convert(final RelNode relNode, List<FieldSchema> resultSchema) throws OptiqSemanticException {
SortRel sortrel = null;
RelNode root = DerivedTableInjector.convertOpTree(relNode, resultSchema);
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/DerivedTableInjector.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/DerivedTableInjector.java?rev=1625636&r1=1625635&r2=1625636&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/DerivedTableInjector.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/DerivedTableInjector.java Wed Sep 17 15:56:47 2014
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
import org.apache.hadoop.hive.ql.optimizer.optiq.HiveOptiqUtil;
+import org.apache.hadoop.hive.ql.optimizer.optiq.OptiqSemanticException;
import org.apache.hadoop.hive.ql.optimizer.optiq.reloperators.HiveAggregateRel;
import org.apache.hadoop.hive.ql.optimizer.optiq.reloperators.HiveProjectRel;
import org.apache.hadoop.hive.ql.optimizer.optiq.reloperators.HiveSortRel;
@@ -45,7 +46,7 @@ import org.eigenbase.rex.RexNode;
public class DerivedTableInjector {
- public static RelNode convertOpTree(RelNode rel, List<FieldSchema> resultSchema) {
+ public static RelNode convertOpTree(RelNode rel, List<FieldSchema> resultSchema) throws OptiqSemanticException {
RelNode newTopNode = rel;
if (!(newTopNode instanceof ProjectRelBase) && !(newTopNode instanceof SortRel)) {
@@ -119,7 +120,7 @@ public class DerivedTableInjector {
}
private static RelNode renameTopLevelSelectInResultSchema(final RelNode rootRel,
- List<FieldSchema> resultSchema) {
+ List<FieldSchema> resultSchema) throws OptiqSemanticException {
RelNode tmpRel = rootRel;
RelNode parentOforiginalProjRel = rootRel;
HiveProjectRel originalProjRel = null;
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1625636&r1=1625635&r2=1625636&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Wed Sep 17 15:56:47 2014
@@ -13619,15 +13619,6 @@ public class SemanticAnalyzer extends Ba
columnNames.add(getColumnInternalName(i));
}
- // 1.1 Ensure columnNames are unique
- if (!Util.isDistinct(columnNames)) {
- String msg = String.format(
- "Select list contains multiple expressions with the same name %s."
- + columnNames);
- LOG.debug(msg);
- throw new OptiqSemanticException(msg);
- }
-
// 2. Prepend column names with '_o_'
/*
* Hive treats names that start with '_c' as internalNames; so change the