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/11 23:44:03 UTC

svn commit: r1624403 - /hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java

Author: hashutosh
Date: Thu Sep 11 21:44:03 2014
New Revision: 1624403

URL: http://svn.apache.org/r1624403
Log:
HIVE-8060 : [CBO] Handle tables with serde supplied schema (Ashutosh Chauhan via John Pullokkaran)

Modified:
    hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java

Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java?rev=1624403&r1=1624402&r2=1624403&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/RexNodeConverter.java Thu Sep 11 21:44:03 2014
@@ -129,8 +129,17 @@ public class RexNodeConverter {
   }
 
   private RexNode convert(final ExprNodeFieldDesc fieldDesc) throws SemanticException {
-    return m_cluster.getRexBuilder().makeFieldAccess(convert(fieldDesc.getDesc()),
-      fieldDesc.getFieldName(), true);
+    RexNode rexNode = convert(fieldDesc.getDesc());
+    if (rexNode instanceof RexCall) {
+      // regular case of accessing nested field in a column
+      return m_cluster.getRexBuilder().makeFieldAccess(rexNode,
+          fieldDesc.getFieldName(), true);
+    } else {
+      // This may happen for schema-less tables, where columns are dynamically
+      // supplied by serdes.
+      throw new OptiqSemanticException("Unexpected rexnode : " +
+        rexNode.getClass().getCanonicalName());
+    }
   }
 
   private RexNode convert(final ExprNodeGenericFuncDesc func) throws SemanticException {