github-actions[bot] commented on code in PR #41701:
URL: https://github.com/apache/doris/pull/41701#discussion_r1800999541
##########
be/src/olap/memtable.cpp:
##########
@@ -578,6 +539,200 @@ void MemTable::_aggregate() {
}
}
+template <bool is_final>
+void MemTable::_aggregate_for_flexible_partial_update_without_seq_col(
+ const vectorized::ColumnsWithTypeAndName& block_data,
+ vectorized::MutableBlock& mutable_block, std::vector<RowInBlock*>&
temp_row_in_blocks) {
+ RowInBlock* prev_row = nullptr;
+ int row_pos = -1;
+ auto& skip_bitmaps = assert_cast<vectorized::ColumnBitmap*>(
+
mutable_block.mutable_columns()[_skip_bitmap_col_idx].get())
+ ->get_data();
+ auto& delete_signs = assert_cast<vectorized::ColumnInt8*>(
+
mutable_block.mutable_columns()[_delete_sign_col_idx].get())
+ ->get_data();
+ RowInBlock* row_with_delete_sign {nullptr};
+ RowInBlock* row_without_delete_sign {nullptr};
+
+ auto finalize_rows = [&]() {
+ if (row_with_delete_sign != nullptr) {
+ temp_row_in_blocks.push_back(row_with_delete_sign);
+ _finalize_one_row<is_final, false>(row_with_delete_sign,
block_data, ++row_pos);
+ row_with_delete_sign = nullptr;
+ }
+ if (row_without_delete_sign != nullptr) {
+ temp_row_in_blocks.push_back(row_without_delete_sign);
+ _finalize_one_row<is_final, false>(row_without_delete_sign,
block_data, ++row_pos);
+ row_without_delete_sign = nullptr;
+ }
+ _arena->clear();
+ };
+
+ auto add_row = [&](RowInBlock* row, bool with_delete_sign) {
+ if (with_delete_sign) {
+ row_with_delete_sign = row;
+ } else {
+ row_without_delete_sign = row;
+ }
+ };
+ for (RowInBlock* cur_row : _row_in_blocks) {
+ const BitmapValue& skip_bitmap = skip_bitmaps[cur_row->_row_pos];
+ bool cur_row_has_delete_sign =
(!skip_bitmap.contains(_delete_sign_col_unique_id) &&
+ delete_signs[cur_row->_row_pos] != 0);
+ prev_row =
+ (row_with_delete_sign == nullptr) ? row_without_delete_sign :
row_with_delete_sign;
+ // compare keys, the keys of row_with_delete_sign and
row_without_delete_sign is the same,
+ // choose any of them if it's valid
+ if (prev_row != nullptr && (*_vec_row_comparator)(prev_row, cur_row)
== 0) {
+ if (cur_row_has_delete_sign) {
+ if (row_without_delete_sign != nullptr) {
+ // if there exits row without delete sign, remove it first
+ _clear_row_agg(row_without_delete_sign);
+ _stat.merged_rows++;
+ row_without_delete_sign = nullptr;
+ }
+ // and then unconditionally replace the previous row
+ prev_row = row_with_delete_sign;
+ } else {
+ prev_row = row_without_delete_sign;
+ }
+
+ if (prev_row == nullptr) {
+ add_row(cur_row, cur_row_has_delete_sign);
+ } else {
+ if (!prev_row->has_init_agg()) {
+ _init_row_for_agg(prev_row, mutable_block);
+ }
+ _stat.merged_rows++;
+ _aggregate_two_row_in_block<true>(mutable_block, cur_row,
prev_row);
+ }
+ } else {
+ finalize_rows();
+ add_row(cur_row, cur_row_has_delete_sign);
+ }
+ }
+ // finalize the last lows
+ finalize_rows();
+}
+
+template <bool is_final>
+void MemTable::_aggregate_for_flexible_partial_update_with_seq_col(
Review Comment:
warning: function '_aggregate_for_flexible_partial_update_with_seq_col'
exceeds recommended size/complexity thresholds [readability-function-size]
```cpp
void MemTable::_aggregate_for_flexible_partial_update_with_seq_col(
^
```
<details>
<summary>Additional context</summary>
**be/src/olap/memtable.cpp:618:** 113 lines including whitespace and
comments (threshold 80)
```cpp
void MemTable::_aggregate_for_flexible_partial_update_with_seq_col(
^
```
</details>
##########
be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:
##########
@@ -831,15 +885,20 @@ Status
VerticalSegmentWriter::_generate_flexible_read_plan(
Status VerticalSegmentWriter::_merge_rows_for_sequence_column(
Review Comment:
warning: function '_merge_rows_for_sequence_column' has cognitive complexity
of 74 (threshold 50) [readability-function-cognitive-complexity]
```cpp
Status VerticalSegmentWriter::_merge_rows_for_sequence_column(
^
```
<details>
<summary>Additional context</summary>
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:907:** +1,
including nesting penalty of 0, nesting level increased to 1
```cpp
RETURN_IF_ERROR(_generate_encoded_default_seq_value(
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:907:** +2,
including nesting penalty of 1, nesting level increased to 2
```cpp
RETURN_IF_ERROR(_generate_encoded_default_seq_value(
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:918:** nesting
level increased to 1
```cpp
auto get_idx = [](bool with_seq_col, bool has_delete_sign) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:919:** +2,
including nesting penalty of 1, nesting level increased to 2
```cpp
if (!with_seq_col) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:920:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
return (has_delete_sign ? 0 : 1);
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:921:** +1,
nesting level increased to 2
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:922:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
return (has_delete_sign ? 2 : 3);
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:926:** nesting
level increased to 1
```cpp
auto find_rows_to_filter = [&](const std::string& key) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:929:** +2,
including nesting penalty of 1, nesting level increased to 2
```cpp
if (has_row_with_seq_col && has_row_without_seq_col) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:929:** +1
```cpp
if (has_row_with_seq_col && has_row_without_seq_col) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:944:** +1
```cpp
DCHECK(st.is<KEY_NOT_FOUND>() || st.ok());
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:946:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
if (st.is<KEY_NOT_FOUND>()) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:948:** +1,
nesting level increased to 3
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:953:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
if (batched_rows[2] != -1) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:957:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
if (batched_rows[3] != -1) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:962:** nesting
level increased to 3
```cpp
auto remove_rows_without_seq = [&]() {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:963:** +4,
including nesting penalty of 3, nesting level increased to 4
```cpp
if (batched_rows[0] != -1) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:967:** +4,
including nesting penalty of 3, nesting level increased to 4
```cpp
if (batched_rows[1] != -1) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:974:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
if (batched_rows[2] != -1 && batched_rows[3] != -1) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:976:** +4,
including nesting penalty of 3, nesting level increased to 4
```cpp
if (previous_seq_slice.compare(Slice
{row_with_delete_sign_encoded_seq_value}) <=
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:979:** +1,
nesting level increased to 4
```cpp
} else if (previous_seq_slice.compare(
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:984:** +1,
nesting level increased to 4
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:990:** +1,
nesting level increased to 3
```cpp
} else if (batched_rows[2] != -1) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:991:** +4,
including nesting penalty of 3, nesting level increased to 4
```cpp
if (previous_seq_slice.compare(Slice
{row_with_delete_sign_encoded_seq_value}) <=
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:994:** +1,
nesting level increased to 4
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:998:** +1,
nesting level increased to 3
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:999:** +4,
including nesting penalty of 3, nesting level increased to 4
```cpp
if (previous_seq_slice.compare(Slice
{row_without_delete_sign_encoded_seq_value}) <=
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1002:** +1,
nesting level increased to 4
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1012:** +1,
including nesting penalty of 0, nesting level increased to 1
```cpp
for (size_t block_pos = data.row_pos; block_pos < data.row_pos +
data.num_rows; block_pos++) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1018:** +1
```cpp
(!skip_bitmap.contains(delete_sign_col_unique_id) &&
delete_signs[block_pos] != 0);
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1021:** +2,
including nesting penalty of 1, nesting level increased to 2
```cpp
if (delta_pos > 0 && previous_key == key) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1021:** +1
```cpp
if (delta_pos > 0 && previous_key == key) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1022:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
if (!has_same_rows) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1028:** +1,
nesting level increased to 2
```cpp
} else {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1029:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
if (has_same_rows) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1037:** +1,
including nesting penalty of 0, nesting level increased to 1
```cpp
if (has_same_rows) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1040:** +1,
including nesting penalty of 0, nesting level increased to 1
```cpp
if (duplicate_keys > 0) {
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1041:** +2,
including nesting penalty of 1, nesting level increased to 2
```cpp
RETURN_IF_ERROR(_filter_block_for_flexible_partial_update(
^
```
**be/src/common/status.h:629:** expanded from macro 'RETURN_IF_ERROR'
```cpp
do { \
^
```
**be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp:1041:** +3,
including nesting penalty of 2, nesting level increased to 3
```cpp
RETURN_IF_ERROR(_filter_block_for_flexible_partial_update(
^
```
**be/src/common/status.h:631:** expanded from macro 'RETURN_IF_ERROR'
```cpp
if (UNLIKELY(!_status_.ok())) { \
^
```
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]