Skip to content

Commit 5bb2ed8

Browse files
committed
prepare 0.48.9-public
1 parent 119be56 commit 5bb2ed8

File tree

5 files changed

+63
-23
lines changed

5 files changed

+63
-23
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## [0.48.9-public] - 2024-10-11
4+
5+
### Fixes
6+
- **TableAPI** Fixed an issue where `ArrayRecord` could not correctly invoke `toString` when using `SplitRecordReaderImpl` to retrieve results.
7+
- **TableAPI** Fixed an issue where a `get` operation would throw an array index out of bounds exception when the number of `Records` corresponding to a `Split` is 0 while using `SplitRecordReaderImpl` to retrieve results.
8+
- **TableAPI** Fixed an issue with composite predicates `CompositePredicate` that could lead to an additional operator being added when encountering an empty predicate.
9+
310
## [0.48.8-public] - 2024-08-12
411

512
### Enhancement

CHANGELOG_CN.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11
# 更新日志
2+
3+
## [0.48.9-public] - 2024-10-11
4+
5+
### 修复
6+
7+
- **TableAPI** 修复了使用`SplitRecordReaderImpl`获取结果时,拿到了`ArrayRecord`无法正确`toString`的问题。
8+
- **TableAPI** 修复了使用`SplitRecordReaderImpl`获取结果时,如果`Split`对应的`Record`数量为0,在`get`
9+
操作时会抛出数组越界异常的问题。
10+
- **TableAPI** 修复了复合谓词`CompositePredicate`在遇到空谓词时,可能额外增加一次操作符的问题。
11+
12+
213
## [0.48.8-public] - 2024-08-12
314
### 增强
415
- 引入了对复合谓词表达式的内部验证,修复了处理无效或总是真/假谓词时的逻辑,增强了测试覆盖,确保了在复杂查询优化中的稳定性和准确性。

odps-sdk/odps-sdk-table-api/src/main/java/com/aliyun/odps/table/optimizer/predicate/CompoundPredicate.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,16 @@ public String toString() {
101101
continue;
102102
}
103103
}
104+
if (sb.length() != 0) {
105+
sb.append(" ").append(opStr).append(" ");
106+
}
104107
if (currentPredicate instanceof CompoundPredicate
105108
&& ((CompoundPredicate) currentPredicate).logicalOperator != this.logicalOperator) {
106109
sb.append('(').append(currentPredicate).append(')');
107110
} else {
108111
sb.append(currentPredicate.toString());
109112
}
110-
111-
if (i < predicates.size() - 1) {
112-
sb.append(" ").append(opStr).append(" ");
113-
}
114113
}
115-
116114
return sb.toString();
117115
}
118116
}

odps-sdk/odps-sdk-table-api/src/main/java/com/aliyun/odps/table/read/impl/batch/SplitRecordReaderImpl.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@
1919

2020
package com.aliyun.odps.table.read.impl.batch;
2121

22+
import java.io.IOException;
23+
24+
import org.apache.arrow.vector.VectorSchemaRoot;
25+
2226
import com.aliyun.odps.Column;
2327
import com.aliyun.odps.data.ArrayRecord;
2428
import com.aliyun.odps.table.DataSchema;
2529
import com.aliyun.odps.table.configuration.ReaderOptions;
2630
import com.aliyun.odps.table.metrics.Metrics;
2731
import com.aliyun.odps.table.read.SplitReader;
2832
import com.aliyun.odps.table.record.ColumnarBatchRecord;
29-
import org.apache.arrow.vector.VectorSchemaRoot;
30-
31-
import java.io.IOException;
3233

3334
public class SplitRecordReaderImpl implements SplitReader<ArrayRecord> {
3435

@@ -51,15 +52,19 @@ public SplitRecordReaderImpl(SplitReader<VectorSchemaRoot> arrowReader,
5152

5253
@Override
5354
public boolean hasNext() throws IOException {
54-
if (nextRow >= rowsInBatch) {
55-
boolean moreRows = arrowBatchReader.hasNext();
55+
if (nextRow < rowsInBatch) {
56+
return true;
57+
}
58+
nextRow = 0;
59+
boolean moreRows;
60+
do {
61+
moreRows = arrowBatchReader.hasNext();
5662
if (moreRows) {
57-
nextRow = 0;
5863
rowsInBatch = fillRows();
5964
}
60-
return moreRows;
61-
}
62-
return true;
65+
// If we filled rows, we can break out of the loop
66+
} while (moreRows && rowsInBatch == 0);
67+
return moreRows;
6368
}
6469

6570
@Override

odps-sdk/odps-sdk-table-api/src/main/java/com/aliyun/odps/table/record/ColumnarBatchRecord.java

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@
1919

2020
package com.aliyun.odps.table.record;
2121

22+
import java.util.HashMap;
23+
import java.util.List;
24+
import java.util.Map;
25+
26+
import org.apache.arrow.vector.FieldVector;
27+
import org.apache.arrow.vector.VectorSchemaRoot;
28+
import org.apache.arrow.vector.types.pojo.Field;
29+
import org.apache.arrow.vector.types.pojo.Schema;
30+
2231
import com.aliyun.odps.Column;
2332
import com.aliyun.odps.data.AbstractChar;
2433
import com.aliyun.odps.data.ArrayRecord;
2534
import com.aliyun.odps.data.Binary;
2635
import com.aliyun.odps.data.Record;
2736
import com.aliyun.odps.table.arrow.accessor.ArrowVectorAccessor;
2837
import com.aliyun.odps.table.record.accessor.ArrowToRecordConverter;
29-
import org.apache.arrow.vector.FieldVector;
30-
import org.apache.arrow.vector.VectorSchemaRoot;
31-
import org.apache.arrow.vector.types.pojo.Field;
32-
import org.apache.arrow.vector.types.pojo.Schema;
33-
34-
import java.util.Arrays;
35-
import java.util.HashMap;
36-
import java.util.List;
37-
import java.util.Map;
3838

3939
public class ColumnarBatchRecord extends ArrayRecord {
4040

@@ -206,4 +206,23 @@ private int getColumnIndex(String name) {
206206
}
207207
return idx;
208208
}
209+
210+
@Override
211+
public String toString() {
212+
StringBuilder sb = new StringBuilder();
213+
for (int index = 0; index < getColumnCount(); index++) {
214+
Object o = get(index);
215+
if (o == null) {
216+
sb.append("null").append(",");
217+
} else if (o instanceof byte[]) {
218+
sb.append(bytesToString((byte[]) o)).append(",");
219+
} else {
220+
sb.append(o).append(",");
221+
}
222+
}
223+
if (sb.length() > 0) {
224+
sb.setLength(sb.length() - 1);
225+
}
226+
return sb.toString();
227+
}
209228
}

0 commit comments

Comments
 (0)