diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java index dcc1266df9..4d284d843d 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java @@ -1245,14 +1245,11 @@ public class Bytes implements Comparable { * @return incremented offset */ public static int putBigDecimal(byte[] bytes, int offset, BigDecimal val) { - if (bytes == null) { + if (bytes == null || bytes.length == 0) { return offset; } - - byte[] valueBytes = val.unscaledValue().toByteArray(); - byte[] result = new byte[valueBytes.length + SIZEOF_INT]; - offset = putInt(result, offset, val.scale()); - return putBytes(result, offset, valueBytes, 0, valueBytes.length); + byte[] valueBytes = toBytes(val); + return putBytes(bytes, offset, valueBytes, 0, valueBytes.length); } /** diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestBytes.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestBytes.java index 8b206e2b74..b51da3fd0e 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestBytes.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestBytes.java @@ -589,5 +589,21 @@ public class TestBytes extends TestCase { Assert.assertArrayEquals(testData, result); } } + + public void testPutBigDecimal() { + BigDecimal decimal = new BigDecimal("1.1"); + byte[] decimalBytes = Bytes.toBytes(decimal); // [0,0,0,1,11] + byte[] bytes = new byte[decimalBytes.length + 2]; + bytes[0] = Byte.MAX_VALUE; + bytes[bytes.length - 1] = Byte.MIN_VALUE; + int offset = Bytes.putBigDecimal(bytes, 1, decimal); + Assert.assertEquals(bytes.length - 1, offset); + + byte[] expecteds = new byte[bytes.length]; + expecteds[0] = Byte.MAX_VALUE; + expecteds[expecteds.length - 1] = Byte.MIN_VALUE; + System.arraycopy(decimalBytes, 0, expecteds, 1, decimalBytes.length); + Assert.assertArrayEquals(expecteds, bytes); // [127,0,0,0,1,11,-128] + } }