You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by gu...@apache.org on 2014/08/09 03:25:33 UTC

svn commit: r1616910 - in /hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore: MetaStoreDirectSql.java StatObjectConverter.java

Author: gunther
Date: Sat Aug  9 01:25:33 2014
New Revision: 1616910

URL: http://svn.apache.org/r1616910
Log:
HIVE-7667: handle cast for long in get_aggr_stats() api for metastore for mysql (Ashutosh Chauhan via Gunther Hagleitner)

Modified:
    hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
    hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java

Modified: hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java?rev=1616910&r1=1616909&r2=1616910&view=diff
==============================================================================
--- hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java (original)
+++ hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java Sat Aug  9 01:25:33 2014
@@ -309,7 +309,7 @@ class MetaStoreDirectSql {
     StringBuilder partSb = new StringBuilder(sbCapacity);
     // Assume db and table names are the same for all partition, that's what we're selecting for.
     for (Object partitionId : sqlResult) {
-      partSb.append(extractSqlLong(partitionId)).append(",");
+      partSb.append(StatObjectConverter.extractSqlLong(partitionId)).append(",");
     }
     String partIds = trimCommaList(partSb);
     timingTrace(doTrace, queryText, start, queryTime);
@@ -346,10 +346,10 @@ class MetaStoreDirectSql {
     dbName = dbName.toLowerCase();
     for (Object[] fields : sqlResult2) {
       // Here comes the ugly part...
-      long partitionId = extractSqlLong(fields[0]);
-      Long sdId = extractSqlLong(fields[1]);
-      Long colId = extractSqlLong(fields[2]);
-      Long serdeId = extractSqlLong(fields[3]);
+      long partitionId = StatObjectConverter.extractSqlLong(fields[0]);
+      Long sdId = StatObjectConverter.extractSqlLong(fields[1]);
+      Long colId = StatObjectConverter.extractSqlLong(fields[2]);
+      Long serdeId = StatObjectConverter.extractSqlLong(fields[3]);
       // A partition must have either everything set, or nothing set if it's a view.
       if (sdId == null || colId == null || serdeId == null) {
         if (isView == null) {
@@ -518,7 +518,7 @@ class MetaStoreDirectSql {
             currentListId = null;
             t.getSkewedInfo().addToSkewedColValues(new ArrayList<String>());
           } else {
-            long fieldsListId = extractSqlLong(fields[1]);
+            long fieldsListId = StatObjectConverter.extractSqlLong(fields[1]);
             if (currentListId == null || fieldsListId != currentListId) {
               currentList = new ArrayList<String>();
               currentListId = fieldsListId;
@@ -560,7 +560,7 @@ class MetaStoreDirectSql {
             currentList = new ArrayList<String>(); // left outer join produced a list with no values
             currentListId = null;
           } else {
-            long fieldsListId = extractSqlLong(fields[1]);
+            long fieldsListId = StatObjectConverter.extractSqlLong(fields[1]);
             if (currentListId == null || fieldsListId != currentListId) {
               currentList = new ArrayList<String>();
               currentListId = fieldsListId;
@@ -599,14 +599,6 @@ class MetaStoreDirectSql {
     return orderedResult;
   }
 
-  private Long extractSqlLong(Object obj) throws MetaException {
-    if (obj == null) return null;
-    if (!(obj instanceof Number)) {
-      throw new MetaException("Expected numeric type but got " + obj.getClass().getName());
-    }
-    return ((Number)obj).longValue();
-  }
-
   private void timingTrace(boolean doTrace, String queryText, long start, long queryTime) {
     if (!doTrace) return;
     LOG.debug("Direct SQL query in " + (queryTime - start) / 1000000.0 + "ms + " +
@@ -674,7 +666,7 @@ class MetaStoreDirectSql {
         if (fields == null) {
           fields = iter.next();
         }
-        long nestedId = extractSqlLong(fields[keyIndex]);
+        long nestedId = StatObjectConverter.extractSqlLong(fields[keyIndex]);
         if (nestedId < id) throw new MetaException("Found entries for unknown ID " + nestedId);
         if (nestedId > id) break; // fields belong to one of the next entries
         func.apply(entry.getValue(), fields);
@@ -930,7 +922,7 @@ class MetaStoreDirectSql {
     return colStats;
   }
 
-  private ColumnStatisticsObj prepareCSObj (Object[] row, int i) {
+  private ColumnStatisticsObj prepareCSObj (Object[] row, int i) throws MetaException {
     ColumnStatisticsData data = new ColumnStatisticsData();
     ColumnStatisticsObj cso = new ColumnStatisticsObj((String)row[i++], (String)row[i++], data);
     Object llow = row[i++], lhigh = row[i++], dlow = row[i++], dhigh = row[i++],
@@ -1017,8 +1009,8 @@ class MetaStoreDirectSql {
       // LastAnalyzed is stored per column but thrift has it per several;
       // get the lowest for now as nobody actually uses this field.
       Object laObj = row[offset + 14];
-      if (laObj != null && (!csd.isSetLastAnalyzed() || csd.getLastAnalyzed() > extractSqlLong(laObj))) {
-        csd.setLastAnalyzed(extractSqlLong(laObj));
+      if (laObj != null && (!csd.isSetLastAnalyzed() || csd.getLastAnalyzed() > StatObjectConverter.extractSqlLong(laObj))) {
+        csd.setLastAnalyzed(StatObjectConverter.extractSqlLong(laObj));
       }
       csos.add(prepareCSObj(row, offset));
     }

Modified: hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java?rev=1616910&r1=1616909&r2=1616910&view=diff
==============================================================================
--- hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java (original)
+++ hive/branches/cbo/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java Sat Aug  9 01:25:33 2014
@@ -352,61 +352,61 @@ public class StatObjectConverter {
   // SQL
   public static void fillColumnStatisticsData(String colType, ColumnStatisticsData data,
       Object llow, Object lhigh, Object dlow, Object dhigh, Object declow, Object dechigh,
-      Object nulls, Object dist, Object avglen, Object maxlen, Object trues, Object falses) {
+      Object nulls, Object dist, Object avglen, Object maxlen, Object trues, Object falses) throws MetaException {
     if (colType.equals("boolean")) {
       BooleanColumnStatsData boolStats = new BooleanColumnStatsData();
-      boolStats.setNumFalses((Long)falses);
-      boolStats.setNumTrues((Long)trues);
-      boolStats.setNumNulls((Long)nulls);
+      boolStats.setNumFalses(extractSqlLong(falses));
+      boolStats.setNumTrues(extractSqlLong(trues));
+      boolStats.setNumNulls(extractSqlLong(nulls));
       data.setBooleanStats(boolStats);
     } else if (colType.equals("string") ||
         colType.startsWith("varchar") || colType.startsWith("char")) {
       StringColumnStatsData stringStats = new StringColumnStatsData();
-      stringStats.setNumNulls((Long)nulls);
+      stringStats.setNumNulls(extractSqlLong(nulls));
       stringStats.setAvgColLen((Double)avglen);
-      stringStats.setMaxColLen((Long)maxlen);
-      stringStats.setNumDVs((Long)dist);
+      stringStats.setMaxColLen(extractSqlLong(maxlen));
+      stringStats.setNumDVs(extractSqlLong(dist));
       data.setStringStats(stringStats);
     } else if (colType.equals("binary")) {
       BinaryColumnStatsData binaryStats = new BinaryColumnStatsData();
-      binaryStats.setNumNulls((Long)nulls);
+      binaryStats.setNumNulls(extractSqlLong(nulls));
       binaryStats.setAvgColLen((Double)avglen);
-      binaryStats.setMaxColLen((Long)maxlen);
+      binaryStats.setMaxColLen(extractSqlLong(maxlen));
       data.setBinaryStats(binaryStats);
     } else if (colType.equals("bigint") || colType.equals("int") ||
         colType.equals("smallint") || colType.equals("tinyint") ||
         colType.equals("timestamp")) {
       LongColumnStatsData longStats = new LongColumnStatsData();
-      longStats.setNumNulls((Long)nulls);
+      longStats.setNumNulls(extractSqlLong(nulls));
       if (lhigh != null) {
-        longStats.setHighValue((Long)lhigh);
+        longStats.setHighValue(extractSqlLong(lhigh));
       }
       if (llow != null) {
-        longStats.setLowValue((Long)llow);
+        longStats.setLowValue(extractSqlLong(llow));
       }
-      longStats.setNumDVs((Long)dist);
+      longStats.setNumDVs(extractSqlLong(dist));
       data.setLongStats(longStats);
     } else if (colType.equals("double") || colType.equals("float")) {
       DoubleColumnStatsData doubleStats = new DoubleColumnStatsData();
-      doubleStats.setNumNulls((Long)nulls);
+      doubleStats.setNumNulls(extractSqlLong(nulls));
       if (dhigh != null) {
         doubleStats.setHighValue((Double)dhigh);
       }
       if (dlow != null) {
         doubleStats.setLowValue((Double)dlow);
       }
-      doubleStats.setNumDVs((Long)dist);
+      doubleStats.setNumDVs(extractSqlLong(dist));
       data.setDoubleStats(doubleStats);
     } else if (colType.startsWith("decimal")) {
       DecimalColumnStatsData decimalStats = new DecimalColumnStatsData();
-      decimalStats.setNumNulls((Long)nulls);
+      decimalStats.setNumNulls(extractSqlLong(nulls));
       if (dechigh != null) {
         decimalStats.setHighValue(createThriftDecimal((String)dechigh));
       }
       if (declow != null) {
         decimalStats.setLowValue(createThriftDecimal((String)declow));
       }
-      decimalStats.setNumDVs((Long)dist);
+      decimalStats.setNumDVs(extractSqlLong(dist));
       data.setDecimalStats(decimalStats);
     }
   }
@@ -419,4 +419,12 @@ public class StatObjectConverter {
   private static String createJdoDecimalString(Decimal d) {
     return new BigDecimal(new BigInteger(d.getUnscaled()), d.getScale()).toString();
   }
+
+  static Long extractSqlLong(Object obj) throws MetaException {
+    if (obj == null) return null;
+    if (!(obj instanceof Number)) {
+      throw new MetaException("Expected numeric type but got " + obj.getClass().getName());
+    }
+    return ((Number)obj).longValue();
+  }
 }