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 2013/09/27 22:58:55 UTC

svn commit: r1527078 - in /hive/trunk/ql/src: java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java test/results/clientnegative/columnstats_tbllvl.q.out test/results/clientnegative/columnstats_tbllvl_incorrect_column.q.out

Author: hashutosh
Date: Fri Sep 27 20:58:54 2013
New Revision: 1527078

URL: http://svn.apache.org/r1527078
Log:
HIVE-5272 : Column statistics on a invalid column name results in IndexOutOfBoundsException (Prasanth J via Ashutosh Chauhan)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java
    hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl.q.out
    hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl_incorrect_column.q.out

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java?rev=1527078&r1=1527077&r2=1527078&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnStatsSemanticAnalyzer.java Fri Sep 27 20:58:54 2013
@@ -522,6 +522,7 @@ public class ColumnStatsSemanticAnalyzer
       boolean isPartitionStats = isPartitionLevelStats(tree);
       PartitionList partList = null;
       checkForPartitionColumns(colNames, getPartitionKeys(tableName));
+      validateSpecifiedColumnNames(tableName, colNames);
 
       if (isPartitionStats) {
         isTableLevel = false;
@@ -545,6 +546,25 @@ public class ColumnStatsSemanticAnalyzer
     }
   }
 
+  // fail early if the columns specified for column statistics are not valid
+  private void validateSpecifiedColumnNames(String tableName, List<String> specifiedCols)
+      throws SemanticException {
+    List<FieldSchema> fields = null;
+    try {
+      fields = db.getTable(tableName).getAllCols();
+    } catch (HiveException e) {
+      throw new SemanticException(ErrorMsg.INVALID_TABLE.getMsg(tableName));
+    }
+    List<String> tableCols = Utilities.getColumnNamesFromFieldSchema(fields);
+
+    for(String sc : specifiedCols) {
+      if (!tableCols.contains(sc.toLowerCase())) {
+        String msg = "'" + sc + "' (possible columns are " + tableCols.toString() + ")";
+        throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(msg));
+      }
+    }
+  }
+
   private List<String> getPartitionKeys(String tableName) throws SemanticException {
     List<FieldSchema> fields;
     try {

Modified: hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl.q.out?rev=1527078&r1=1527077&r2=1527078&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl.q.out (original)
+++ hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl.q.out Fri Sep 27 20:58:54 2013
@@ -33,4 +33,4 @@ PREHOOK: Output: default@uservisits_web_
 POSTHOOK: query: LOAD DATA LOCAL INPATH "../data/files/UserVisits.dat" INTO TABLE UserVisits_web_text_none
 POSTHOOK: type: LOAD
 POSTHOOK: Output: default@uservisits_web_text_none
-FAILED: SemanticException [Error 10004]: Line 1:21 Invalid table alias or column reference 'destIP': (possible column names are: sourceip, desturl, visitdate, adrevenue, useragent, ccode, lcode, skeyword, avgtimeonsite)
+FAILED: SemanticException [Error 10002]: Invalid column reference 'destIP' (possible columns are [sourceip, desturl, visitdate, adrevenue, useragent, ccode, lcode, skeyword, avgtimeonsite])

Modified: hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl_incorrect_column.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl_incorrect_column.q.out?rev=1527078&r1=1527077&r2=1527078&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl_incorrect_column.q.out (original)
+++ hive/trunk/ql/src/test/results/clientnegative/columnstats_tbllvl_incorrect_column.q.out Fri Sep 27 20:58:54 2013
@@ -33,4 +33,4 @@ PREHOOK: Output: default@uservisits_web_
 POSTHOOK: query: LOAD DATA LOCAL INPATH "../data/files/UserVisits.dat" INTO TABLE UserVisits_web_text_none
 POSTHOOK: type: LOAD
 POSTHOOK: Output: default@uservisits_web_text_none
-FAILED: SemanticException [Error 10004]: Line 1:21 Invalid table alias or column reference 'destIP': (possible column names are: sourceip, desturl, visitdate, adrevenue, useragent, ccode, lcode, skeyword, avgtimeonsite)
+FAILED: SemanticException [Error 10002]: Invalid column reference 'destIP' (possible columns are [sourceip, desturl, visitdate, adrevenue, useragent, ccode, lcode, skeyword, avgtimeonsite])