diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java index 4298026..8c70bfd 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java @@ -22,6 +22,8 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.NavigableMap; +import java.util.TreeMap; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; @@ -133,6 +135,29 @@ public class Increment extends Mutation implements Comparable { } /** + * Before 0.95, when you called {@link Increment#getFamilyMap()}}, you got back + * a map of families to a list of Longs. Now, {@link #getFamilyMap()} returns + * families by list of Cells. This method has been added so you can have the + * old behavior. + * @return Map of families to a list of Long increments. + * @since 0.95.0 + */ + public Map> getFamilyMapOfLongs() { + NavigableMap> map = super.getFamilyMap(); + Map> results = + new TreeMap>(Bytes.BYTES_COMPARATOR); + for (Map.Entry> entry: map.entrySet()) { + NavigableMap longs = new TreeMap(Bytes.BYTES_COMPARATOR); + for (Cell cell: entry.getValue()) { + KeyValue kv = KeyValueUtil.ensureKeyValue(cell); + longs.put(kv.getQualifier(), Bytes.toLong(kv.getValue())); + } + results.put(entry.getKey(), longs); + } + return results; + } + + /** * @return String */ @Override diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestIncrement.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestIncrement.java index 06c0a87..19ff867 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestIncrement.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestIncrement.java @@ -17,9 +17,8 @@ */ package org.apache.hadoop.hbase.client; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; -import java.util.List; import java.util.Map; import java.util.NavigableMap; @@ -33,15 +32,20 @@ public class TestIncrement { public void test() { final long expected = 13; Increment inc = new Increment(new byte [] {'r'}); + int total = 0; for (int i = 0; i < 2; i++) { byte [] bytes = Bytes.toBytes(i); inc.addColumn(bytes, bytes, expected); + total++; } - NavigableMap> familyMapOfLongs = inc.getFamilyMapOfLongs(); - for (Map.Entry> entry: familyMapOfLongs.entrySet()) { - for (Long l: entry.getValue()) { - assertEquals(expected, l.longValue()); + Map> familyMapOfLongs = inc.getFamilyMapOfLongs(); + int found = 0; + for (Map.Entry> entry: familyMapOfLongs.entrySet()) { + for (Map.Entry e: entry.getValue().entrySet()) { + assertEquals(expected, e.getValue().longValue()); + found++; } } + assertEquals(total, found); } } \ No newline at end of file