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])