Skip to content

[refactor](pipeline) Delete non-pipeline exec nodes - #35803

Merged
Gabriel39 merged 1 commit into
apache:masterfrom
Gabriel39:refactor_0603
Jun 4, 2024
Merged

Gabriel39 merged 1 commit into
apache:masterfrom
Gabriel39:refactor_0603

Conversation

@Gabriel39

Copy link
Copy Markdown
Contributor

Proposed changes

Issue Number: close #xxx

@doris-robot

Copy link
Copy Markdown

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR

Since 2024-03-18, the Document has been moved to doris-website.
See Doris Document.

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clang-tidy made some suggestions

template <typename ParentType>
Status ParallelScannerBuilder<ParentType>::_build_scanners_by_rowid(
std::list<VScannerSPtr>& scanners) {
Status ParallelScannerBuilder::_build_scanners_by_rowid(std::list<VScannerSPtr>& scanners) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function '_build_scanners_by_rowid' exceeds recommended size/complexity thresholds [readability-function-size]

Status ParallelScannerBuilder::_build_scanners_by_rowid(std::list<VScannerSPtr>& scanners) {
                               ^
Additional context

be/src/olap/parallel_scanner_builder.cpp:40: 126 lines including whitespace and comments (threshold 80)

Status ParallelScannerBuilder::_build_scanners_by_rowid(std::list<VScannerSPtr>& scanners) {
                               ^

Comment thread be/src/pipeline/dependency.h Resolved
struct BlockRowPos {
BlockRowPos() : block_num(0), row_num(0), pos(0) {}
int64_t block_num; //the pos at which block
int64_t row_num; //the pos at which row

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: use default member initializer for 'row_num' [modernize-use-default-member-init]

be/src/pipeline/dependency.h:508:

-     BlockRowPos() : block_num(0), row_num(0), pos(0) {}
+     BlockRowPos() : block_num(0), , pos(0) {}
Suggested change
int64_t row_num; //the pos at which row
int64_t row_num{0}; //the pos at which row

BlockRowPos() : block_num(0), row_num(0), pos(0) {}
int64_t block_num; //the pos at which block
int64_t row_num; //the pos at which row
int64_t pos; //pos = all blocks size + row_num

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: use default member initializer for 'pos' [modernize-use-default-member-init]

be/src/pipeline/dependency.h:508:

-     BlockRowPos() : block_num(0), row_num(0), pos(0) {}
+     BlockRowPos() : block_num(0), row_num(0), {}
Suggested change
int64_t pos; //pos = all blocks size + row_num
int64_t pos{0}; //pos = all blocks size + row_num

Status ScanLocalState<Derived>::_normalize_in_and_eq_predicate(
vectorized::VExpr* expr, vectorized::VExprContext* expr_ctx, SlotDescriptor* slot,
ColumnValueRange<T>& range, vectorized::VScanNode::PushDownType* pdt) {
Status ScanLocalState<Derived>::_normalize_in_and_eq_predicate(vectorized::VExpr* expr,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function '_normalize_in_and_eq_predicate' has cognitive complexity of 63 (threshold 50) [readability-function-cognitive-complexity]

Status ScanLocalState<Derived>::_normalize_in_and_eq_predicate(vectorized::VExpr* expr,
                                ^
Additional context

be/src/pipeline/exec/scan_operator.cpp:593: +1, including nesting penalty of 0, nesting level increased to 1

    if (TExprNodeType::IN_PRED == expr->node_type()) {
    ^

be/src/pipeline/exec/scan_operator.cpp:597: +2, including nesting penalty of 1, nesting level increased to 2

        if (hybrid_set != nullptr) {
        ^

be/src/pipeline/exec/scan_operator.cpp:599: +3, including nesting penalty of 2, nesting level increased to 3

            if (hybrid_set->size() <=
            ^

be/src/pipeline/exec/scan_operator.cpp:602: +1, nesting level increased to 3

            } else {
              ^

be/src/pipeline/exec/scan_operator.cpp:607: +1, nesting level increased to 2

        } else {
          ^

be/src/pipeline/exec/scan_operator.cpp:611: +3, including nesting penalty of 2, nesting level increased to 3

            if (temp_pdt == PushDownType::UNACCEPTABLE) {
            ^

be/src/pipeline/exec/scan_operator.cpp:621: +3, including nesting penalty of 2, nesting level increased to 3

            if (!state->use_set) {
            ^

be/src/pipeline/exec/scan_operator.cpp:628: +2, including nesting penalty of 1, nesting level increased to 2

        while (iter->has_next()) {
        ^

be/src/pipeline/exec/scan_operator.cpp:631: +3, including nesting penalty of 2, nesting level increased to 3

            if (nullptr == iter->get_value()) {
            ^

be/src/pipeline/exec/scan_operator.cpp:636: +3, including nesting penalty of 2, nesting level increased to 3

            RETURN_IF_ERROR(_change_value_range<true>(
            ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/pipeline/exec/scan_operator.cpp:636: +4, including nesting penalty of 3, nesting level increased to 4

            RETURN_IF_ERROR(_change_value_range<true>(
            ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

be/src/pipeline/exec/scan_operator.cpp:642: +1, nesting level increased to 1

    } else if (TExprNodeType::BINARY_PRED == expr->node_type()) {
           ^

be/src/pipeline/exec/scan_operator.cpp:644: nesting level increased to 2

        auto eq_checker = [](const std::string& fn_name) { return fn_name == "eq"; };
                          ^

be/src/pipeline/exec/scan_operator.cpp:650: +2, including nesting penalty of 1, nesting level increased to 2

        RETURN_IF_ERROR(_should_push_down_binary_predicate(
        ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/pipeline/exec/scan_operator.cpp:650: +3, including nesting penalty of 2, nesting level increased to 3

        RETURN_IF_ERROR(_should_push_down_binary_predicate(
        ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

be/src/pipeline/exec/scan_operator.cpp:653: +2, including nesting penalty of 1, nesting level increased to 2

        if (temp_pdt == PushDownType::UNACCEPTABLE) {
        ^

be/src/pipeline/exec/scan_operator.cpp:659: +2, including nesting penalty of 1, nesting level increased to 2

        if (value.data != nullptr) {
        ^

be/src/pipeline/exec/scan_operator.cpp:660: +3, including nesting penalty of 2, nesting level increased to 3

            if constexpr (T == TYPE_CHAR || T == TYPE_VARCHAR || T == TYPE_STRING ||
            ^

be/src/pipeline/exec/scan_operator.cpp:660: +1

            if constexpr (T == TYPE_CHAR || T == TYPE_VARCHAR || T == TYPE_STRING ||
                                                                                  ^

be/src/pipeline/exec/scan_operator.cpp:663: +4, including nesting penalty of 3, nesting level increased to 4

                RETURN_IF_ERROR(_change_value_range<true>(
                ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/pipeline/exec/scan_operator.cpp:663: +5, including nesting penalty of 4, nesting level increased to 5

                RETURN_IF_ERROR(_change_value_range<true>(
                ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

be/src/pipeline/exec/scan_operator.cpp:666: +1, nesting level increased to 3

            } else {
              ^

be/src/pipeline/exec/scan_operator.cpp:667: +4, including nesting penalty of 3, nesting level increased to 4

                if (sizeof(typename PrimitiveTypeTraits<T>::CppType) != value.size) {
                ^

be/src/pipeline/exec/scan_operator.cpp:672: +4, including nesting penalty of 3, nesting level increased to 4

                RETURN_IF_ERROR(_change_value_range<true>(
                ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/pipeline/exec/scan_operator.cpp:672: +5, including nesting penalty of 4, nesting level increased to 5

                RETURN_IF_ERROR(_change_value_range<true>(
                ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

template <bool with_other_conjuncts>
Status ProcessHashTableProbe<JoinOpType, Parent>::do_mark_join_conjuncts(
Block* output_block, size_t hash_table_bucket_size) {
Status ProcessHashTableProbe<JoinOpType>::do_mark_join_conjuncts(Block* output_block,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function 'do_mark_join_conjuncts' has cognitive complexity of 56 (threshold 50) [readability-function-cognitive-complexity]

_conjuncts>
                                                      ^
Additional context

be/src/vec/exec/join/process_hash_table_probe_impl.h:376: +1, including nesting penalty of 0, nesting level increased to 1

ck->rows();
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:385: +1, including nesting penalty of 0, nesting level increased to 1

et_data();
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:397: +2, including nesting penalty of 1, nesting level increased to 2

tched = -1;
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:399: +3, including nesting penalty of 2, nesting level increased to 3

ucket_size;
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:400: +4, including nesting penalty of 3, nesting level increased to 4

are_join) {
                            ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:403: +1, nesting level increased to 4

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:403: +5, including nesting penalty of 4, nesting level increased to 5

   } else {
                                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:406: +1, nesting level increased to 5

i] = false;
                                       ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:409: +1, nesting level increased to 5

_indexs[i];
                                       ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:415: +2, including nesting penalty of 1, nesting level increased to 2

}
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:419: +1, nesting level increased to 1

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:419: +2, including nesting penalty of 1, nesting level increased to 2

   } else {
                    ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:419: +3, including nesting penalty of 2, nesting level increased to 3

   } else {
                    ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:426: +1, including nesting penalty of 0, nesting level increased to 1

er.data();
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:430: +2, including nesting penalty of 1, nesting level increased to 2

ll = false;
                        ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:430: +3, including nesting penalty of 2, nesting level increased to 3

ll = false;
                        ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:436: +2, including nesting penalty of 1, nesting level increased to 2

ter.data();
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:455: +1

_has_null =
                                                                       ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:456: +1, including nesting penalty of 0, nesting level increased to 1

_conjuncts;
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:458: +2, including nesting penalty of 1, nesting level increased to 2

_indexs[i];
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:460: +3, including nesting penalty of 2, nesting level increased to 3

_indexs[i];
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:462: +1

[i] = true;
                                                                   ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:466: +1, nesting level increased to 2

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:466: +3, including nesting penalty of 2, nesting level increased to 3

   } else {
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:469: +1, nesting level increased to 3

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:469: +4, including nesting penalty of 3, nesting level increased to 4

   } else {
                            ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:469: +1

   } else {
                                                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:477: +1, including nesting penalty of 0, nesting level increased to 1

   }
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:479: +2, including nesting penalty of 1, nesting level increased to 2

mark column
                    ^

template <bool with_other_conjuncts>
Status ProcessHashTableProbe<JoinOpType, Parent>::do_mark_join_conjuncts(
Block* output_block, size_t hash_table_bucket_size) {
Status ProcessHashTableProbe<JoinOpType>::do_mark_join_conjuncts(Block* output_block,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function 'do_mark_join_conjuncts' exceeds recommended size/complexity thresholds [readability-function-size]

_conjuncts>
                                                      ^
Additional context

be/src/vec/exec/join/process_hash_table_probe_impl.h:363: 123 lines including whitespace and comments (threshold 80)

_conjuncts>
                                                      ^

Status ProcessHashTableProbe<JoinOpType, Parent>::do_other_join_conjuncts(
Block* output_block, std::vector<uint8_t>& visited, bool has_null_in_build_side) {
template <int JoinOpType>
Status ProcessHashTableProbe<JoinOpType>::do_other_join_conjuncts(Block* output_block,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function 'do_other_join_conjuncts' has cognitive complexity of 61 (threshold 50) [readability-function-cognitive-complexity]

JoinOpType>
                                                      ^
Additional context

be/src/vec/exec/join/process_hash_table_probe_impl.h:495: +1, including nesting penalty of 0, nesting level increased to 1

ck->rows();
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:504: +1, including nesting penalty of 0, nesting level increased to 1

ll = false;
                    ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:504: +2, including nesting penalty of 1, nesting level increased to 2

ll = false;
                    ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:519: +1, including nesting penalty of 0, nesting level increased to 1

  .data();
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:526: +2, including nesting penalty of 1, nesting level increased to 2

re are any.
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:530: +3, including nesting penalty of 2, nesting level increased to 3

mn_ptr[i];
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:533: +1, nesting level increased to 3

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:535: +3, including nesting penalty of 2, nesting level increased to 3

          }
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:540: +2, including nesting penalty of 1, nesting level increased to 2

                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:541: +3, including nesting penalty of 2, nesting level increased to 3

unt; ++i) {
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:544: +4, including nesting penalty of 3, nesting level increased to 4

mn_ptr[i]);
                            ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:550: +1, nesting level increased to 1

er_column);
                       ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:556: +2, including nesting penalty of 1, nesting level increased to 2

().data();
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:559: +3, including nesting penalty of 2, nesting level increased to 3

indexs[i];
                        ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:560: +4, including nesting penalty of 3, nesting level increased to 4

EMI_JOIN) {
                            ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:562: +1, nesting level increased to 4

i] = false;
                                   ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:566: +1, nesting level increased to 4

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:569: +1, nesting level increased to 3

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:569: +4, including nesting penalty of 3, nesting level increased to 4

   } else {
                            ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:572: +1, nesting level increased to 4

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:573: +5, including nesting penalty of 4, nesting level increased to 5

i] = false;
                                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:581: +1, nesting level increased to 1

er_column);
                       ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:583: +2, including nesting penalty of 1, nesting level increased to 2

NTI_JOIN) {
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:586: +1, nesting level increased to 1

;
                       ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:588: +2, including nesting penalty of 1, nesting level increased to 2

r_size = 0;
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:595: +1, including nesting penalty of 0, nesting level increased to 1

 0);
                ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:599: +1, nesting level increased to 1

   } else {
     ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:599: +2, including nesting penalty of 1, nesting level increased to 2

   } else {
                    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:604: +2, including nesting penalty of 1, nesting level increased to 2

;
                    ^

be/src/common/status.h:614: expanded from macro 'RETURN_IF_ERROR'

    do {                                \
    ^

be/src/vec/exec/join/process_hash_table_probe_impl.h:604: +3, including nesting penalty of 2, nesting level increased to 3

;
                    ^

be/src/common/status.h:616: expanded from macro 'RETURN_IF_ERROR'

        if (UNLIKELY(!_status_.ok())) { \
        ^

Status ProcessHashTableProbe<JoinOpType, Parent>::do_other_join_conjuncts(
Block* output_block, std::vector<uint8_t>& visited, bool has_null_in_build_side) {
template <int JoinOpType>
Status ProcessHashTableProbe<JoinOpType>::do_other_join_conjuncts(Block* output_block,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function 'do_other_join_conjuncts' exceeds recommended size/complexity thresholds [readability-function-size]

JoinOpType>
                                                      ^
Additional context

be/src/vec/exec/join/process_hash_table_probe_impl.h:490: 116 lines including whitespace and comments (threshold 80)

JoinOpType>
                                                      ^

pipeline::OlapScanLocalState* local_state = (pipeline::OlapScanLocalState*)_local_state;
INCR_COUNTER(local_state);
}
pipeline::OlapScanLocalState* local_state = (pipeline::OlapScanLocalState*)_local_state;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: use auto when initializing with a cast to avoid duplicating the type name [modernize-use-auto]

Suggested change
pipeline::OlapScanLocalState* local_state = (pipeline::OlapScanLocalState*)_local_state;
auto* local_state = (pipeline::OlapScanLocalState*)_local_state;

@doris-robot

Copy link
Copy Markdown
TPC-H: Total hot run time: 40236 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 227bfc93518377c4d3bc20f00f67917fa7047b4e, data reload: false

------ Round 1 ----------------------------------
q1	17677	5142	4255	4255
q2	2040	196	195	195
q3	10637	1254	1219	1219
q4	10282	847	814	814
q5	7658	2703	2690	2690
q6	229	136	139	136
q7	961	606	610	606
q8	9591	2115	2082	2082
q9	9231	6634	6626	6626
q10	9137	3698	3696	3696
q11	447	258	244	244
q12	458	234	222	222
q13	17791	2986	2967	2967
q14	267	228	220	220
q15	513	472	473	472
q16	516	379	380	379
q17	962	697	736	697
q18	8189	7517	7374	7374
q19	3168	1509	1484	1484
q20	644	304	329	304
q21	4845	3216	3849	3216
q22	407	346	338	338
Total cold run time: 115650 ms
Total hot run time: 40236 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4460	4206	4214	4206
q2	369	266	258	258
q3	2938	2717	2721	2717
q4	1861	1640	1581	1581
q5	5227	5264	5309	5264
q6	216	124	126	124
q7	2122	1762	1712	1712
q8	3204	3296	3325	3296
q9	8278	8304	8274	8274
q10	3884	3680	3617	3617
q11	592	501	500	500
q12	768	622	591	591
q13	16349	2995	2985	2985
q14	298	249	265	249
q15	520	484	487	484
q16	488	408	420	408
q17	1781	1460	1465	1460
q18	7727	7712	7360	7360
q19	1713	1563	1606	1563
q20	2019	1791	1796	1791
q21	4930	4858	4804	4804
q22	602	537	558	537
Total cold run time: 70346 ms
Total hot run time: 53781 ms

@doris-robot

Copy link
Copy Markdown
TPC-DS: Total hot run time: 172575 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 227bfc93518377c4d3bc20f00f67917fa7047b4e, data reload: false

query1	922	385	378	378
query2	6463	2371	2447	2371
query3	6642	205	203	203
query4	19253	17493	17373	17373
query5	4183	454	446	446
query6	256	160	155	155
query7	4592	296	284	284
query8	327	287	283	283
query9	8486	2375	2380	2375
query10	462	303	291	291
query11	10656	9979	10007	9979
query12	136	86	89	86
query13	1664	363	353	353
query14	8892	6470	7615	6470
query15	242	192	191	191
query16	7895	266	271	266
query17	1817	533	521	521
query18	1999	264	270	264
query19	200	155	153	153
query20	92	83	86	83
query21	201	131	128	128
query22	4283	4075	4084	4075
query23	33590	33004	32961	32961
query24	11556	2842	2852	2842
query25	654	353	363	353
query26	1707	154	161	154
query27	3019	316	324	316
query28	7655	2062	2086	2062
query29	1053	601	590	590
query30	267	146	149	146
query31	950	733	724	724
query32	93	52	54	52
query33	764	288	287	287
query34	989	475	452	452
query35	738	601	597	597
query36	1104	895	894	894
query37	159	72	77	72
query38	2867	2777	2746	2746
query39	850	816	775	775
query40	286	128	124	124
query41	55	53	51	51
query42	119	94	100	94
query43	569	551	560	551
query44	1259	721	749	721
query45	199	166	166	166
query46	1068	717	713	713
query47	1856	1765	1794	1765
query48	366	297	296	296
query49	1198	402	401	401
query50	791	383	391	383
query51	6869	6788	6767	6767
query52	101	93	89	89
query53	351	282	282	282
query54	992	442	439	439
query55	78	71	73	71
query56	277	255	252	252
query57	1149	1042	1031	1031
query58	276	284	237	237
query59	3326	3099	3316	3099
query60	289	270	265	265
query61	95	93	88	88
query62	648	441	443	441
query63	315	285	294	285
query64	9945	2344	1814	1814
query65	3170	3095	3117	3095
query66	1409	334	338	334
query67	15495	15205	15107	15107
query68	4582	541	530	530
query69	466	309	311	309
query70	1166	1094	1126	1094
query71	407	296	288	288
query72	7248	5839	5699	5699
query73	735	325	321	321
query74	5996	5513	5449	5449
query75	3462	2658	2648	2648
query76	2872	955	897	897
query77	459	299	294	294
query78	10460	9681	9732	9681
query79	4008	515	507	507
query80	1979	481	478	478
query81	597	226	225	225
query82	952	105	100	100
query83	280	181	183	181
query84	288	91	91	91
query85	2092	438	307	307
query86	486	325	326	325
query87	3299	3078	3077	3077
query88	4865	2332	2331	2331
query89	519	404	385	385
query90	1845	189	183	183
query91	122	101	97	97
query92	63	49	49	49
query93	5050	525	499	499
query94	1274	186	188	186
query95	417	317	315	315
query96	595	269	259	259
query97	3188	3016	3019	3016
query98	247	221	207	207
query99	1341	844	835	835
Total cold run time: 281589 ms
Total hot run time: 172575 ms

@doris-robot

Copy link
Copy Markdown
ClickBench: Total hot run time: 30.73 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 227bfc93518377c4d3bc20f00f67917fa7047b4e, data reload: false

query1	0.04	0.03	0.03
query2	0.09	0.04	0.04
query3	0.23	0.06	0.05
query4	1.66	0.09	0.09
query5	0.51	0.46	0.51
query6	1.12	0.73	0.73
query7	0.02	0.02	0.02
query8	0.05	0.04	0.05
query9	0.55	0.49	0.50
query10	0.57	0.55	0.54
query11	0.16	0.11	0.12
query12	0.15	0.12	0.12
query13	0.60	0.59	0.60
query14	0.78	0.79	0.79
query15	0.82	0.80	0.81
query16	0.36	0.37	0.37
query17	1.05	1.03	1.05
query18	0.22	0.25	0.22
query19	1.89	1.75	1.77
query20	0.01	0.01	0.01
query21	15.85	0.66	0.66
query22	4.34	7.55	2.01
query23	18.28	1.34	1.19
query24	1.94	0.22	0.21
query25	0.15	0.10	0.08
query26	0.27	0.17	0.17
query27	0.09	0.08	0.08
query28	13.30	1.01	0.99
query29	13.24	3.28	3.29
query30	0.24	0.06	0.06
query31	2.86	0.39	0.40
query32	3.24	0.48	0.47
query33	2.91	2.92	2.90
query34	17.24	4.42	4.42
query35	4.47	4.47	4.47
query36	0.65	0.51	0.47
query37	0.17	0.16	0.15
query38	0.17	0.15	0.15
query39	0.04	0.03	0.04
query40	0.18	0.14	0.15
query41	0.10	0.04	0.04
query42	0.05	0.05	0.05
query43	0.04	0.04	0.04
Total cold run time: 110.7 s
Total hot run time: 30.73 s

@Gabriel39

Copy link
Copy Markdown
Contributor Author

run buildall

@HappenLee HappenLee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label Jun 4, 2024
@github-actions

github-actions Bot commented Jun 4, 2024

Copy link
Copy Markdown
Contributor

PR approved by at least one committer and no changes requested.

@github-actions

github-actions Bot commented Jun 4, 2024

Copy link
Copy Markdown
Contributor

PR approved by anyone and no changes requested.

@doris-robot

Copy link
Copy Markdown
TPC-H: Total hot run time: 40396 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 320a2dee517f79768d85d8b844863b539240aabf, data reload: false

------ Round 1 ----------------------------------
q1	17791	4487	4326	4326
q2	2030	200	207	200
q3	10499	1246	1107	1107
q4	10611	803	790	790
q5	7706	2719	2731	2719
q6	231	133	138	133
q7	972	613	609	609
q8	9444	2355	2154	2154
q9	9083	6635	6626	6626
q10	9374	3862	3682	3682
q11	468	244	240	240
q12	532	233	234	233
q13	18293	3004	2960	2960
q14	266	237	214	214
q15	540	481	482	481
q16	519	370	376	370
q17	971	731	810	731
q18	8069	7586	7412	7412
q19	4289	1419	1433	1419
q20	670	327	332	327
q21	4944	4018	3324	3324
q22	406	339	339	339
Total cold run time: 117708 ms
Total hot run time: 40396 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4439	4270	4291	4270
q2	373	276	285	276
q3	2988	2754	2731	2731
q4	1896	1571	1564	1564
q5	5257	5249	5273	5249
q6	219	124	128	124
q7	2118	1773	1736	1736
q8	3218	3374	3332	3332
q9	8349	8309	8376	8309
q10	3884	3644	3663	3644
q11	597	493	485	485
q12	774	573	620	573
q13	17482	2971	2982	2971
q14	304	261	250	250
q15	526	489	485	485
q16	468	417	411	411
q17	1776	1489	1477	1477
q18	7594	7534	7339	7339
q19	1680	1627	1635	1627
q20	1984	1768	1757	1757
q21	4828	4773	4706	4706
q22	611	544	517	517
Total cold run time: 71365 ms
Total hot run time: 53833 ms

@doris-robot

Copy link
Copy Markdown
TPC-DS: Total hot run time: 170587 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 320a2dee517f79768d85d8b844863b539240aabf, data reload: false

query1	930	386	367	367
query2	6451	2514	2374	2374
query3	6655	207	211	207
query4	22717	17235	17156	17156
query5	4174	444	454	444
query6	249	167	179	167
query7	4588	301	302	301
query8	328	287	286	286
query9	8502	2462	2449	2449
query10	446	302	279	279
query11	10721	10093	10118	10093
query12	137	89	87	87
query13	1645	361	367	361
query14	10167	7152	7513	7152
query15	229	190	191	190
query16	7795	292	283	283
query17	1693	576	512	512
query18	1910	263	265	263
query19	200	152	150	150
query20	93	83	85	83
query21	207	136	130	130
query22	4189	4062	4054	4054
query23	33793	33068	33046	33046
query24	12061	2845	2918	2845
query25	658	355	379	355
query26	1764	161	165	161
query27	2949	326	317	317
query28	7503	2108	2090	2090
query29	1126	624	603	603
query30	274	152	151	151
query31	970	755	752	752
query32	90	54	57	54
query33	765	281	283	281
query34	973	476	461	461
query35	764	620	601	601
query36	1090	951	928	928
query37	196	72	70	70
query38	2898	2724	2693	2693
query39	872	784	791	784
query40	291	125	128	125
query41	56	52	51	51
query42	114	97	97	97
query43	576	553	564	553
query44	1264	730	737	730
query45	207	176	165	165
query46	1086	752	722	722
query47	1864	1735	1743	1735
query48	368	307	298	298
query49	1185	398	415	398
query50	805	397	425	397
query51	6873	6841	6740	6740
query52	105	90	93	90
query53	356	289	283	283
query54	1013	447	443	443
query55	75	74	74	74
query56	291	250	269	250
query57	1148	1069	1058	1058
query58	256	264	246	246
query59	3594	3095	3164	3095
query60	301	279	276	276
query61	90	90	93	90
query62	645	452	459	452
query63	316	285	291	285
query64	9856	2213	1792	1792
query65	3157	3128	3111	3111
query66	1367	327	322	322
query67	15502	14983	14962	14962
query68	4600	537	536	536
query69	552	420	380	380
query70	1084	1069	1131	1069
query71	419	287	289	287
query72	7204	5448	2711	2711
query73	767	333	327	327
query74	5919	5540	5543	5540
query75	3525	2683	2649	2649
query76	2917	952	941	941
query77	637	291	298	291
query78	10167	9751	9750	9750
query79	2293	534	530	530
query80	1857	472	461	461
query81	559	226	225	225
query82	896	103	105	103
query83	301	176	176	176
query84	266	93	94	93
query85	1566	280	272	272
query86	479	290	322	290
query87	3269	3084	3058	3058
query88	4324	2485	2445	2445
query89	467	380	374	374
query90	1776	192	193	192
query91	139	109	111	109
query92	67	51	54	51
query93	1918	520	503	503
query94	1199	204	199	199
query95	416	399	321	321
query96	594	267	274	267
query97	3210	3009	2982	2982
query98	253	227	216	216
query99	1251	823	819	819
Total cold run time: 280424 ms
Total hot run time: 170587 ms

@doris-robot

Copy link
Copy Markdown
ClickBench: Total hot run time: 31.02 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 320a2dee517f79768d85d8b844863b539240aabf, data reload: false

query1	0.04	0.04	0.03
query2	0.08	0.03	0.04
query3	0.23	0.05	0.05
query4	1.66	0.08	0.08
query5	0.51	0.51	0.49
query6	1.14	0.73	0.72
query7	0.02	0.02	0.01
query8	0.04	0.04	0.05
query9	0.54	0.50	0.50
query10	0.54	0.55	0.54
query11	0.15	0.11	0.11
query12	0.15	0.12	0.12
query13	0.59	0.58	0.59
query14	0.78	0.77	0.78
query15	0.83	0.80	0.80
query16	0.35	0.34	0.38
query17	0.94	0.94	1.04
query18	0.20	0.25	0.23
query19	1.80	1.72	1.72
query20	0.02	0.01	0.02
query21	15.54	0.68	0.65
query22	4.06	7.40	2.44
query23	18.26	1.37	1.30
query24	1.66	0.28	0.25
query25	0.14	0.08	0.08
query26	0.27	0.18	0.18
query27	0.08	0.08	0.08
query28	13.31	1.01	0.99
query29	13.21	3.30	3.25
query30	0.24	0.06	0.07
query31	2.86	0.40	0.38
query32	3.26	0.48	0.47
query33	2.91	2.86	2.93
query34	17.04	4.40	4.39
query35	4.50	4.49	4.52
query36	0.65	0.46	0.45
query37	0.18	0.15	0.15
query38	0.16	0.15	0.15
query39	0.05	0.03	0.04
query40	0.17	0.13	0.14
query41	0.09	0.05	0.05
query42	0.06	0.05	0.05
query43	0.03	0.03	0.04
Total cold run time: 109.34 s
Total hot run time: 31.02 s

@doris-robot

Copy link
Copy Markdown

TeamCity be ut coverage result:
Function Coverage: 37.40% (9281/24817)
Line Coverage: 28.73% (76000/264571)
Region Coverage: 28.11% (39369/140061)
Branch Coverage: 24.53% (19918/81200)
Coverage Report: http://coverage.selectdb-in.cc/coverage/320a2dee517f79768d85d8b844863b539240aabf_320a2dee517f79768d85d8b844863b539240aabf/report/index.html

@Gabriel39
Gabriel39 merged commit b3e0b89 into apache:master Jun 4, 2024
seawinde pushed a commit to seawinde/doris that referenced this pull request Jun 5, 2024
HappenLee pushed a commit to HappenLee/incubator-doris that referenced this pull request Apr 24, 2026
morningman added a commit to morningman/doris that referenced this pull request Oct 28, 2026
### What problem does this PR solve?

Issue Number: None

Related PR: apache#69771

Problem Summary: The Spark and Flink Doris connectors read a table through
FE's _query_plan API and the BE Thrift scanner (open_scanner / get_next),
which drains the queue that MemoryScratchSink fills with Arrow batches.
When the fragment failed, the sink's close() still put the nullptr
sentinel and nothing recorded the failure: no code has called
ResultQueueMgr::update_queue_status since the non-pipeline engine was
removed (apache#35803), so RecordBatchQueue::status() stayed OK and get_next
reported eos. A scan error, a cancellation or, with this PR, a batch the
Arrow Flight convertor rejects (invalid UTF-8, a DATETIME before year 1)
ended the read normally with the rows fetched so far: a table with one
invalid UTF-8 row read zero rows and no error.

MemoryScratchSinkLocalState::close now records a failed exec_status in
the queue before the sentinel (update_status ignores OK), and
fetch_result checks the queue status again when it takes the sentinel,
because a fetch already waiting for data passed the first check before
the failure. get_next then returns the error, for example
"[INVALID_ARGUMENT]Invalid Arrow Flight result in column 2 (''): Invalid:
Invalid UTF8 sequence at string index 1".

### Release note

A failed read through the _query_plan scan API (Spark / Flink Doris
connectors) now returns the error instead of ending as a complete result.

### Check List (For Author)

- Test: Unit Test / Regression test
    - BE UT ResultQueueMgrTest: a fetch waiting for data reports a failure
      recorded before the sentinel; an OK status keeps a normal end.
    - Regression arrow_flight_sql_p0/test_query_plan_scan_validation reads
      _query_plan scans over the BE Thrift scanner: before this change the
      invalid UTF-8 scan read 0 rows and no error; with it, the UTF-8 and
      timestamp scans get the errors and a valid scan reads all rows.
- Behavior changed: Yes. Such scans fail instead of returning partial data.
- Does this need documentation: No

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
morningman added a commit that referenced this pull request Oct 29, 2026
…ht results (#69771)

### What problem does this PR solve?

Issue Number: None

Related PR: #68596, #68604

Problem Summary:

#### In short

This ports branch-4.x's #68596 and #68604 to master. An Arrow Flight
result can carry values that Arrow clients cannot decode: a `STRING`
value that is not valid UTF-8 (for example `unhex('84')`), and a
`DATETIME` outside 0001-01-01..9999-12-31 (Doris's own range starts at
`0000-01-01 00:00:00`). The Arrow writers accept both, so the BE
publishes the batch and the failure surfaces later in the client:
PyArrow rejects the string, and raises `OverflowError` when it converts
the timestamp. This PR checks every batch in the Flight convertor before
it is handed out and fails the query with a server-side error that names
the column, the nested path and the row. It also makes a failed
`_query_plan` scan of the Spark and Flink connectors report its error:
the BE used to end such a scan as a complete result, so a rejected batch
would have become silently missing rows.

#### Background

- `ArrowFlightArrowBlockConvertor`
(`be/src/format/arrow/arrow_block_convertor.h`) builds the Arrow batches
of an Arrow Flight result: `ArrowFlightBatchReader` uses it for Flight
SQL and ADBC clients, which also covers a remote Doris catalog with
`use_arrow_flight = true`, and the memory scratch sink uses it for the
`_query_plan` scan API of the Spark and Flink Doris connectors.
- The STRING serde appends the bytes of each value to an Arrow `utf8`
(or `large_utf8`) builder without looking at them. Arrow requires these
values to be valid UTF-8, but only `Array::ValidateFull()` checks it;
building and publishing the array does not.
- The memory scratch sink queues the batches that `get_next` of the BE
Thrift scanner hands to those connectors, and ends the queue with a
`nullptr` sentinel. Its `close()` put the sentinel whatever the
execution status, and nothing has recorded a status in the queue since
the non-pipeline engine was removed (#35803), so a fragment that failed
(a scan error, a cancellation) ended the scan as if it were complete.
- `DATETIME(p)` is published as `timestamp[s]`, `timestamp[ms]` or
`timestamp[us]` by its scale. Arrow accepts any `int64` there, so a
year-0 value such as `0000-12-31 00:00:00` (`-62135683200000000` us) is
published as it is, while Python's `datetime`, which PyArrow converts
to, only covers years 1..9999.

#### The problem, and what it cost

| Result value | Before this PR |
|---|---|
| `unhex('84')`, `unhex('C0AF')`, a surrogate or a code point above
U+10FFFF, also inside an ARRAY / STRUCT / MAP key or value | Published
as is; the client fails decoding the batch, after earlier batches were
already delivered |
| Two rows `unhex('C2')` and `unhex('A2')` | Published; each row is
invalid UTF-8 on its own, though the concatenated buffer is valid |
| `CAST('0000-12-31 00:00:00' AS DATETIME(6))`, or a zero date read from
a table or an INT96 Parquet file | Published as `-62135683200000000`;
PyArrow raises `OverflowError` converting it |
| A `_query_plan` scan (Spark / Flink connector) whose fragment fails |
`get_next` reports the end of the scan after the rows fetched so far;
with the validation below, a table with one invalid UTF-8 row would read
zero rows and no error |

The query looks successful on the server, so neither the error nor the
offending column shows up in Doris; the Flight client gets a failure
that does not say which value caused it.

#### How this PR fixes it

- `ArrowBlockConvertor::convert_to_arrow` becomes virtual, and
`ArrowFlightArrowBlockConvertor` overrides it: after the base
conversion, it runs `ValidateFull()` on every column and returns
`InvalidArgument("Invalid Arrow Flight result in column <n> ('<name>'):
...")` on failure. `ValidateFull()` checks each value, nested children
included, so the row boundaries of the `C2` / `A2` case are respected.
Binary columns keep their bytes; NULL values are skipped through the
validity bitmap.
- A new `FlightTimestampValidator` walks each column recursively (list
values, map keys and values, struct fields), reads the actual timestamp
unit, and checks each value against 0001-01-01..9999-12-31, also against
the local calendar when the Arrow type has a time zone. Values under a
NULL list / map / struct parent are not observable and are not checked.
A value outside the range returns `InvalidArgument("Arrow Flight
timestamp in column '<path>' at row <n> is outside the supported
0001-9999 range (type: ...)")`, with the row counted in the block.
- For a timestamp with a time zone, the local bounds are computed with
the exact offsets (cctz, Python's zoneinfo) and with the minute-rounded
offsets of pytz, which PyArrow uses for zone names when it is installed
(`(offset + 30) // 60 * 60`), and the stricter bound wins. pytz turns
America/Chicago's local mean time -05:50:36 into -05:51, so 0001-01-01
05:50:36Z, local 00:00:00 for cctz, would be 0000-12-31 23:59:36 in
PyArrow; the lower bound there is 05:51:00Z. In such zones up to 30
seconds at the start of year 1 are rejected.
- `MemoryScratchSinkLocalState::close` records a failed execution status
in the result queue before it puts the sentinel, and
`ResultQueueMgr::fetch_result` checks the queue status again when it
takes the sentinel, because a fetch already waiting for data passed the
first check before the failure. `get_next` then returns the error to the
connector.
- Of the Arrow convertors, only the Flight convertor changes. The
ordinary Doris Arrow convertor (Python UDFs) and the table-format
convertors (Parquet, Iceberg, Paimon writers) keep their current
behavior; `DorisArrowBlockConvertor` still publishes the same values in
the new tests.
- The code is branch-4.2's final form of the two PRs; master's Flight
convertor already overrides `init()` and `write_column()`, and the new
override sits next to them.

#### Results

| Query over Arrow Flight | Before | After |
|---|---|---|
| `SELECT unhex(encoded) AS payload` with an invalid UTF-8 row | Batch
published, client fails decoding | Query fails: `Invalid Arrow Flight
result in column 1 ('payload'): Invalid: Invalid UTF8 sequence at string
index 0` |
| `SELECT array(unhex(encoded)) AS nested` ... | Batch published | `...
('nested'): Invalid: List child array invalid: Invalid: Invalid UTF8
sequence at string index 0` |
| `SELECT CAST(value AS DATETIME(6)) AS event_time` over `0000-12-31
00:00:00` | Batch published, client fails converting | Query fails:
`Arrow Flight timestamp in column 'event_time' at row 1 is outside the
supported 0001-9999 range (type: timestamp[us])`; nested values report
paths such as `nested[]`, `nested.key`, `nested.child` |
| Remote Doris catalog over Flight reading a `0000-01-01 00:00:00`
DATETIME | Value returned | `Arrow Flight timestamp in column
'datetime_0' at row 1 is outside the supported 0001-9999 range (type:
timestamp[s])` |
| `_query_plan` scan through `open_scanner` / `get_next` over a table
with an invalid UTF-8 row | 0 rows, then the end of the scan |
`get_next` returns `[INVALID_ARGUMENT]Invalid Arrow Flight result in
column 2 (''): Invalid: Invalid UTF8 sequence at string index 1` |
| The same scan over a `0000-12-31 00:00:00` DATETIME | 0 rows, then the
end of the scan | `Arrow Flight timestamp in column '' at row 2 is
outside the supported 0001-9999 range (type: timestamp[us])` |
| Valid Unicode text, NULLs, binary bytes, `0001-01-01`, `9999-12-31
23:59:59.999999` | Returned | Returned unchanged |

Behavior change: a Flight query (Flight SQL, ADBC, a remote Doris
catalog with `use_arrow_flight = true`, or a `_query_plan` read of the
Spark / Flink connector) whose result contains a `STRING` value that is
not valid UTF-8, or a `DATETIME` outside years 0001..9999, now fails
with the error above instead of returning data. A remote Doris catalog
that used to round-trip the zero date now reports this error; the three
remote Doris suites that inserted `0000-01-01 00:00:00` as their minimum
value now use `0001-01-01 00:00:00`, and
`test_remote_doris_all_types_select` asserts the zero-date error
separately. A `_query_plan` read whose fragment fails for any reason,
also a scan error or a cancellation, now gets the error from `get_next`
instead of ending as a complete result.

Tests:

- BE UT `ArrowBlockConvertorTest`: six new cases for invalid UTF-8 (four
malformed encodings, per-row boundaries across a slice and the next
batch, nested array / struct / map key / map value, large strings, bytes
under a NULL), and valid text, NULLs and binary.
- BE UT `ArrowFlightTimestampTest` (new file): zero date, year 0 and
year 10000 at scales 0 / 3 / 6, calendar boundaries and pre-epoch
fractions, slices and later batches, nested values and map keys, UTC and
zoned bounds, the America/Chicago lower bound with pytz's rounded
offset, naive bounds that do not depend on the session time zone, and
values under NULL parents; the ordinary Doris convertor still publishes
the same values.
- BE UT `ResultQueueMgrTest`: a fetch already waiting for data reports a
failure recorded before the sentinel; an OK status keeps a normal end.
- Regression `arrow_flight_sql_p0/test_query_plan_scan_validation` reads
`_query_plan` scans the way the connectors do (FE `_query_plan`, then BE
`open_scanner` / `get_next` over Thrift): a valid scan reads all rows,
and the invalid UTF-8 and year-0 scans get the errors above.
- Regression `arrow_flight_sql_p0/test_flight_utf8_validation`,
`test_flight_timestamp_range` (both red before this PR on master, green
with it), `test_flight_int96_timestamp_range` (reads the INT96 fixtures
of `group4` over HDFS; needs the Hive docker environment), and the three
remote Doris suites.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. dev/3.0.0-merged reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants