Skip to content

[fix](be) Fix DataSketches HLL union accuracy and add configurable lg… - #67469

Open
nooneuse wants to merge 2 commits into
apache:masterfrom
nooneuse:fix_hll_sketch_accuracy
Open

[fix](be) Fix DataSketches HLL union accuracy and add configurable lg…#67469
nooneuse wants to merge 2 commits into
apache:masterfrom
nooneuse:fix_hll_sketch_accuracy

Conversation

@nooneuse

@nooneuse nooneuse commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Problem Summary:

DATASKETCHES_HLL_UNION_AGG merges serialized Apache DataSketches HLL sketches. Doris previously pinned datasketches-cpp 5.2.0, which contains a regression introduced by the lazy KxQ/curMin rebuild optimization.

When an HLL-mode sketch was downsampled during a union, the register array was updated while the cached estimator state remained pending rebuild. Some subsequent operations did not honor that pending state. Depending on the merge order, the union could therefore:

  • Treat a populated union as empty and replace previously accumulated data.
  • Apply incremental updates against stale estimator state and return an incorrect estimate.
  • Produce different serialized bytes for equivalent merge sequences.

Doris also initialized the union limit from the first serialized sketch, including empty or sparse sketches whose configured lgK should not necessarily constrain the effective precision of later inputs. In a parallel aggregation, the first sketch is not deterministic, so the effective precision and memory usage could depend on input and partial-state merge order.

This PR updates the datasketches-cpp submodule from the 5.2.0 commit (de8553ba) to upstream commit 46025e9. The upstream fix rebuilds the deferred KxQ/curMin state before operations that require it and makes union estimates and serialization independent of the affected merge order.

On the Doris side, empty sketches no longer initialize the union, and deserialized intermediate states restore the union from the serialized sketch's own effective lgK. This prevents empty inputs and the aggregate transport path from imposing an additional precision reduction.

Release note

Fixed incorrect and merge-order-dependent results in DATASKETCHES_HLL_UNION_AGG for affected mixed-lgK HLL sketches. Added an optional constant lg_max_k argument so users can explicitly control the precision and memory upper bound of the union.

Accuracy Control

The function now supports both forms:

DATASKETCHES_HLL_UNION_AGG(sketch)
DATASKETCHES_HLL_UNION_AGG(sketch, lg_max_k)

The one-argument form has no lg_max_k SQL argument. Internally, it initializes the union with the maximum supported limit, DEFAULT_UNION_LOG_K = 21, so it does not downsample an input solely because of an additional Doris-side default cap.

The two-argument form accepts a constant integer in the inclusive range [7, 21]:

SELECT DATASKETCHES_HLL_UNION_AGG(sketch_column, 16)
FROM sketch_table;

The same optional argument is supported by the aliases:

DS_HLL_ESTIMATE(sketch_column, 16)
DATASKETCHES_HLL_ESTIMATE(sketch_column, 16)

The parameter is validated by both FE and BE. Non-constant, non-integral, null, or out-of-range values are rejected.

Important Behavior and Upgrade Notes

  • lg_max_k is a strict upper bound, not a requested final precision. A dense input sketch with a smaller lgK can reduce the union's effective lgK, because a lower-precision dense sketch cannot be upsampled to recover information that is no longer present.
  • The one-argument form uses an internal upper limit of 21. Its effective lgK can still decrease after consuming a lower-precision dense sketch because that lost information cannot be recovered.
  • Sparse LIST/SET sketches are merged as coupons and do not immediately allocate a dense HLL array. The configured limit takes effect if the union later transitions to HLL mode or consumes a dense sketch.
  • The dense union gadget uses HLL_8 storage and requires approximately 2^lg_max_k bytes per aggregate state, excluding object and allocator overhead. A dense state at lgK=12 is approximately 4 KiB, while a dense state at lgK=21 is approximately 2 MiB. The one-argument form does not always allocate 2 MiB: an existing dense input with a lower lgK reduces the effective state size. Grouped aggregation can hold many states concurrently, so use the two-argument form when a lower memory upper bound is required.
  • Updating the submodule from 5.2.0 to 46025e9 includes 129 upstream commits because no newer DataSketches C++ release contains the required fix. The dependency remains pinned to the exact reviewed commit rather than following the upstream branch.
  • Existing one-argument queries remain valid and can consume partial states produced by older BEs without introducing a new precision cap.
  • As with the one-argument form, DISTINCT is ignored by the two-argument form; adding lg_max_k does not opt the function into multi-column DISTINCT aggregation.
  • The two-argument form is supported only after all BEs in the cluster have been upgraded to a version containing this change. During a rolling upgrade, continue using the one-argument form because older BEs do not recognize the new function signature.

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes. See "Important Behavior and Upgrade Notes"
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

@hello-stephen

Copy link
Copy Markdown
Contributor

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

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@nooneuse

nooneuse commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@freemandealer

Copy link
Copy Markdown
Member

/review

@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.

Summary

REQUEST_CHANGES for three independently verified correctness issues in the FE DISTINCT/planner path and BE aggregate-state compatibility path. The reviewed head is b62a64ce57e396e52abba0552121addc4c1c720c.

Checkpoints

  • Goal and tests: the PR addresses DataSketches HLL merge accuracy and adds configurable lg_max_k; the added tests cover empty, sparse, dense, mixed-lgK, aliases, invalid values, nullable input, and serialization, but do not cover the three cases called out inline.
  • Scope: the change is focused on one aggregate, its pinned DataSketches dependency, FE signatures, and tests.
  • Concurrency and lifecycle: aggregate state is execution-local; reset and allocator ownership follow existing patterns, and no new shared lock or thread lifecycle was found.
  • Compatibility: the compact HLL bytes remain compatible with the inspected upstream commit, but old/new runtime partial-state semantics do not preserve the documented default cap (HLL-R4-1).
  • Parallel paths and nullability: ordinary, grouped, window, nullable-wrapper, storage-reader, and aggregate transport paths were traced; constants are materialized before row-wise BE access and no separate physical-column defect was found.
  • FE/BE contract: the new two-argument signature and BE arity/type checks align for ordinary plans, but FE DISTINCT legality and DISTINCT-key grouping need fixes.
  • Error handling and performance: malformed sketches and [7,21] bounds fail explicitly; the unresolved legacy cap can cause roughly 2 MiB states at lgK=21 instead of the documented default.
  • User focus: review_focus.txt says no additional focus; the full PR was reviewed.

No builds or tests were run by this reviewer, per the review-runner constraint; this is a static, source-and-call-graph review. Existing inline review threads/comments were empty at submission time.

@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.

Summary

REQUEST_CHANGES for three independently verified correctness issues in the FE DISTINCT/planner path and BE aggregate-state compatibility path. The reviewed head is b62a64ce57e396e52abba0552121addc4c1c720c.

Checkpoints

  • Goal and tests: the PR addresses DataSketches HLL merge accuracy and adds configurable lg_max_k; the added tests cover empty, sparse, dense, mixed-lgK, aliases, invalid values, nullable input, and serialization, but do not cover the three cases called out inline.
  • Scope: the change is focused on one aggregate, its pinned DataSketches dependency, FE signatures, and tests.
  • Concurrency and lifecycle: aggregate state is execution-local; reset and allocator ownership follow existing patterns, and no new shared lock or thread lifecycle was found.
  • Compatibility: the compact HLL bytes remain compatible with the inspected upstream commit, but old/new runtime partial-state semantics do not preserve the documented default cap (HLL-R4-1).
  • Parallel paths and nullability: ordinary, grouped, window, nullable-wrapper, storage-reader, and aggregate transport paths were traced; constants are materialized before row-wise BE access and no separate physical-column defect was found.
  • FE/BE contract: the new two-argument signature and BE arity/type checks align for ordinary plans, but FE DISTINCT legality and DISTINCT-key grouping need fixes.
  • Error handling and performance: malformed sketches and [7,21] bounds fail explicitly; the unresolved legacy cap can cause roughly 2 MiB states at lgK=21 instead of the documented default.
  • User focus: review_focus.txt says no additional focus; the full PR was reviewed.

No builds or tests were run by this reviewer, per the review-runner constraint; this is a static, source-and-call-graph review. Existing inline review threads/comments were empty at submission time.

@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.

Summary

REQUEST_CHANGES for three independently verified correctness issues in the FE DISTINCT/planner path and BE aggregate-state compatibility path. The reviewed head is b62a64ce57e396e52abba0552121addc4c1c720c.

Checkpoints

  • Goal and tests: the PR addresses DataSketches HLL merge accuracy and adds configurable lg_max_k; the added tests cover empty, sparse, dense, mixed-lgK, aliases, invalid values, nullable input, and serialization, but do not cover the three cases called out inline.
  • Scope: the change is focused on one aggregate, its pinned DataSketches dependency, FE signatures, and tests.
  • Concurrency and lifecycle: aggregate state is execution-local; reset and allocator ownership follow existing patterns, and no new shared lock or thread lifecycle was found.
  • Compatibility: the compact HLL bytes remain compatible with the inspected upstream commit, but old/new runtime partial-state semantics do not preserve the documented default cap (HLL-R4-1).
  • Parallel paths and nullability: ordinary, grouped, window, nullable-wrapper, storage-reader, and aggregate transport paths were traced; constants are materialized before row-wise BE access and no separate physical-column defect was found.
  • FE/BE contract: the new two-argument signature and BE arity/type checks align for ordinary plans, but FE DISTINCT legality and DISTINCT-key grouping need fixes.
  • Error handling and performance: malformed sketches and [7,21] bounds fail explicitly; the unresolved legacy cap can cause roughly 2 MiB states at lgK=21 instead of the documented default.
  • User focus: review_focus.txt says no additional focus; the full PR was reviewed.

No builds or tests were run by this reviewer, per the review-runner constraint; this is a static, source-and-call-graph review. Existing inline review threads/comments were empty at submission time.

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 56.00% (14/25) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

BE UT Coverage Report

Increment line coverage 92.86% (26/28) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 62.95% (29575/46982)
Line Coverage 48.00% (310159/646193)
Region Coverage 43.61% (250602/574704)
Branch Coverage 45.11% (116554/258384)

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100.00% (28/28) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.22% (34683/45504)
Line Coverage 61.30% (391613/638818)
Region Coverage 57.53% (329338/572512)
Branch Coverage 58.33% (150278/257645)

@nooneuse

nooneuse commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@freemandealer

Copy link
Copy Markdown
Member

/review

@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.

Requesting changes for three distinct aggregate-state gaps on exact head e629d36bc73369298de19527a1dd3f78bca2814e.

Findings:

  • A valid two-argument state cannot be consumed by _merge or _union after it becomes a typed slot, including normal reads of a stored GENERIC AGG_STATE column.
  • Two-argument state values made with different caps have the same state type, and sparse state merging chooses the eventual precision/memory bound by merge order; tablet aggregation/compaction reaches this path independently of the FE binding failure.
  • The generated _state form skips the nested aggregate's post-rewrite range check, so invalid bounds are not consistently rejected by FE and can succeed on empty/all-null inputs.

Critical checkpoint conclusions:

  • Goal and algorithm: the exact upstream lazy-KxQ/curMin repair covers the direct emptiness, incremental-update, result-copy, estimate, and serialization paths. Homogeneous direct/exchange/spill aggregation with one common explicit cap is consistent. The blocking defects are in the automatically exposed aggregate-state paths around the new parameter.
  • User focus: review_focus.txt contains no additional user-provided focus; the full PR was reviewed.
  • Concurrency and parallel paths: no separate race was found. Exchange/spill paths preserve a common cap, but state-slot reconstruction and stored-state tablet aggregation expose the findings above.
  • Lifecycle and resources: empty-state skipping, optional-union reset/destruction, and allocator ownership exposed no separate defect. The documented dense lgK=21 memory cost is intentional; merge-order-dependent selection of that cost is covered by the second finding.
  • Configuration and compatibility: aliases, constant coercion, ignored DISTINCT, grouping/ROLLUP, the one-argument max-21 policy, and the post-upgrade-only two-argument rollout were checked. The existing one-argument rolling-upgrade concern was not duplicated.
  • Conditions and validation: ordinary aggregate bounds/type checks are present, but the generated _state wrapper omits the post-rewrite bound check.
  • Persistence and protocol: AggStateType carries argument types rather than constant values, and the serialized state carries the effective sketch rather than a separate configured-cap identity; this makes valid state binding fail and mixed-cap state aggregation order-dependent.
  • Tests and results: the added BE/FE/regression tests cover direct calls, aliases, ordinary invalid arguments, sparse/dense merge behavior, and the upstream regression, but not _state/_union/_merge, typed-slot round trips, or mixed-cap stored states. Per the review-runner instructions, no builds or tests were executed here; at submission preparation time BE UT, FE UT, compile, performance, and code-review checks were still pending.
  • Observability and other risks: exception translation and corrupt-input reporting remain visible; no distinct logging, data-write, ABI/build-topology, or unrelated performance issue survived the final sweep.

+ " function's argument should be of STRING/VARCHAR/VARBINARY type, but was " + inputType);
}
if (arity() == 2
&& (!getArgument(1).isConstant() || !getArgumentType(1).isIntegralType())) {

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.

[P1] Preserve the precision parameter when binding state consumers

A valid two-argument state becomes unusable as soon as it is materialized. For example, in SELECT datasketches_hll_union_agg_merge(s) FROM (SELECT datasketches_hll_union_agg_state(sk, 8) AS s FROM t) q, the outer s is an AggStateType slot. AggCombinerFunctionBuilder.buildMergeOrUnion() then reconstructs both nested arguments with DataTypeUtils.getMockedExpressions(), so the INT parameter is a nonconstant SlotReference; MergeCombinator/UnionCombinator delegate legality to that reconstructed function and this branch rejects it. A stored GENERIC AGG_STATE scan also automatically builds the same _union consumer in BindRelation. Only the direct AST shortcut _merge(_state(sk, 8)) retains the literal. Please preserve the required constant identity when reconstructing state consumers, or explicitly exclude this overload from combinators, and add subquery/stored-column round trips for the canonical name and aliases.

}
hll_union_data.reset();
void merge(const Sketch& sketch_data) {
merge(sketch_data, std::max<uint8_t>(sketch_data.get_lg_config_k(), MIN_UNION_LOG_K));

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.

[P1] Make two-argument aggregate-state caps deterministic

datasketches_hll_union_agg_state(sk, 7) and _state(sk, 21) have the same aggregate-state type because it records argument types, not the constant value. Stored-state tablet aggregation/compaction reconstructs the two-argument nested BE function from those types and reaches this no-configuration merge directly. With two sparse states, this overload initializes from whichever serialized sketch arrives first; upstream LIST/SET handling replays later coupons into that existing gadget without lowering its lgK. Consequently cap-21 then cap-7 remains 21, while the reverse remains 7, producing different serialized state and later different dense memory/precision. This is distinct from the existing one-argument rolling-upgrade thread: it is an all-new two-argument state contract. Please define a deterministic rule such as rejecting mismatched caps or merging at the minimum effective bound, and cover cap-7/cap-21 state aggregation in both orders.

throw new AnalysisException(getName() + " requires lg_max_k to be a constant integer: " + this.toSql());
}
long value = ((IntegerLikeLiteral) lgMaxK).getLongValue();
if (value < MIN_LG_MAX_K || value > MAX_LG_MAX_K) {

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.

[P2] Run the range check for the generated _state form

StateCombinator delegates only checkLegalityBeforeTypeCoercion() to its nested aggregate. The nested function is a field rather than an expression child, and the wrapper has no checkLegalityAfterRewrite() override, so this bound check is never reached for datasketches_hll_union_agg_state(sk, 6) or (..., 22) (including aliases). BE rejects the value only when add() sees a non-null row; an empty or all-null input can therefore succeed and produce an empty state despite the promised FE validation. Please forward a combinator-aware post-rewrite check and add _state negative tests for both bounds and aliases.

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 64.00% (16/25) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

BE UT Coverage Report

Increment line coverage 92.86% (26/28) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 63.02% (29553/46894)
Line Coverage 48.07% (309902/644727)
Region Coverage 43.66% (250438/573607)
Branch Coverage 45.24% (116530/257563)

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17603	3102	3082	3082
q2	2116	255	223	223
q3	10247	868	513	513
q4	4668	253	209	209
q5	7666	571	382	382
q6	134	115	94	94
q7	526	524	387	387
q8	9248	900	848	848
q9	3463	2350	2363	2350
q10	6560	871	707	707
q11	437	200	183	183
q12	616	261	202	202
q13	18121	1533	1169	1169
q14	160	149	139	139
q15	q16	442	400	364	364
q17	1333	922	781	781
q18	3100	2243	2226	2226
q19	1295	919	778	778
q20	385	290	205	205
q21	5561	1684	1863	1684
q22	321	270	232	232
Total cold run time: 94002 ms
Total hot run time: 16758 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3437	3419	3364	3364
q2	521	400	381	381
q3	2165	2320	2122	2122
q4	1233	1199	899	899
q5	2194	2134	2077	2077
q6	166	118	87	87
q7	1008	929	876	876
q8	1605	1425	1427	1425
q9	3165	3137	3155	3137
q10	1871	1779	1616	1616
q11	368	280	261	261
q12	450	433	345	345
q13	1493	1545	1153	1153
q14	169	174	157	157
q15	q16	398	407	364	364
q17	3587	3283	3168	3168
q18	4791	4393	4664	4393
q19	894	903	860	860
q20	995	967	841	841
q21	3886	3239	3250	3239
q22	394	347	330	330
Total cold run time: 34790 ms
Total hot run time: 31095 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 81480 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 e629d36bc73369298de19527a1dd3f78bca2814e, data reload: false

query5	4243	405	334	334
query6	404	133	123	123
query7	4951	404	230	230
query8	288	123	117	117
query9	8683	2896	2887	2887
query10	404	223	177	177
query11	5366	1027	914	914
query12	121	78	71	71
query13	1193	450	338	338
query14	6062	2198	2072	2072
query14_1	1968	1962	1976	1962
query15	181	119	109	109
query16	926	382	346	346
query17	809	467	391	391
query18	2347	329	240	240
query19	164	135	111	111
query20	76	70	76	70
query21	214	102	91	91
query22	5329	5337	5216	5216
query23	6703	6194	5828	5828
query23_1	5959	5897	6072	5897
query24	7260	1098	755	755
query24_1	792	793	788	788
query25	438	321	235	235
query26	1230	228	121	121
query27	2800	431	255	255
query28	4657	1519	1487	1487
query29	926	421	330	330
query30	251	147	127	127
query31	826	391	327	327
query32	150	85	73	73
query33	441	214	173	173
query34	975	853	469	469
query35	400	400	336	336
query36	554	586	524	524
query37	130	79	67	67
query38	1002	842	817	817
query39	482	463	457	457
query39_1	458	460	457	457
query40	204	86	74	74
query41	54	50	50	50
query42	73	70	75	70
query43	245	239	211	211
query44	1038	547	551	547
query45	107	103	100	100
query46	791	833	520	520
query47	748	759	708	708
query48	296	304	230	230
query49	544	230	191	191
query50	785	266	202	202
query51	8271	8192	7965	7965
query52	65	65	58	58
query53	193	198	148	148
query54	228	181	168	168
query55	72	58	54	54
query56	186	182	153	153
query57	674	660	655	655
query58	217	187	219	187
query59	1234	1232	1141	1141
query60	235	176	164	164
query61	129	135	110	110
query62	376	207	178	178
query63	171	141	145	141
query64	2722	787	686	686
query65	1656	1593	1668	1593
query66	1904	267	220	220
query67	9636	9900	9616	9616
query68	2760	1198	756	756
query69	333	216	196	196
query70	670	609	618	609
query71	239	180	175	175
query72	2310	1776	1530	1530
query73	637	602	341	341
query74	1571	1208	1121	1121
query75	1180	1100	942	942
query76	2286	733	534	534
query77	240	254	211	211
query78	3894	3664	3194	3194
query79	2351	820	582	582
query80	1543	320	293	293
query81	494	154	134	134
query82	1041	121	96	96
query83	274	203	194	194
query84	295	110	95	95
query85	801	357	310	310
query86	399	180	170	170
query87	1007	963	889	889
query88	2772	2147	2106	2106
query89	290	195	176	176
query90	1982	127	125	125
query91	134	120	100	100
query92	80	69	69	69
query93	1453	1067	697	697
query94	688	279	225	225
query95	517	257	229	229
query96	808	558	271	271
query97	1036	1054	1034	1034
query98	158	136	133	133
query99	434	347	320	320
Total cold run time: 177111 ms
Total hot run time: 81480 ms

@hello-stephen

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

query1	0.00	0.00	0.01
query2	0.07	0.04	0.04
query3	0.26	0.11	0.11
query4	1.60	0.10	0.10
query5	0.18	0.16	0.16
query6	1.26	0.70	0.69
query7	0.03	0.01	0.01
query8	0.04	0.03	0.03
query9	0.29	0.21	0.22
query10	0.38	0.34	0.38
query11	0.16	0.12	0.11
query12	0.14	0.12	0.12
query13	0.30	0.32	0.32
query14	0.43	0.44	0.46
query15	0.35	0.36	0.35
query16	0.23	0.22	0.23
query17	0.68	0.67	0.68
query18	0.18	0.18	0.17
query19	1.26	1.12	1.13
query20	0.01	0.00	0.00
query21	15.44	0.15	0.12
query22	5.06	0.04	0.04
query23	16.20	0.25	0.10
query24	3.03	0.34	0.25
query25	0.10	0.04	0.04
query26	0.74	0.16	0.12
query27	0.03	0.03	0.04
query28	3.61	0.59	0.26
query29	12.46	3.21	2.55
query30	0.27	0.11	0.12
query31	2.76	0.38	0.17
query32	3.51	0.32	0.23
query33	1.37	1.47	1.46
query34	15.36	2.21	1.76
query35	1.73	1.75	1.72
query36	0.46	0.30	0.29
query37	0.06	0.04	0.04
query38	0.05	0.03	0.03
query39	0.03	0.03	0.03
query40	0.11	0.08	0.08
query41	0.08	0.02	0.02
query42	0.04	0.02	0.02
query43	0.03	0.03	0.03
Total cold run time: 90.38 s
Total hot run time: 14.71 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100.00% (28/28) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.33% (34669/45420)
Line Coverage 61.39% (391309/637364)
Region Coverage 57.54% (328796/571423)
Branch Coverage 58.39% (149947/256824)

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 22.35% (19/85) 🎉
Increment coverage report
Complete coverage report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants