--- F:/workspace/hive-release-2.0.1/beeline/src/java/org/apache/hive/beeline/Rows.java Fri May 12 16:04:48 2017 +++ F:/workspace/hive-release-2.0.1/beeline/src/java/org/apache/hive/beeline/Rows.java.2 Fri May 12 16:01:30 2017 @@ -30,0 +31 @@ import java.util.Arrays; +import java.util.HashMap; @@ -31,0 +33 @@ import java.util.Iterator; +import java.util.Map; @@ -42,0 +45 @@ abstract class Rows implements Iterator { + private final Map stringCache = new HashMap(); @@ -156,9 +159,7 @@ abstract class Rows implements Iterator { - if (numberFormat != null) { - Object o = rs.getObject(i + 1); - if (o == null) { - values[i] = null; - } else if (o instanceof Number) { - values[i] = numberFormat.format(o); - } else { - values[i] = o.toString(); - } + Object o = rs.getObject(i + 1); + String value = null; + + if (o == null) { + value = nullStr; + } else if (numberFormat != null && o instanceof Number) { + value = numberFormat.format(o); @@ -166 +167 @@ abstract class Rows implements Iterator { - values[i] = rs.getString(i + 1); + value = o.toString(); @@ -168,2 +169,9 @@ abstract class Rows implements Iterator { - values[i] = values[i] == null ? nullStr : values[i]; - sizes[i] = values[i].length(); + + String cacheValue = (String) stringCache.get(value); + if (cacheValue != null) { + value = cacheValue; + } else { + stringCache.put(value, value); + } + values[i] = value; + sizes[i] = value.length();