Skip to content

Commit ef2f4bc

Browse files
committed
fix multi-cf checkExistenceOnly
1 parent d4e53e4 commit ef2f4bc

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/main/java/com/alipay/oceanbase/hbase/OHTable.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -809,12 +809,12 @@ public static int compareByteArray(byte[] bt1, byte[] bt2) {
809809

810810
private void getMaxRowFromResult(AbstractQueryStreamResult clientQueryStreamResult,
811811
List<KeyValue> keyValueList, boolean isTableGroup,
812-
byte[] family) throws Exception {
812+
byte[] family, boolean checkExistenceOnly) throws Exception {
813813
byte[][] familyAndQualifier = new byte[2][];
814814
KeyValue kv = null;
815815
while (clientQueryStreamResult.next()) {
816816
List<ObObj> row = clientQueryStreamResult.getRow();
817-
if (row.isEmpty()) {
817+
if (checkExistenceOnly) {
818818
// Currently, checkExistOnly is set, and if the row exists, it returns an empty row.
819819
keyValueList.add(new KeyValue());
820820
return;
@@ -904,7 +904,7 @@ public Result call() throws IOException {
904904

905905
ObTableClientQueryAsyncStreamResult clientQueryStreamResult = (ObTableClientQueryAsyncStreamResult) obTableClient
906906
.execute(request);
907-
getMaxRowFromResult(clientQueryStreamResult, keyValueList, true, family);
907+
getMaxRowFromResult(clientQueryStreamResult, keyValueList, true, family, get.isCheckExistenceOnly());
908908
} else {
909909
for (Map.Entry<byte[], NavigableSet<byte[]>> entry : get.getFamilyMap()
910910
.entrySet()) {
@@ -927,7 +927,7 @@ public Result call() throws IOException {
927927
ObTableClientQueryStreamResult clientQueryStreamResult = (ObTableClientQueryStreamResult) obTableClient
928928
.execute(request);
929929
getMaxRowFromResult(clientQueryStreamResult, keyValueList, false,
930-
family);
930+
family, get.isCheckExistenceOnly());
931931
}
932932
}
933933
} catch (Exception e) {

src/test/java/com/alipay/oceanbase/hbase/HTableMultiCFTestBase.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,6 +1522,38 @@ public void testMultiColumnFamilyGet() throws Exception {
15221522
}
15231523
}
15241524
assertEquals(5, keyValues.length);
1525+
1526+
// test multi-cf get checkExistenceOnly
1527+
Delete delKey1 = new Delete(toBytes("Key1"));
1528+
multiCfHTable.delete(delKey1);
1529+
get = new Get(toBytes("Key1"));
1530+
Result allKey1Result = multiCfHTable.get(get);
1531+
Assert.assertEquals(0, allKey1Result.size());
1532+
1533+
boolean exist = multiCfHTable.exists(get);
1534+
assertFalse(exist);
1535+
Put put = new Put(toBytes("Key1"));
1536+
put.add(family1, family1_column1, family1_value);
1537+
multiCfHTable.put(put);
1538+
exist = multiCfHTable.exists(get);
1539+
assertTrue(exist);
1540+
1541+
// test existsAll
1542+
multiCfHTable.delete(delKey1);
1543+
allKey1Result = multiCfHTable.get(get);
1544+
Assert.assertEquals(0, allKey1Result.size());
1545+
1546+
get = new Get(toBytes("Key0"));
1547+
get2 = new Get(toBytes("Key1"));
1548+
get3 = new Get(toBytes("Key2"));
1549+
ArrayList<Get> gets = new ArrayList<>();
1550+
gets.add(get);
1551+
gets.add(get2);
1552+
gets.add(get3);
1553+
boolean[] exists = multiCfHTable.existsAll(gets);
1554+
Assert.assertTrue(exists[0]);
1555+
Assert.assertFalse(exists[1]);
1556+
Assert.assertTrue(exists[2]);
15251557
}
15261558

15271559
@Test

0 commit comments

Comments
 (0)