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 {


Reply via email to