Skip to content

Commit 4b03b22

Browse files
WeiXinChanshenyunlong
authored andcommitted
fix IndexOutOfBoundsException when two same Get are in BatchOperation
1 parent 641c28c commit 4b03b22

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/ObTableSingleOpEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ public void setAggPropertiesNames(List<String> columnNames) {
410410

411411
public Map<String, Object> getSimpleProperties() {
412412
Map<String, Object> values = new HashMap<String, Object>((int) propertiesValues.size());
413-
for (int i = 0; i < propertiesValues.size(); i++) {
413+
for (int i = 0; i < propertiesNames.size(); i++) {
414414
values.put(propertiesNames.get(i), propertiesValues.get(i).getValue());
415415
}
416416
return values;

src/test/java/com/alipay/oceanbase/rpc/ObTableGetTest.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,21 @@
1919

2020
import com.alipay.oceanbase.rpc.exception.ObTableException;
2121
import com.alipay.oceanbase.rpc.get.Get;
22+
import com.alipay.oceanbase.rpc.get.result.GetResult;
2223
import com.alipay.oceanbase.rpc.mutation.BatchOperation;
2324
import com.alipay.oceanbase.rpc.mutation.result.BatchOperationResult;
2425
import com.alipay.oceanbase.rpc.util.ObTableClientTestUtil;
2526
import org.junit.Assert;
2627
import org.junit.Before;
2728
import org.junit.Test;
2829

30+
import java.util.List;
2931
import java.util.Map;
3032

3133
import static com.alipay.oceanbase.rpc.mutation.MutationFactory.colVal;
3234
import static com.alipay.oceanbase.rpc.mutation.MutationFactory.row;
33-
import static org.junit.Assert.assertThrows;
34-
import static org.junit.Assert.assertTrue;
35+
import static org.junit.Assert.*;
36+
import static org.junit.Assert.assertEquals;
3537

3638
/*
3739
CREATE TABLE IF NOT EXISTS `test_get` (
@@ -274,4 +276,37 @@ public void testBatchGet5() {
274276
System.out.println(thrown.getMessage());
275277
assertTrue(thrown.getMessage().contains("[-4007][OB_NOT_SUPPORTED][operation is not supported to partially fill rowkey columns not supported]"));
276278
}
279+
280+
/* test same Get */
281+
@Test
282+
public void testBatchGet6() throws Exception {
283+
try {
284+
// insert
285+
client.insertOrUpdate(tableName)
286+
.setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val")))
287+
.addMutateColVal(colVal("c3", "c3_val")).execute();
288+
289+
// select c1,c2
290+
BatchOperation batch = client.batchOperation(tableName);
291+
Get get1 = client.get(tableName)
292+
.setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val"))).select("c1", "c2", "c3");
293+
Get get2 = client.get(tableName)
294+
.setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val"))).select("c1", "c2", "c3");
295+
batch.addOperation(get1, get2);
296+
BatchOperationResult res = batch.execute();
297+
Assert.assertNotNull(res);
298+
List<Object> getResults = res.getResults();
299+
assertEquals(2, getResults.size());
300+
for (Object result : getResults) {
301+
GetResult getResult = (GetResult) result;
302+
Map<String, Object> row = getResult.getOperationRow().getMap();
303+
assertEquals("c1_val", row.get("c1"));
304+
assertEquals("c2_val", row.get("c2"));
305+
assertEquals("c3_val", row.get("c3"));
306+
}
307+
} finally {
308+
client.delete(tableName).setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val")))
309+
.execute();
310+
}
311+
}
277312
}

0 commit comments

Comments
 (0)