Skip to content

[fix](point query) Revalidate security before prepared point-query reuse - #67880

Open
morrySnow wants to merge 2 commits into
apache:masterfrom
morrySnow:fix/refresh-prepared-short-circuit-security-context
Open

[fix](point query) Revalidate security before prepared point-query reuse#67880
morrySnow wants to merge 2 commits into
apache:masterfrom
morrySnow:fix/refresh-prepared-short-circuit-security-context

Conversation

@morrySnow

Copy link
Copy Markdown
Contributor

Problem

A server-side prepared point query can keep a direct short-circuit execution context across executions. If the user's SELECT access or a row-filter/data-mask policy changes after the context is created, direct reuse must not execute with the earlier security decisions.

Root cause

The prepared-statement fast path checked table schema, table name, partition topology, and a relevant session limit before reusing ShortCircuitQueryContext. It then called the direct executor without running the normal Nereids privilege and policy analysis passes. The retained context did not capture those security dependencies, so it had no way to detect that authorization had changed.

Reproduction

  1. Enable server-side prepared statements and prepare an eligible unique-key point lookup as a non-administrator user.
  2. Execute it twice so the short-circuit context is retained and reused.
  3. Add a restrictive row policy, or revoke SELECT from the user.
  4. Execute the same prepared statement again. Before this change, the direct cached path could continue using the plan created under the old decisions.

Fix

  • Record the planning user identity and exact table/column SELECT checks independently of SQL result-cache settings.
  • Record complete row-filter results and data-mask results, including empty/no-mask answers so newly added policies are observable.
  • Snapshot those dependencies when creating the retained short-circuit context and revalidate them before every direct reuse.
  • Reject reuse when the identity differs, a dependency is missing, a table no longer resolves, authorization is denied, a policy differs, or the authorization source fails. The statement then returns to normal planning for the authoritative check and standard error handling.
  • Keep the validation fail-closed when the planning identity or privilege dependency was not captured.

Tests

  • ./run-fe-ut.sh --run org.apache.doris.nereids.SecurityDependencyContextTest,org.apache.doris.qe.ShortCircuitQueryContextTest,org.apache.doris.nereids.trees.plans.commands.ExecuteCommandTest (22 tests passed)
  • cd fe && mvn -pl fe-core checkstyle:check (0 violations)
  • DISABLE_BUILD_UI=ON ./build.sh --fe
  • prepared_short_circuit_security_refresh regression suite on a deployed FE, including an EXPLAIN assertion for SHORT-CIRCUIT, row-policy add/drop, and SELECT revoke/grant using the same server-prepared statement

### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: Server-side prepared point queries retain a direct short-circuit execution context after their first execution. Reusing that context bypassed the normal privilege and policy analysis passes, so a SELECT revocation or a changed row-filter or data-mask policy could leave the retained plan authorized with stale decisions. Record the planning identity, checked columns, complete row-filter answers, and data-mask answers (including negative answers), then revalidate them before every direct reuse. Missing dependencies and authorization-source failures reject reuse and fall back to normal planning, where the authoritative check returns the standard result or error.

### Release note

Prepared point queries now honor current SELECT privileges and row-filter/data-mask policies on every execution.

### Check List (For Author)

- Test: Unit tests and regression test
    - `SecurityDependencyContextTest`, `ExecuteCommandTest`, and `ShortCircuitQueryContextTest`
    - `prepared_short_circuit_security_refresh`
- Behavior changed: Yes. A stale prepared point-query context is rebuilt after security decisions change.
- Does this need documentation: No
@morrySnow

Copy link
Copy Markdown
Contributor Author

run buildall

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

@morrySnow morrySnow changed the title [fix](fe) Revalidate security before prepared point-query reuse [fix](point query) Revalidate security before prepared point-query reuse Sep 11, 2026
924060929
924060929 previously approved these changes Sep 11, 2026
@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 87.62% (92/105) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17553	3012	2986	2986
q2	2099	249	222	222
q3	10238	849	509	509
q4	4672	244	205	205
q5	7682	593	381	381
q6	131	114	91	91
q7	519	512	386	386
q8	9241	893	872	872
q9	3451	2390	2349	2349
q10	6523	828	694	694
q11	387	195	176	176
q12	621	254	200	200
q13	18124	1542	1168	1168
q14	166	146	136	136
q15	q16	426	388	367	367
q17	1340	844	785	785
q18	3088	2225	2278	2225
q19	1303	876	757	757
q20	368	273	201	201
q21	5619	1582	1825	1582
q22	325	271	227	227
Total cold run time: 93876 ms
Total hot run time: 16519 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3363	3295	3308	3295
q2	496	395	369	369
q3	2225	2237	2151	2151
q4	1174	1148	884	884
q5	2140	2113	2096	2096
q6	164	120	85	85
q7	1023	934	835	835
q8	1559	1368	1357	1357
q9	3098	3058	3058	3058
q10	1880	1781	1607	1607
q11	344	265	246	246
q12	446	433	338	338
q13	1456	1529	1135	1135
q14	170	166	176	166
q15	q16	390	387	351	351
q17	3563	3333	3266	3266
q18	4728	4370	4755	4370
q19	860	775	806	775
q20	1141	997	847	847
q21	3838	3050	3315	3050
q22	387	349	323	323
Total cold run time: 34445 ms
Total hot run time: 30604 ms

@hello-stephen

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

query5	4245	406	346	346
query6	400	136	118	118
query7	4946	426	235	235
query8	303	125	121	121
query9	8706	2876	2894	2876
query10	393	219	191	191
query11	5386	1046	896	896
query12	118	72	70	70
query13	1194	439	347	347
query14	6085	2185	2058	2058
query14_1	1965	1954	1950	1950
query15	175	117	110	110
query16	921	389	369	369
query17	798	456	359	359
query18	2342	324	231	231
query19	160	142	112	112
query20	77	70	73	70
query21	202	101	93	93
query22	5539	5284	5325	5284
query23	6774	6290	6066	6066
query23_1	6167	5973	5924	5924
query24	7259	1084	760	760
query24_1	787	765	771	765
query25	423	295	251	251
query26	1220	220	131	131
query27	2801	402	254	254
query28	4705	1505	1495	1495
query29	944	436	350	350
query30	246	151	132	132
query31	834	395	330	330
query32	130	76	77	76
query33	476	219	189	189
query34	984	817	480	480
query35	417	379	349	349
query36	598	554	523	523
query37	115	90	68	68
query38	1010	844	809	809
query39	493	465	479	465
query39_1	480	457	450	450
query40	206	98	78	78
query41	58	56	56	56
query42	73	79	72	72
query43	242	237	209	209
query44	1014	548	545	545
query45	125	109	100	100
query46	788	839	506	506
query47	778	746	699	699
query48	319	316	214	214
query49	562	291	181	181
query50	735	261	188	188
query51	7981	7921	8149	7921
query52	67	66	61	61
query53	184	195	150	150
query54	206	166	167	166
query55	67	59	53	53
query56	201	197	159	159
query57	677	619	628	619
query58	214	235	205	205
query59	1224	1213	1075	1075
query60	232	181	171	171
query61	123	123	107	107
query62	380	200	180	180
query63	184	143	142	142
query64	2805	682	595	595
query65	1637	1555	1594	1555
query66	1956	263	211	211
query67	9996	9644	9538	9538
query68	3002	1205	755	755
query69	354	214	200	200
query70	675	614	579	579
query71	253	182	159	159
query72	2301	1662	1472	1472
query73	653	583	352	352
query74	2015	1204	1117	1117
query75	1203	1104	956	956
query76	2388	696	508	508
query77	253	268	200	200
query78	3871	3749	3268	3268
query79	2774	798	580	580
query80	1594	320	260	260
query81	522	161	132	132
query82	633	130	94	94
query83	274	207	184	184
query84	296	105	86	86
query85	810	334	278	278
query86	479	173	172	172
query87	1017	965	893	893
query88	2885	2089	2095	2089
query89	282	192	170	170
query90	2040	124	127	124
query91	127	113	98	98
query92	88	63	71	63
query93	2001	1086	687	687
query94	650	239	219	219
query95	515	306	227	227
query96	837	546	259	259
query97	1055	1040	1021	1021
query98	174	138	134	134
query99	417	341	305	305
Total cold run time: 179717 ms
Total hot run time: 81258 ms

@hello-stephen

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

query1	0.00	0.00	0.01
query2	0.08	0.04	0.04
query3	0.26	0.11	0.10
query4	1.60	0.10	0.10
query5	0.17	0.16	0.16
query6	1.26	0.69	0.70
query7	0.03	0.00	0.00
query8	0.04	0.03	0.03
query9	0.28	0.21	0.20
query10	0.34	0.34	0.34
query11	0.16	0.12	0.11
query12	0.15	0.12	0.11
query13	0.29	0.32	0.31
query14	0.45	0.44	0.44
query15	0.36	0.35	0.34
query16	0.21	0.21	0.23
query17	0.72	0.68	0.69
query18	0.18	0.17	0.17
query19	1.20	1.17	1.13
query20	0.02	0.02	0.02
query21	15.45	0.14	0.11
query22	5.10	0.04	0.04
query23	16.18	0.25	0.10
query24	2.99	0.34	0.26
query25	0.11	0.04	0.03
query26	0.80	0.16	0.11
query27	0.04	0.03	0.03
query28	3.67	0.57	0.27
query29	12.46	3.11	2.56
query30	0.26	0.11	0.14
query31	2.80	0.37	0.17
query32	3.53	0.31	0.24
query33	1.36	1.48	1.38
query34	15.36	2.11	1.75
query35	1.70	1.71	1.72
query36	0.46	0.30	0.29
query37	0.06	0.04	0.04
query38	0.04	0.02	0.02
query39	0.04	0.02	0.02
query40	0.12	0.07	0.08
query41	0.07	0.02	0.02
query42	0.03	0.02	0.02
query43	0.04	0.03	0.02
Total cold run time: 90.47 s
Total hot run time: 14.55 s

@morrySnow
morrySnow marked this pull request as draft September 12, 2026 07:45
@morrySnow
morrySnow marked this pull request as ready for review September 12, 2026 11:22
@morrySnow

Copy link
Copy Markdown
Contributor Author

/review

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: Selected model is at capacity. Please try a different model.
Workflow run: https://github.com/apache/doris/actions/runs/34802524782

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@morrySnow

Copy link
Copy Markdown
Contributor Author

/review

Avoid catalog, privilege, row-policy, and mask lookups on every prepared point-query execution when Doris built-in authorization is unchanged. External authorization and LDAP continue to use fail-closed full validation.
@morrySnow

Copy link
Copy Markdown
Contributor Author

run buildall

@morrySnow

Copy link
Copy Markdown
Contributor Author

/review

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: Codex completed, but no new pull request review was submitted for the current head SHA.
Workflow run: https://github.com/apache/doris/actions/runs/34830846274

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

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

Static review result: REQUEST_CHANGES. Review status: capped/incomplete because a distinct valuable finding was accepted in the third and final permitted convergence round.

  • Goal and proof: the patch correctly invalidates ordinary built-in privilege/role and row-policy mutations and rechecks custom relation decisions, but it does not fully secure reusable prepared point plans. Three P1 stale-plan paths remain (authorization-subject change, inlined-view definition change, and database-namespace change), and the P2 revoke test can pass on an unrelated SQLException.
  • Scope and clarity: the implementation is focused and the dependency abstraction is understandable, but its declared security-dependency boundary omits subject and metadata-generation inputs that materially change the meaning or authority of the cached plan.
  • Concurrency: Auth and PolicyMgr writers publish volatile epochs under their existing writer discipline, replay is ordered, and per-connection MySQL commands are serial. No distinct heavy-under-lock, lock-order, deadlock, or shared-cache race was found; overlapping post-validation mutation has the same boundary as ordinary planning.
  • Lifecycle and error handling: invalid-cache refresh reparses into a fresh StatementContext, clears stale publication before normal execution, fails closed on validation errors, and cannot republish the old context after failure. The remaining defects are unfenced subject and metadata lifecycles, not refresh rollback.
  • Configuration, compatibility, and persistence: no configuration item, FE-BE field, EditLog payload, storage format, public symbol, or rolling-upgrade protocol changes are introduced. Process-local epochs need not persist because prepared consumers do not survive FE restart; replay updates the applicable local epochs.
  • Parallel and conditional paths: built-in authorization uses O(1) epoch validation; LDAP/custom sources take full validation; forwarded, Arrow Flight, group-commit, and ineligible scan shapes were checked. Direct cloud lookup independently rechecks compute-group USAGE through CloudSystemInfoService.getCurrentClusterId, so that proposed candidate was dismissed with evidence.
  • Tests and results: all changed Java tests and the Groovy/.out pair were reviewed statically; the expected rows are internally consistent. Missing negative coverage is called out inline for subject, view-definition, and database-namespace transitions, and the current denial oracle is too broad. Per task constraints, no build or test was run, so CI/author claims were not independently verified.
  • Observability and performance: existing DEBUG refresh/rollback logging is adequate, built-in validation is O(1), and custom validation is bounded by the eligible single-table plan. No separate metric, CPU, or memory issue was substantiated.
  • Transactions, data writes, and variable passing: no transactional write, storage-visibility, data-atomicity, or new FE-BE variable-passing checkpoint applies.
  • User focus: no additional focus was provided.

All candidates have an evidence-backed submitted or dismissed disposition, but the convergence result remains incomplete under the three-round cap.

try {
Env env = connectContext.getEnv();
if (useVersionValidation) {
return usesAuthorizationChecks(connectContext) && versionsAreCurrent(env);

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] Bind this shortcut to the planning authorization subject

The cached context stores no planning identity, so this branch can return true without examining the current subject. A connection can prepare and cache ResultSink -> Project(secret) -> Filter(pk=?) -> OlapScan(t) as user A, then successfully issue COM_CHANGE_USER for pre-existing user B: that handler changes currentUserIdentity but does not clear preparedStatementContextMap, and neither global epoch advances. ExecuteCommand then calls the analysis-free direct executor with A's plan, letting B bypass a missing SELECT grant or B's stricter row policy. Capture and compare the effective planning subject (including session-authenticated roles), or invalidate server prepared statements on change-user, before allowing this path; please add a binary-protocol A-to-B regression.

}

/** Freeze the decisions used by a completed plan before storing them in a reusable context. */
public synchronized SecurityDependencyContext snapshot() {

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] Fence reuse on inlined view definitions

This snapshot records a view's privilege/policy answers but not the definition that was inlined into the cached physical plan. A simple view can be reduced to the eligible Project -> Filter -> OlapScan shape; ALTER VIEW then mutates and re-registers the same view name/id without advancing either security epoch or changing the underlying OlapTable fences. The version branch accepts unchanged epochs, and full validation only resolves the same view and repeats its unchanged grant/policies. Thus a user granted only on v can warm a query while v exposes a sensitive column, an administrator can alter v to redact it or add a tenant predicate, and the next EXECUTE still runs the old inlined project/filter. Capture and compare a view-definition/schema generation for every inlined view (in both validation modes), or invalidate these caches on view mutation; please add an ALTER VIEW regression.

}
Auth auth = env.getAuth();
PolicyMgr policyMgr = env.getPolicyMgr();
return auth != null && policyMgr != null

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] Revalidate the cached resource after namespace changes

This version-only branch never resolves the recorded FullTableName. A restricted user can warm a point-query cache with SELECT on old_db.t; an administrator can then rename that database to new_db, which mutates the retained table object's qualified database name without marking it dropped, changing its table name/schema/topology versions, or advancing either security epoch. Built-in grants are name-scoped, so fresh analysis would no longer authorize/resolve the old resource, yet this method and ShortCircuitQueryContext.isReusable still permit direct execution of the retained table. Bind the snapshot to the current catalog/database/table identity (or advance a metadata namespace generation) before using the version shortcut, and add a database-rename regression.

boolean denied = false
try {
prepared.executeQuery().close()
} catch (SQLException e) {

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] Verify the expected SELECT denial

This marks every SQLException as success, so a reparse, placeholder-transfer, planner, or runtime failure would also make this security regression pass. Please assert the stable Doris/MySQL access-denied code or message fragment here (and rethrow anything else) so the test proves cache rejection reached the authoritative privilege check.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17606	3049	3015	3015
q2	2086	251	223	223
q3	10261	882	518	518
q4	4669	253	208	208
q5	7667	576	387	387
q6	135	111	94	94
q7	524	574	392	392
q8	9235	961	886	886
q9	3496	2393	2383	2383
q10	6508	837	706	706
q11	402	194	187	187
q12	607	258	195	195
q13	18154	1534	1161	1161
q14	163	146	138	138
q15	q16	424	393	370	370
q17	1416	838	825	825
q18	3107	2245	2232	2232
q19	1264	895	740	740
q20	380	285	199	199
q21	5651	1747	1857	1747
q22	318	266	230	230
Total cold run time: 94073 ms
Total hot run time: 16836 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3402	3316	3329	3316
q2	495	385	380	380
q3	2178	2333	2194	2194
q4	1176	1149	891	891
q5	2166	2107	2095	2095
q6	167	120	87	87
q7	1065	966	857	857
q8	1571	1383	1366	1366
q9	3103	3067	3077	3067
q10	1873	1821	1611	1611
q11	351	275	251	251
q12	458	431	343	343
q13	1477	1514	1160	1160
q14	164	169	159	159
q15	q16	390	390	367	367
q17	3613	3263	3292	3263
q18	4778	4406	4733	4406
q19	874	860	896	860
q20	1012	975	849	849
q21	3844	3169	3186	3169
q22	390	335	332	332
Total cold run time: 34547 ms
Total hot run time: 31023 ms

@hello-stephen

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

query5	4238	409	327	327
query6	378	131	121	121
query7	4976	425	237	237
query8	287	123	121	121
query9	8671	2899	2893	2893
query10	398	225	185	185
query11	5391	1061	936	936
query12	120	76	72	72
query13	1195	453	316	316
query14	6024	2192	2078	2078
query14_1	1976	1941	1950	1941
query15	170	124	111	111
query16	911	378	376	376
query17	790	457	352	352
query18	2329	319	242	242
query19	162	148	113	113
query20	73	72	70	70
query21	202	101	92	92
query22	5314	5349	5360	5349
query23	6786	6095	6055	6055
query23_1	6043	5958	6218	5958
query24	7333	1101	739	739
query24_1	760	753	781	753
query25	426	304	259	259
query26	1236	232	135	135
query27	2778	403	251	251
query28	4705	1490	1497	1490
query29	931	426	357	357
query30	248	154	127	127
query31	823	411	333	333
query32	133	75	72	72
query33	456	217	184	184
query34	977	846	498	498
query35	395	399	345	345
query36	561	547	541	541
query37	118	80	69	69
query38	1001	852	818	818
query39	501	514	467	467
query39_1	484	453	458	453
query40	204	90	81	81
query41	61	58	57	57
query42	75	77	73	73
query43	246	243	208	208
query44	981	539	540	539
query45	114	108	104	104
query46	762	832	535	535
query47	760	746	709	709
query48	355	295	228	228
query49	537	236	184	184
query50	785	261	191	191
query51	8069	8016	8164	8016
query52	69	66	61	61
query53	200	196	146	146
query54	237	178	148	148
query55	69	59	56	56
query56	170	160	163	160
query57	693	689	666	666
query58	205	173	169	169
query59	1204	1231	1086	1086
query60	225	183	167	167
query61	109	113	124	113
query62	415	208	173	173
query63	172	142	136	136
query64	2750	713	570	570
query65	1627	1594	1558	1558
query66	1946	312	215	215
query67	10214	9663	9550	9550
query68	2996	1211	724	724
query69	349	224	189	189
query70	667	639	639	639
query71	249	171	164	164
query72	2267	1657	1491	1491
query73	668	549	341	341
query74	1996	1217	1128	1128
query75	1163	1104	969	969
query76	2376	698	512	512
query77	256	248	208	208
query78	3823	3691	3159	3159
query79	2761	832	572	572
query80	1582	317	272	272
query81	513	156	130	130
query82	620	130	99	99
query83	275	199	187	187
query84	295	111	87	87
query85	812	338	274	274
query86	471	178	171	171
query87	1029	978	894	894
query88	3094	2115	2068	2068
query89	288	196	170	170
query90	2179	127	126	126
query91	127	115	94	94
query92	99	69	65	65
query93	2573	1075	712	712
query94	626	246	204	204
query95	530	252	226	226
query96	802	557	270	270
query97	1050	1068	1017	1017
query98	170	135	131	131
query99	417	345	307	307
Total cold run time: 180097 ms
Total hot run time: 81482 ms

@hello-stephen

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

query1	0.01	0.00	0.00
query2	0.08	0.04	0.03
query3	0.24	0.10	0.11
query4	1.60	0.10	0.10
query5	0.18	0.16	0.16
query6	1.27	0.66	0.71
query7	0.02	0.00	0.00
query8	0.04	0.03	0.03
query9	0.29	0.21	0.22
query10	0.35	0.34	0.34
query11	0.16	0.12	0.12
query12	0.15	0.12	0.13
query13	0.31	0.31	0.31
query14	0.48	0.45	0.45
query15	0.35	0.36	0.34
query16	0.21	0.22	0.24
query17	0.71	0.68	0.73
query18	0.18	0.15	0.17
query19	1.20	1.11	1.18
query20	0.01	0.01	0.01
query21	15.44	0.15	0.11
query22	5.08	0.04	0.04
query23	16.20	0.25	0.10
query24	2.99	0.31	0.26
query25	0.11	0.03	0.04
query26	0.86	0.16	0.13
query27	0.04	0.04	0.03
query28	3.68	0.54	0.27
query29	12.42	3.18	2.57
query30	0.25	0.11	0.12
query31	2.76	0.38	0.18
query32	3.53	0.33	0.23
query33	1.48	1.41	1.36
query34	15.38	2.18	1.78
query35	1.73	1.75	1.74
query36	0.46	0.29	0.27
query37	0.06	0.04	0.04
query38	0.05	0.03	0.03
query39	0.03	0.03	0.02
query40	0.11	0.08	0.07
query41	0.08	0.03	0.02
query42	0.03	0.02	0.03
query43	0.04	0.03	0.03
Total cold run time: 90.65 s
Total hot run time: 14.58 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 55.93% (99/177) 🎉
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