diff --git metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java index b96c27e..bc3fca5 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java @@ -658,7 +658,7 @@ public void apply(Partition t, Object[] fields) { + " order by \"SD_ID\" asc"; loopJoinOrderedResult(sds, queryText, 0, new ApplyFunc() { @Override - public void apply(StorageDescriptor t, Object[] fields) { + public void apply(StorageDescriptor t, Object[] fields) throws MetaException { t.putToParameters((String)fields[1], extractSqlClob(fields[2])); }}); // Perform conversion of null map values @@ -789,7 +789,7 @@ public void apply(StorageDescriptor t, Object[] fields) throws MetaException { + " order by \"CD_ID\" asc, \"INTEGER_IDX\" asc"; loopJoinOrderedResult(colss, queryText, 0, new ApplyFunc>() { @Override - public void apply(List t, Object[] fields) { + public void apply(List t, Object[] fields) throws MetaException { t.add(new FieldSchema((String)fields[2], extractSqlClob(fields[3]), (String)fields[1])); }}); } @@ -800,7 +800,7 @@ public void apply(List t, Object[] fields) { + " order by \"SERDE_ID\" asc"; loopJoinOrderedResult(serdes, queryText, 0, new ApplyFunc() { @Override - public void apply(SerDeInfo t, Object[] fields) { + public void apply(SerDeInfo t, Object[] fields) throws MetaException { t.putToParameters((String)fields[1], extractSqlClob(fields[2])); }}); // Perform conversion of null map values @@ -889,15 +889,16 @@ static Double extractSqlDouble(Object obj) throws MetaException { return ((Number) obj).doubleValue(); } - private String extractSqlClob(Object value) { + private String extractSqlClob(Object value) throws MetaException { if (value == null) return null; + try { if (value instanceof Clob) { // we trim the Clob value to a max length an int can hold int maxLength = (((Clob)value).length() < Integer.MAX_VALUE - 2) ? (int)((Clob)value).length() : Integer.MAX_VALUE - 2; return ((Clob)value).getSubString(1L, maxLength); } else { - return value.toString(); + throw new MetaException("Expected clob type but got " + value.getClass().getName()); } } catch (SQLException sqle) { return null;