Skip to content

[fix](join) Bound outer join null-reject inference to nullable outputs - #65250

Merged
morrySnow merged 4 commits into
apache:masterfrom
foxtail463:fix/outer-join-null-reject
Aug 1, 2026
Merged

[fix](join) Bound outer join null-reject inference to nullable outputs#65250
morrySnow merged 4 commits into
apache:masterfrom
foxtail463:fix/outer-join-null-reject

Conversation

@foxtail463

@foxtail463 foxtail463 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

related PR: #63318

Problem Summary:
Outer join elimination uses fold-based null-reject inference to decide whether
nullable-side rows from the current outer join can be filtered away. This check
only needs slots from that join's nullable-side outputs, but the previous flow
could also test unrelated predicate inputs. When a filter predicate references a
mark slot produced by another join, folding that slot is useless for eliminating
the current outer join and can be costly when the fixed-point rewrite batch
revisits the same predicate multiple times.

Solution:
Add an API to infer null-rejecting slots only for a given target slot set, and
use the current join's nullable-side outputs as that target in
EliminateOuterJoin. Skip mark-join slots as inference targets, preserve the
existing expression complexity limits, and avoid rewriting when the join type
does not change.

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

@foxtail463

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17654	4032	4011	4011
q2	2047	326	201	201
q3	10238	1390	852	852
q4	4715	475	340	340
q5	7742	850	584	584
q6	244	168	140	140
q7	774	831	630	630
q8	10030	1644	1562	1562
q9	6049	4495	4483	4483
q10	6821	1820	1509	1509
q11	498	350	320	320
q12	704	556	449	449
q13	18104	3369	2795	2795
q14	274	261	244	244
q15	q16	792	789	720	720
q17	1744	1165	757	757
q18	7072	5806	5491	5491
q19	2777	1318	967	967
q20	795	686	579	579
q21	5962	2749	2476	2476
q22	444	356	299	299
Total cold run time: 105480 ms
Total hot run time: 29409 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4408	4244	4239	4239
q2	281	325	228	228
q3	4552	4950	4417	4417
q4	2095	2138	1383	1383
q5	4425	4291	4627	4291
q6	262	198	160	160
q7	2048	1858	1680	1680
q8	2509	2147	2120	2120
q9	7909	7677	7791	7677
q10	4746	4689	4396	4396
q11	572	423	396	396
q12	772	759	542	542
q13	3317	3571	2980	2980
q14	287	318	296	296
q15	q16	714	757	656	656
q17	1339	1330	1340	1330
q18	7796	7504	6664	6664
q19	1091	1091	1072	1072
q20	2276	2213	1933	1933
q21	5196	4602	4496	4496
q22	508	453	427	427
Total cold run time: 57103 ms
Total hot run time: 51383 ms

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 90.24% (37/41) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

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

query5	4448	633	485	485
query6	474	217	205	205
query7	4844	582	369	369
query8	335	186	173	173
query9	8718	4064	4088	4064
query10	507	346	300	300
query11	5950	2335	2199	2199
query12	158	102	104	102
query13	1256	620	476	476
query14	6299	5287	4985	4985
query14_1	4300	4278	4301	4278
query15	217	201	179	179
query16	1033	463	452	452
query17	1140	716	584	584
query18	2554	496	354	354
query19	219	195	154	154
query20	112	108	109	108
query21	236	167	135	135
query22	13600	13567	13394	13394
query23	17377	16464	16183	16183
query23_1	16283	16364	16231	16231
query24	7656	1761	1323	1323
query24_1	1330	1298	1312	1298
query25	571	459	392	392
query26	1331	358	210	210
query27	2588	559	390	390
query28	4408	2039	2032	2032
query29	1096	602	526	526
query30	333	268	228	228
query31	1131	1096	968	968
query32	114	65	62	62
query33	563	323	262	262
query34	1220	1126	645	645
query35	781	794	682	682
query36	1407	1371	1283	1283
query37	160	107	96	96
query38	1883	1705	1654	1654
query39	926	947	894	894
query39_1	901	884	895	884
query40	259	199	135	135
query41	64	62	62	62
query42	93	94	99	94
query43	318	323	283	283
query44	1425	800	791	791
query45	198	182	176	176
query46	1041	1236	722	722
query47	2336	2302	2267	2267
query48	384	434	294	294
query49	580	421	317	317
query50	1106	440	321	321
query51	4399	4350	4269	4269
query52	82	83	74	74
query53	259	265	207	207
query54	271	230	210	210
query55	75	72	65	65
query56	285	288	284	284
query57	1393	1410	1322	1322
query58	284	256	258	256
query59	1542	1592	1418	1418
query60	308	266	231	231
query61	153	146	170	146
query62	696	648	586	586
query63	234	206	209	206
query64	2531	764	598	598
query65	4896	4786	4747	4747
query66	1816	522	374	374
query67	29507	29406	29361	29361
query68	3141	1520	1045	1045
query69	412	309	272	272
query70	1041	966	915	915
query71	355	329	292	292
query72	2935	2234	2303	2234
query73	911	806	421	421
query74	5123	4968	4811	4811
query75	2614	2571	2218	2218
query76	2330	1183	803	803
query77	359	377	278	278
query78	12516	12516	11802	11802
query79	1430	1219	780	780
query80	1277	542	467	467
query81	536	326	288	288
query82	630	156	120	120
query83	375	312	292	292
query84	284	163	130	130
query85	981	592	517	517
query86	478	309	265	265
query87	1834	1822	1755	1755
query88	3743	2801	2810	2801
query89	465	398	363	363
query90	1872	198	194	194
query91	198	189	162	162
query92	66	64	54	54
query93	1785	1536	980	980
query94	776	349	303	303
query95	771	482	543	482
query96	1027	796	365	365
query97	2686	2689	2597	2597
query98	214	210	201	201
query99	1157	1161	1022	1022
Total cold run time: 259651 ms
Total hot run time: 173640 ms

@hello-stephen

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

query1	0.00	0.01	0.00
query2	0.10	0.05	0.05
query3	0.26	0.13	0.14
query4	1.60	0.14	0.14
query5	0.24	0.23	0.21
query6	1.26	1.04	1.11
query7	0.04	0.00	0.01
query8	0.06	0.04	0.04
query9	0.40	0.32	0.32
query10	0.53	0.54	0.56
query11	0.19	0.14	0.15
query12	0.17	0.14	0.14
query13	0.48	0.46	0.49
query14	1.01	0.99	1.01
query15	0.61	0.60	0.59
query16	0.32	0.32	0.32
query17	1.08	1.13	1.14
query18	0.23	0.21	0.21
query19	2.04	1.97	2.02
query20	0.02	0.02	0.01
query21	15.45	0.21	0.14
query22	4.84	0.05	0.05
query23	16.13	0.32	0.12
query24	2.98	0.42	0.36
query25	0.15	0.05	0.06
query26	0.72	0.20	0.15
query27	0.03	0.04	0.03
query28	3.53	0.90	0.52
query29	12.49	4.41	3.54
query30	0.28	0.16	0.15
query31	2.77	0.59	0.31
query32	3.22	0.61	0.50
query33	3.17	3.22	3.27
query34	15.65	4.23	3.54
query35	3.54	3.54	3.55
query36	0.56	0.44	0.42
query37	0.09	0.07	0.06
query38	0.05	0.04	0.03
query39	0.04	0.02	0.03
query40	0.18	0.15	0.14
query41	0.09	0.03	0.03
query42	0.04	0.03	0.03
query43	0.04	0.03	0.04
Total cold run time: 96.68 s
Total hot run time: 25.41 s

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

Thanks for this PR! The bounding of null-reject inference to nullable-side outputs is a clean optimization. I reviewed all angles (line-by-line, removed-behavior audit, cross-file tracer, reuse, simplification, efficiency, altitude, conventions) and found the implementation correct and well-tested.

One code organization observation (not a bug): The new getNullableSideOutput() in LogicalJoin re-encodes the join-type-to-nullable-side mapping (LEFT_OUTER→right nullable, RIGHT_OUTER→left nullable, FULL_OUTER→both) that already exists in JoinUtils.getJoinOutput() lines 417-433. If a new join type with different null-extension semantics is added, the mapping would need updating in multiple places. Consider whether a utility method on JoinType (e.g., isLeftSideNullable()/isRightSideNullable()) could consolidate this knowledge.

LGTM overall — the new test coverage is thorough (IN+OR-FALSE elimination, FULL OUTER degradation, early-return guard, negative cases).

Comment thread fe/fe-core/src/main/java/org/apache/doris/nereids/util/ExpressionUtils.java Outdated
@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 53.73% (36/67) 🎉
Increment coverage report
Complete coverage report

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

Bounding the inference to getNullableSideOutput() is the right target set. Note this isn't purely skipping useless work — it changes elimination behavior: skipping mark-join slots as inference targets can drop an elimination, and the smaller target set interacts with the expression-complexity limit (a set that previously bailed on complexity may now fit and eliminate more).

P0 Regression / cloud_p0 are red. Since outer-join elimination affects results, please confirm these are expected plan changes (regenerated .out) rather than wrong results, and that skipping mark-join slots is always safe for eliminating the current join.

@foxtail463
foxtail463 requested a review from zclllyybb as a code owner July 7, 2026 12:30
@foxtail463

Copy link
Copy Markdown
Contributor Author

run buildall

@foxtail463
foxtail463 force-pushed the fix/outer-join-null-reject branch from 1722a9b to 1e9ee9c Compare July 7, 2026 13:14
@foxtail463

Copy link
Copy Markdown
Contributor Author

run buildall

@foxtail463

Copy link
Copy Markdown
Contributor Author

run compile

@foxtail463

Copy link
Copy Markdown
Contributor Author

run feut

@foxtail463

Copy link
Copy Markdown
Contributor Author

run performance

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17693	4328	4151	4151
q2	2082	324	207	207
q3	10244	1428	856	856
q4	4689	477	339	339
q5	7505	869	587	587
q6	187	200	143	143
q7	794	873	638	638
q8	9369	1475	1490	1475
q9	5724	4394	4433	4394
q10	6827	1808	1535	1535
q11	497	347	318	318
q12	726	548	443	443
q13	18135	3400	2792	2792
q14	269	275	248	248
q15	q16	788	790	704	704
q17	935	957	990	957
q18	7017	5762	5589	5589
q19	1205	1328	1013	1013
q20	773	640	576	576
q21	5586	2682	2445	2445
q22	444	357	306	306
Total cold run time: 101489 ms
Total hot run time: 29716 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4518	4424	4429	4424
q2	317	312	227	227
q3	4566	4943	4388	4388
q4	2091	2166	1378	1378
q5	4501	4402	4404	4402
q6	233	174	129	129
q7	1757	2232	1779	1779
q8	2586	2344	2275	2275
q9	8103	8253	7816	7816
q10	4732	4757	4305	4305
q11	602	423	401	401
q12	756	782	544	544
q13	3339	3570	2974	2974
q14	308	317	271	271
q15	q16	739	748	648	648
q17	1383	1405	1343	1343
q18	7953	7424	7322	7322
q19	1133	1116	1084	1084
q20	2212	2210	1937	1937
q21	5310	4686	4522	4522
q22	531	481	413	413
Total cold run time: 57670 ms
Total hot run time: 52582 ms

@hello-stephen

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

query5	4364	657	505	505
query6	478	230	220	220
query7	4861	621	354	354
query8	343	201	181	181
query9	8822	4125	4099	4099
query10	463	387	299	299
query11	5971	2345	2143	2143
query12	162	103	103	103
query13	1284	595	447	447
query14	6270	5368	5017	5017
query14_1	4363	4377	4382	4377
query15	221	208	182	182
query16	1027	483	487	483
query17	963	767	596	596
query18	2444	480	381	381
query19	196	193	149	149
query20	112	106	107	106
query21	232	162	145	145
query22	13623	13558	13462	13462
query23	17453	16576	16113	16113
query23_1	16354	16310	16267	16267
query24	7550	1746	1294	1294
query24_1	1312	1289	1321	1289
query25	553	449	383	383
query26	1327	362	215	215
query27	2598	566	381	381
query28	4495	2009	1983	1983
query29	1053	602	499	499
query30	345	262	232	232
query31	1128	1111	980	980
query32	110	63	63	63
query33	526	318	251	251
query34	1190	1141	648	648
query35	780	800	669	669
query36	1395	1404	1200	1200
query37	154	114	89	89
query38	1881	1697	1656	1656
query39	934	919	882	882
query39_1	886	878	884	878
query40	249	161	140	140
query41	67	66	64	64
query42	93	100	94	94
query43	331	331	294	294
query44	1465	784	767	767
query45	197	195	178	178
query46	1032	1231	769	769
query47	2406	2332	2267	2267
query48	408	406	290	290
query49	583	433	303	303
query50	1059	430	346	346
query51	10898	10837	10675	10675
query52	88	88	78	78
query53	282	284	212	212
query54	304	250	247	247
query55	79	76	68	68
query56	320	333	317	317
query57	1435	1406	1347	1347
query58	305	270	276	270
query59	1585	1676	1421	1421
query60	326	302	274	274
query61	180	182	183	182
query62	729	671	598	598
query63	253	215	209	209
query64	2989	1152	1008	1008
query65	4854	4776	4780	4776
query66	1828	508	378	378
query67	29637	29455	29337	29337
query68	3143	1523	1064	1064
query69	405	305	270	270
query70	1080	968	965	965
query71	352	322	318	318
query72	3103	2742	2332	2332
query73	852	818	455	455
query74	5134	4956	4792	4792
query75	2631	2593	2241	2241
query76	2308	1188	819	819
query77	368	382	288	288
query78	12247	12233	11719	11719
query79	1387	1196	748	748
query80	1270	605	472	472
query81	583	322	284	284
query82	603	156	124	124
query83	369	333	294	294
query84	332	163	131	131
query85	960	598	520	520
query86	437	315	279	279
query87	1839	1825	1761	1761
query88	3762	2829	2730	2730
query89	451	405	356	356
query90	1964	210	206	206
query91	205	192	166	166
query92	64	62	57	57
query93	1644	1515	943	943
query94	744	366	313	313
query95	785	509	465	465
query96	1118	785	351	351
query97	2693	2701	2560	2560
query98	215	214	209	209
query99	1150	1182	1015	1015
Total cold run time: 266791 ms
Total hot run time: 181190 ms

@hello-stephen

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

query1	0.01	0.01	0.01
query2	0.10	0.04	0.05
query3	0.25	0.13	0.14
query4	1.61	0.14	0.17
query5	0.24	0.24	0.22
query6	1.22	1.08	1.05
query7	0.04	0.01	0.00
query8	0.06	0.04	0.04
query9	0.39	0.31	0.32
query10	0.59	0.55	0.56
query11	0.19	0.14	0.15
query12	0.19	0.15	0.15
query13	0.47	0.48	0.48
query14	1.00	1.02	1.01
query15	0.62	0.60	0.59
query16	0.32	0.34	0.31
query17	1.09	1.13	1.09
query18	0.23	0.22	0.21
query19	2.02	1.92	1.95
query20	0.01	0.01	0.01
query21	15.45	0.25	0.15
query22	4.88	0.05	0.05
query23	16.10	0.31	0.14
query24	2.89	0.40	0.31
query25	0.12	0.04	0.05
query26	0.72	0.20	0.16
query27	0.05	0.03	0.04
query28	3.48	0.89	0.56
query29	12.53	4.07	3.25
query30	0.28	0.16	0.15
query31	2.77	0.62	0.31
query32	3.22	0.58	0.48
query33	3.22	3.31	3.21
query34	15.79	4.23	3.49
query35	3.55	3.55	3.55
query36	0.56	0.42	0.41
query37	0.09	0.06	0.06
query38	0.06	0.04	0.04
query39	0.04	0.03	0.02
query40	0.18	0.15	0.16
query41	0.09	0.04	0.03
query42	0.03	0.03	0.02
query43	0.05	0.03	0.04
Total cold run time: 96.8 s
Total hot run time: 25.04 s

@foxtail463

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17606	4128	4160	4128
q2	2401	314	200	200
q3	10290	1420	810	810
q4	4716	468	332	332
q5	7808	858	551	551
q6	202	178	138	138
q7	789	823	620	620
q8	10038	1688	1648	1648
q9	6519	4408	4395	4395
q10	6801	1771	1510	1510
q11	507	344	316	316
q12	762	559	419	419
q13	18172	3439	2749	2749
q14	272	259	240	240
q15	q16	790	778	706	706
q17	989	1063	1033	1033
q18	6795	5723	5425	5425
q19	1274	1267	1042	1042
q20	776	664	548	548
q21	5732	2644	2347	2347
q22	446	359	296	296
Total cold run time: 103685 ms
Total hot run time: 29453 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4578	4443	4455	4443
q2	296	317	210	210
q3	4592	4981	4384	4384
q4	2038	2154	1381	1381
q5	4486	4385	4800	4385
q6	262	203	155	155
q7	2059	1822	1581	1581
q8	2502	2211	2206	2206
q9	7958	7880	7902	7880
q10	4841	4760	4364	4364
q11	623	429	380	380
q12	771	784	553	553
q13	3382	3660	3010	3010
q14	301	300	278	278
q15	q16	713	752	657	657
q17	1361	1344	1388	1344
q18	8028	7625	6701	6701
q19	1094	1076	1053	1053
q20	2221	2200	1941	1941
q21	5249	4570	4405	4405
q22	503	464	391	391
Total cold run time: 57858 ms
Total hot run time: 51702 ms

@hello-stephen

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

query5	4310	621	481	481
query6	467	225	198	198
query7	4868	609	325	325
query8	338	185	175	175
query9	8765	4048	4019	4019
query10	458	346	305	305
query11	5908	2361	2174	2174
query12	165	108	100	100
query13	1334	617	417	417
query14	6276	5291	4969	4969
query14_1	4295	4293	4287	4287
query15	223	213	185	185
query16	1055	468	450	450
query17	1119	713	554	554
query18	2558	483	340	340
query19	206	188	148	148
query20	113	107	105	105
query21	231	154	132	132
query22	13609	13590	13407	13407
query23	17383	16577	16060	16060
query23_1	16244	16339	16290	16290
query24	7691	1773	1298	1298
query24_1	1350	1306	1287	1287
query25	596	495	400	400
query26	1342	343	211	211
query27	2650	584	374	374
query28	4490	2047	2011	2011
query29	1064	649	491	491
query30	332	258	233	233
query31	1107	1087	978	978
query32	109	60	61	60
query33	499	316	249	249
query34	1181	1146	638	638
query35	770	785	681	681
query36	1429	1498	1251	1251
query37	155	103	91	91
query38	1886	1708	1669	1669
query39	951	927	896	896
query39_1	879	875	896	875
query40	258	160	132	132
query41	65	63	63	63
query42	92	93	93	93
query43	321	321	279	279
query44	1434	762	756	756
query45	198	191	173	173
query46	1088	1213	756	756
query47	2374	2375	2227	2227
query48	395	419	294	294
query49	599	428	316	316
query50	1021	406	326	326
query51	10818	10720	10706	10706
query52	87	89	75	75
query53	258	274	204	204
query54	295	245	219	219
query55	74	73	66	66
query56	285	283	289	283
query57	1420	1432	1301	1301
query58	271	256	270	256
query59	1574	1645	1395	1395
query60	299	271	254	254
query61	170	169	175	169
query62	711	645	580	580
query63	250	209	207	207
query64	3005	1157	996	996
query65	4841	4765	4825	4765
query66	1836	545	401	401
query67	29712	29531	29461	29461
query68	3150	1646	1025	1025
query69	420	327	272	272
query70	1114	974	954	954
query71	364	313	313	313
query72	3340	2458	2410	2410
query73	808	739	405	405
query74	5149	4968	4740	4740
query75	2612	2586	2246	2246
query76	2332	1207	797	797
query77	350	376	286	286
query78	12235	12406	11764	11764
query79	1441	1144	764	764
query80	1290	535	464	464
query81	529	322	278	278
query82	736	158	122	122
query83	371	323	301	301
query84	294	157	134	134
query85	960	603	503	503
query86	471	313	284	284
query87	1830	1823	1793	1793
query88	3744	2770	2784	2770
query89	452	410	344	344
query90	2008	209	189	189
query91	203	192	161	161
query92	65	62	59	59
query93	1704	1503	1063	1063
query94	747	367	283	283
query95	796	485	552	485
query96	1075	775	354	354
query97	2658	2672	2579	2579
query98	221	213	200	200
query99	1121	1173	1032	1032
Total cold run time: 267206 ms
Total hot run time: 180248 ms

@hello-stephen

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

query1	0.01	0.01	0.01
query2	0.10	0.05	0.05
query3	0.25	0.13	0.13
query4	1.61	0.13	0.14
query5	0.24	0.24	0.22
query6	1.29	1.08	1.09
query7	0.04	0.01	0.00
query8	0.06	0.04	0.04
query9	0.38	0.30	0.31
query10	0.54	0.58	0.54
query11	0.18	0.14	0.15
query12	0.18	0.15	0.15
query13	0.46	0.48	0.49
query14	1.01	1.01	1.02
query15	0.62	0.61	0.61
query16	0.31	0.32	0.32
query17	1.15	1.12	1.10
query18	0.23	0.21	0.21
query19	2.01	2.01	1.90
query20	0.01	0.01	0.01
query21	15.46	0.22	0.13
query22	4.73	0.05	0.06
query23	16.14	0.32	0.12
query24	2.99	0.41	0.32
query25	0.11	0.05	0.04
query26	0.73	0.21	0.16
query27	0.04	0.04	0.04
query28	3.46	0.99	0.54
query29	12.46	4.13	3.26
query30	0.27	0.15	0.16
query31	2.76	0.62	0.31
query32	3.23	0.59	0.48
query33	3.13	3.17	3.22
query34	15.57	4.26	3.50
query35	3.55	3.51	3.55
query36	0.56	0.44	0.43
query37	0.08	0.06	0.06
query38	0.05	0.04	0.03
query39	0.04	0.03	0.03
query40	0.17	0.15	0.14
query41	0.08	0.03	0.03
query42	0.04	0.02	0.02
query43	0.04	0.03	0.04
Total cold run time: 96.37 s
Total hot run time: 24.98 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 61.43% (43/70) 🎉
Increment coverage report
Complete coverage report

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Jul 30th, 2026 7:58 AM.
Workflow run: https://github.com/apache/doris/actions/runs/30082847736

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

Comment thread fe/fe-core/src/main/java/org/apache/doris/nereids/util/JoinUtils.java Outdated
@foxtail463
foxtail463 force-pushed the fix/outer-join-null-reject branch from 7be65e9 to eecf697 Compare July 24, 2026 12:07
@foxtail463

Copy link
Copy Markdown
Contributor Author

run buidall

@foxtail463

Copy link
Copy Markdown
Contributor Author

run buidall

@morrySnow

Copy link
Copy Markdown
Contributor

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

Request changes: one P1 correctness blocker and one P2 required test gap.

Review completeness: Incomplete under the mandatory three-round cap. The final round identified, and the main review independently verified, a remediation-scope correction to the P1: the evaluation-sensitive guard must cover the whole filter set. That correction is included in the inline comment and no candidate remains unclassified, but the corrected payload could not receive a fourth convergence round.

Critical checkpoint conclusions:

  • Goal and proof: Bounding outer-join null-reject inference to nullable outputs implements the intended optimization for ordinary deterministic predicates, and the LEFT/RIGHT/FULL/ASOF weakening matrix is sound. It is not correct for evaluation-sensitive filter sets, as described in the P1. The new aggregate partial-inference path is safe but lacks its required boundary test (P2).
  • Scope and clarity: The production change is focused, the removed helper has no remaining repository caller, and the new join-type helpers centralize the nullable-side mapping.
  • Concurrency: Not involved; these are single-query planner rewrites with no shared mutable state or locking changes.
  • Lifecycle: The rewrite strengthens join types monotonically, returns null for unchanged types, and generated not-null markers are later removed; no loop or non-intuitive resource lifecycle was found.
  • Configuration: No configuration item is added. The supported disable_nereids_rules='INFER_FILTER_NOT_NULL' path exposes the P1 and was included in the review.
  • Compatibility: No function symbol, protocol, storage-format, or rolling-upgrade contract changes.
  • Parallel paths: All inferNotNullSlots/inferNotNull callers, mark-join handling, MV/exploration consumers, and LEFT/RIGHT/FULL/ASOF paths were traced. They are otherwise conservative or semantics-preserving.
  • Conditional logic: The nullable-side intersection and join weakening conditions are correct for ordinary predicates; the missing filter-wide volatile/NoneMovableFunction condition is the P1.
  • Test coverage: Added tests cover positive and negative join-shape rewrites, including cascades, but not evaluation-sensitive result/error semantics. The newly reachable >32-slot aggregate boundary also lacks focused and row-result coverage.
  • Test results: The modified explain outputs are consistent with the traced join transformations. No build or test was run in this review because the runner instructions prohibit it.
  • Observability: No new runtime subsystem needs logs or metrics; explain-plan output is the relevant existing signal.
  • Transactions and persistence: Not involved; there are no EditLog, failover, or persisted-state changes.
  • Data writes: Not involved; there is no transactionality, atomicity, or crash-recovery path.
  • FE/BE variables: No new cross-module variable or thrift propagation is introduced.
  • Performance: Width, depth, and cumulative 32-slot limits keep fold work bounded; target restriction removes unrelated folds. No additional performance defect was found.
  • Other issues: Existing inline threads about mark-slot targeting and JoinUtils enumeration were deduplicated; no other substantiated issue remains.

User focus: No additional focus was supplied, so the entire PR was reviewed.

@foxtail463

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17632	4262	4224	4224
q2	2084	340	204	204
q3	10284	1482	852	852
q4	4685	479	341	341
q5	7581	857	582	582
q6	189	179	138	138
q7	800	835	616	616
q8	9335	1696	1615	1615
q9	5569	4374	4355	4355
q10	6767	1735	1486	1486
q11	510	351	324	324
q12	761	587	459	459
q13	18090	3405	2748	2748
q14	278	268	246	246
q15	q16	790	783	714	714
q17	996	1047	993	993
q18	7013	5881	5542	5542
q19	1310	1308	1129	1129
q20	816	722	567	567
q21	6086	2701	2331	2331
q22	442	360	299	299
Total cold run time: 102018 ms
Total hot run time: 29765 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4555	4462	4539	4462
q2	308	333	223	223
q3	4617	4981	4405	4405
q4	2170	2186	1360	1360
q5	4510	4332	4386	4332
q6	236	179	128	128
q7	2215	2149	1650	1650
q8	2762	2374	2409	2374
q9	8284	7872	7847	7847
q10	4706	4716	4299	4299
q11	633	463	421	421
q12	788	787	539	539
q13	3224	3780	2940	2940
q14	306	303	287	287
q15	q16	716	735	645	645
q17	1449	1528	1376	1376
q18	7997	7484	7407	7407
q19	1167	1124	1113	1113
q20	2245	2218	1962	1962
q21	5425	4796	4621	4621
q22	537	464	431	431
Total cold run time: 58850 ms
Total hot run time: 52822 ms

@hello-stephen

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

query5	4349	647	500	500
query6	482	252	221	221
query7	4844	614	337	337
query8	337	189	176	176
query9	8793	4080	4087	4080
query10	506	393	316	316
query11	5922	2319	2100	2100
query12	174	103	102	102
query13	1248	596	434	434
query14	6268	5236	4900	4900
query14_1	4257	4242	4258	4242
query15	216	215	187	187
query16	1009	490	492	490
query17	1009	742	586	586
query18	2467	491	368	368
query19	223	204	155	155
query20	113	111	106	106
query21	232	160	135	135
query22	13558	13519	13409	13409
query23	17424	16503	16146	16146
query23_1	16188	16191	16331	16191
query24	7654	1695	1272	1272
query24_1	1300	1279	1257	1257
query25	535	436	369	369
query26	1361	328	212	212
query27	2568	617	376	376
query28	4443	1983	1971	1971
query29	1066	599	497	497
query30	340	267	222	222
query31	1113	1096	978	978
query32	106	64	59	59
query33	517	310	250	250
query34	1160	1169	628	628
query35	757	794	660	660
query36	1026	1011	887	887
query37	157	107	93	93
query38	1885	1708	1674	1674
query39	872	861	853	853
query39_1	824	822	844	822
query40	252	160	141	141
query41	63	62	63	62
query42	93	90	90	90
query43	318	321	283	283
query44	1406	807	756	756
query45	202	190	174	174
query46	1092	1163	733	733
query47	2122	2089	2008	2008
query48	420	403	298	298
query49	583	422	302	302
query50	1057	426	333	333
query51	10595	10650	10637	10637
query52	87	87	75	75
query53	249	276	204	204
query54	274	230	212	212
query55	72	69	63	63
query56	296	288	285	285
query57	1315	1289	1180	1180
query58	278	266	265	265
query59	1557	1603	1395	1395
query60	309	266	250	250
query61	149	147	149	147
query62	538	495	419	419
query63	250	195	214	195
query64	2835	1019	830	830
query65	4735	4666	4638	4638
query66	1847	488	389	389
query67	29304	29160	29030	29030
query68	3216	1468	918	918
query69	409	318	259	259
query70	922	788	812	788
query71	361	330	309	309
query72	3185	2688	2332	2332
query73	794	822	442	442
query74	5060	4904	4718	4718
query75	2555	2509	2145	2145
query76	2351	1200	787	787
query77	350	386	290	290
query78	11882	11890	11218	11218
query79	1242	1096	755	755
query80	630	589	491	491
query81	459	332	294	294
query82	236	159	124	124
query83	326	343	309	309
query84	306	158	139	139
query85	981	682	600	600
query86	290	247	230	230
query87	1804	1841	1771	1771
query88	3667	2810	2787	2787
query89	405	368	333	333
query90	2179	202	202	202
query91	202	188	161	161
query92	62	58	56	56
query93	1536	1516	1030	1030
query94	538	340	321	321
query95	802	519	548	519
query96	984	774	356	356
query97	2633	2595	2486	2486
query98	225	234	203	203
query99	1080	1110	975	975
Total cold run time: 261675 ms
Total hot run time: 177587 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.10	0.05	0.05
query3	0.25	0.15	0.14
query4	1.61	0.14	0.15
query5	0.24	0.23	0.23
query6	1.23	1.13	1.04
query7	0.04	0.01	0.01
query8	0.06	0.03	0.03
query9	0.39	0.42	0.32
query10	0.56	0.54	0.55
query11	0.20	0.14	0.14
query12	0.18	0.14	0.14
query13	0.48	0.48	0.48
query14	1.02	1.02	1.00
query15	0.60	0.59	0.59
query16	0.33	0.32	0.34
query17	1.14	1.17	1.11
query18	0.22	0.22	0.20
query19	2.02	1.94	1.90
query20	0.01	0.02	0.01
query21	15.43	0.23	0.13
query22	4.67	0.05	0.05
query23	16.13	0.31	0.12
query24	2.95	0.43	0.33
query25	0.12	0.05	0.04
query26	0.74	0.22	0.15
query27	0.04	0.04	0.03
query28	3.60	0.93	0.53
query29	12.47	4.17	3.28
query30	0.27	0.16	0.15
query31	2.77	0.63	0.32
query32	3.22	0.59	0.48
query33	3.26	3.11	3.28
query34	15.57	4.26	3.56
query35	3.54	3.50	3.54
query36	0.57	0.43	0.45
query37	0.09	0.07	0.06
query38	0.05	0.03	0.04
query39	0.04	0.03	0.04
query40	0.19	0.17	0.15
query41	0.09	0.03	0.03
query42	0.04	0.03	0.02
query43	0.04	0.03	0.04
Total cold run time: 96.58 s
Total hot run time: 24.95 s

@foxtail463

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 90.70% (39/43) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17644	4046	4046	4046
q2	2079	337	215	215
q3	10218	1389	856	856
q4	4733	484	346	346
q5	7815	883	579	579
q6	248	180	143	143
q7	818	849	642	642
q8	10451	1635	1675	1635
q9	6003	4366	4334	4334
q10	6845	1742	1461	1461
q11	534	353	320	320
q12	758	581	463	463
q13	18098	3233	2732	2732
q14	273	272	252	252
q15	q16	798	783	709	709
q17	997	931	1040	931
q18	7084	5639	5591	5591
q19	1499	1254	985	985
q20	835	738	602	602
q21	5695	2630	2436	2436
q22	430	357	300	300
Total cold run time: 103855 ms
Total hot run time: 29578 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4503	4396	4388	4388
q2	297	316	218	218
q3	4567	4956	4408	4408
q4	2091	2150	1375	1375
q5	4408	4270	4320	4270
q6	236	171	133	133
q7	2326	1961	1567	1567
q8	2576	2164	2309	2164
q9	7818	7880	7812	7812
q10	4694	4663	4228	4228
q11	558	501	454	454
q12	758	765	543	543
q13	3275	3577	3009	3009
q14	308	320	289	289
q15	q16	739	720	650	650
q17	1367	1343	1331	1331
q18	7891	7291	6771	6771
q19	1103	1045	1071	1045
q20	2229	2199	1929	1929
q21	5223	4541	4424	4424
q22	527	440	443	440
Total cold run time: 57494 ms
Total hot run time: 51448 ms

@hello-stephen

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

query5	4316	678	479	479
query6	482	214	202	202
query7	4840	585	340	340
query8	331	193	170	170
query9	8786	4123	4094	4094
query10	478	341	299	299
query11	5954	2326	2132	2132
query12	156	102	101	101
query13	1265	598	461	461
query14	6283	5248	4882	4882
query14_1	4260	4223	4238	4223
query15	220	207	181	181
query16	992	483	453	453
query17	985	700	572	572
query18	2448	482	358	358
query19	220	198	154	154
query20	112	109	106	106
query21	244	161	140	140
query22	13613	13540	13403	13403
query23	17366	16438	16191	16191
query23_1	16315	16170	16173	16170
query24	7492	1782	1291	1291
query24_1	1293	1309	1301	1301
query25	587	493	388	388
query26	1321	362	209	209
query27	2589	575	368	368
query28	4419	2060	2074	2060
query29	1118	655	502	502
query30	352	261	228	228
query31	1120	1118	995	995
query32	106	65	66	65
query33	548	329	262	262
query34	1190	1175	654	654
query35	783	799	703	703
query36	1087	1048	936	936
query37	160	112	101	101
query38	1901	1745	1695	1695
query39	925	904	886	886
query39_1	873	871	887	871
query40	256	211	145	145
query41	64	65	68	65
query42	93	91	91	91
query43	325	329	282	282
query44	1484	815	768	768
query45	202	184	177	177
query46	1102	1283	732	732
query47	2158	2115	2012	2012
query48	418	394	286	286
query49	567	414	310	310
query50	983	425	339	339
query51	10992	10773	10726	10726
query52	85	86	74	74
query53	256	279	207	207
query54	279	243	210	210
query55	73	70	64	64
query56	283	306	278	278
query57	1329	1281	1179	1179
query58	274	256	251	251
query59	1592	1644	1433	1433
query60	313	269	248	248
query61	154	151	147	147
query62	550	493	426	426
query63	247	197	199	197
query64	2792	1007	855	855
query65	4702	4630	4806	4630
query66	1838	498	377	377
query67	29625	29225	29052	29052
query68	3147	1611	915	915
query69	400	297	277	277
query70	966	826	832	826
query71	373	341	319	319
query72	3018	2648	2366	2366
query73	826	725	423	423
query74	5268	4960	4696	4696
query75	2519	2512	2118	2118
query76	2332	1181	754	754
query77	355	386	284	284
query78	11767	11950	11320	11320
query79	1514	1130	762	762
query80	1302	536	481	481
query81	532	340	289	289
query82	605	157	119	119
query83	367	342	299	299
query84	312	155	131	131
query85	967	612	506	506
query86	410	245	222	222
query87	1828	1823	1762	1762
query88	3729	2800	2816	2800
query89	433	365	326	326
query90	1935	188	192	188
query91	205	191	156	156
query92	60	60	57	57
query93	1751	1671	924	924
query94	720	353	298	298
query95	778	506	488	488
query96	1093	803	371	371
query97	2615	2605	2481	2481
query98	228	205	197	197
query99	1086	1105	987	987
Total cold run time: 264456 ms
Total hot run time: 177326 ms

@hello-stephen

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

query1	0.00	0.00	0.00
query2	0.09	0.05	0.05
query3	0.26	0.14	0.13
query4	1.61	0.14	0.13
query5	0.23	0.23	0.22
query6	1.22	1.10	1.09
query7	0.04	0.00	0.00
query8	0.05	0.04	0.04
query9	0.38	0.31	0.32
query10	0.55	0.54	0.54
query11	0.19	0.13	0.14
query12	0.18	0.14	0.14
query13	0.48	0.48	0.48
query14	1.02	1.01	1.01
query15	0.64	0.60	0.59
query16	0.33	0.33	0.32
query17	1.09	1.08	1.15
query18	0.23	0.20	0.22
query19	2.10	1.97	1.97
query20	0.02	0.01	0.02
query21	15.45	0.26	0.15
query22	4.72	0.05	0.05
query23	16.13	0.31	0.12
query24	3.08	0.45	0.34
query25	0.11	0.06	0.05
query26	0.74	0.21	0.17
query27	0.04	0.04	0.04
query28	3.57	0.92	0.54
query29	12.48	4.19	3.31
query30	0.27	0.17	0.15
query31	2.77	0.56	0.31
query32	3.22	0.59	0.49
query33	3.24	3.16	3.22
query34	15.76	4.23	3.52
query35	3.52	3.53	3.54
query36	0.56	0.45	0.45
query37	0.10	0.07	0.07
query38	0.05	0.04	0.04
query39	0.04	0.03	0.03
query40	0.18	0.17	0.15
query41	0.09	0.04	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.04
Total cold run time: 96.91 s
Total hot run time: 25.21 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 28.57% (38/133) 🎉
Increment coverage report
Complete coverage report

@foxtail463

Copy link
Copy Markdown
Contributor Author

run cloud_p0

@foxtail463

Copy link
Copy Markdown
Contributor Author

run external

@morrySnow

Copy link
Copy Markdown
Contributor

/review

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 0.46% (38/8204) 🎉
Increment coverage report
Complete coverage report

1 similar comment
@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 0.46% (38/8204) 🎉
Increment coverage report
Complete coverage report

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

Request changes: one new P1 correctness blocker was found on the reviewed head. The existing evaluation-sensitive outer-join P1 remains unresolved, and the new 33-column unit test is still plan-shape-only rather than the full-rewrite/result coverage requested by the existing P2.

Critical checkpoint conclusions:

  • Goal and proof: Restricting null-reject inference to the current join's nullable outputs works for ordinary deterministic predicates, and the LEFT/RIGHT/FULL/ASOF weakening matrix is sound. The newly reachable partial aggregate path is not generally safe because temporary inferred filters can cross a volatile argument project and make a persistent cardinality rewrite (MAIN-1).
  • Scope and clarity: The join-targeting production change is focused, but removing the aggregate-wide cheapness gate broadens behavior beyond that goal and creates the new blocker.
  • Concurrency: Not involved; these are single-query planner rewrites with no shared mutable state or locking change.
  • Lifecycle: Join-type transitions are monotonic and the unchanged-type guard prevents loops. The defect is an intermediate-lifecycle interaction: generated filters are later removed, but the outer-to-inner rewrite they trigger is not reversed.
  • Configuration: No item is added. The supported disable_nereids_rules='INFER_FILTER_NOT_NULL' path still exposes the already-reported evaluation-sensitive outer-join issue.
  • Compatibility: No protocol, storage format, function symbol used outside this internal planner surface, or rolling-upgrade contract changes.
  • Parallel paths and conditional logic: All shared inference callers, mark-slot behavior, LEFT/RIGHT/FULL/ASOF branches, aggregate variants, and rewrite stages were traced. Their ordinary deterministic behavior is conservative or semantics-preserving; MAIN-1 is the distinct evaluation-sensitive exception.
  • Test coverage and results: Unit and explain tests cover the ordinary join-shape branches, and the modified expected plans are consistent. The new >32 test checks only an isolated rule shape; it does not cover normalization, pushdown, persistent join elimination, volatile evaluation, NULL-row results, or multiple-aggregate intersection. No local build/test was run because this review runner explicitly forbids builds.
  • Observability: No new runtime subsystem needs logs or metrics; explain plans are the relevant existing signal.
  • Transactions, persistence, and data writes: Not involved.
  • FE/BE propagation: No new cross-module variable or thrift field is introduced. BE variadic aggregate NULL handling and seeded-random evaluation were traced to validate MAIN-1.
  • Performance: Width, depth, and cumulative slot limits bound fold work, and target restriction removes irrelevant folds. No additional performance defect was substantiated.
  • Other issues: Existing threads about mark-slot targeting and JoinUtils enumeration were deduplicated; no other unresolved suspicious point remains.

User focus: No additional focus was supplied, so the entire PR was reviewed.

@morrySnow
morrySnow merged commit 3d4c1d3 into apache:master Aug 1, 2026
30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants