Skip to content

Commit 30b2728

Browse files
authored
Merge pull request #372 from oceanbase/fix_batch_out_of_index_1x
[CP] Fix IndexOutOfBoundsException when two same Get are in BatchOperation
2 parents ae3c550 + 00a074f commit 30b2728

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
@@ -373,7 +373,7 @@ public void setAggPropertiesNames(List<String> columnNames) {
373373

374374
public Map<String, Object> getSimpleProperties() {
375375
Map<String, Object> values = new HashMap<String, Object>((int) propertiesValues.size());
376-
for (int i = 0; i < propertiesValues.size(); i++) {
376+
for (int i = 0; i < propertiesNames.size(); i++) {
377377
values.put(propertiesNames.get(i), propertiesValues.get(i).getValue());
378378
}
379379
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
@@ -2,19 +2,21 @@
22

33
import com.alipay.oceanbase.rpc.exception.ObTableException;
44
import com.alipay.oceanbase.rpc.get.Get;
5+
import com.alipay.oceanbase.rpc.get.result.GetResult;
56
import com.alipay.oceanbase.rpc.mutation.BatchOperation;
67
import com.alipay.oceanbase.rpc.mutation.result.BatchOperationResult;
78
import com.alipay.oceanbase.rpc.util.ObTableClientTestUtil;
89
import org.junit.Assert;
910
import org.junit.Before;
1011
import org.junit.Test;
1112

13+
import java.util.List;
1214
import java.util.Map;
1315

1416
import static com.alipay.oceanbase.rpc.mutation.MutationFactory.colVal;
1517
import static com.alipay.oceanbase.rpc.mutation.MutationFactory.row;
16-
import static org.junit.Assert.assertThrows;
17-
import static org.junit.Assert.assertTrue;
18+
import static org.junit.Assert.*;
19+
import static org.junit.Assert.assertEquals;
1820

1921
/*
2022
CREATE TABLE IF NOT EXISTS `test_get` (
@@ -259,4 +261,37 @@ public void testBatchGet5() {
259261
System.out.println(thrown.getMessage());
260262
assertTrue(thrown.getMessage().contains("[-4007][OB_NOT_SUPPORTED][operation is not supported to partially fill rowkey columns not supported]"));
261263
}
264+
265+
/* test same Get */
266+
@Test
267+
public void testBatchGet6() throws Exception {
268+
try {
269+
// insert
270+
client.insertOrUpdate(tableName)
271+
.setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val")))
272+
.addMutateColVal(colVal("c3", "c3_val")).execute();
273+
274+
// select c1,c2
275+
BatchOperation batch = client.batchOperation(tableName);
276+
Get get1 = client.get(tableName)
277+
.setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val"))).select("c1", "c2", "c3");
278+
Get get2 = client.get(tableName)
279+
.setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val"))).select("c1", "c2", "c3");
280+
batch.addOperation(get1, get2);
281+
BatchOperationResult res = batch.execute();
282+
Assert.assertNotNull(res);
283+
List<Object> getResults = res.getResults();
284+
assertEquals(2, getResults.size());
285+
for (Object result : getResults) {
286+
GetResult getResult = (GetResult) result;
287+
Map<String, Object> row = getResult.getOperationRow().getMap();
288+
assertEquals("c1_val", row.get("c1"));
289+
assertEquals("c2_val", row.get("c2"));
290+
assertEquals("c3_val", row.get("c3"));
291+
}
292+
} finally {
293+
client.delete(tableName).setRowKey(row(colVal("c1", "c1_val"), colVal("c2", "c2_val")))
294+
.execute();
295+
}
296+
}
262297
}

0 commit comments

Comments
 (0)