Skip to content

Conversation

@starocean999
Copy link
Contributor

Refactor recursive-CTE fe part.

Related PR: #58916

Summary

  • Description: Replace the legacy RecursiveCTE model with a clearer RecursiveUnion model (anchor / producer / work-table reference), update planner/physical nodes, runtime Thrift wiring, stats, visitors and tests to match.
  • Motivation: Separate anchor (initial rows) and producer (recursive body) responsibilities; make work-table explicit; deliver BE control/reset info via Thrift.

High-Level Design Changes

  • Model Change: Introduced RecursiveUnion concept (anchor / producer / work-table reference) replacing old RecursiveCte/RecursiveCteScan model.
  • Stats: New estimation flow for recursive nodes and an expansion ratio to estimate recursion growth.
  • Types: Added equalsForRecursiveCte hooks for type-equality checks used during recursive compatibility/coercion.

Logical / Physical Nodes Added

  • LogicalRecursiveUnion: LogicalRecursiveUnion.java — new main logical node representing recursive union.
  • LogicalRecursiveUnionAnchor: LogicalRecursiveUnionAnchor.java — anchor sentinel (initial side).
  • LogicalRecursiveUnionProducer: LogicalRecursiveUnionProducer.java — producer sentinel (recursive side).
  • LogicalWorkTableReference: LogicalWorkTableReference.java — logical ref to recursive work table.
  • Physical counterparts:
    • PhysicalRecursiveUnion: PhysicalRecursiveUnion.java
    • PhysicalRecursiveUnionAnchor: PhysicalRecursiveUnionAnchor.java
    • PhysicalRecursiveUnionProducer: PhysicalRecursiveUnionProducer.java
    • PhysicalWorkTableReference: PhysicalWorkTableReference.java

Removed / Renamed

  • Removed old scan/job classes: LogicalRecursiveCteScan, PhysicalRecursiveCteScan, UnassignedRecursiveCteScanJob were deleted.
    • Deleted: fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRecursiveCteScan.java
    • Deleted: fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalRecursiveCteScan.java
    • Deleted: fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/distribute/worker/job/UnassignedRecursiveCteScanJob.java

Visitor / Copier / Planner Updates

  • PlanVisitor / RelationVisitor: Added visitors for the new nodes and removed/renamed the old recursive-cte visit methods.
    • Files: PlanVisitor.java, RelationVisitor.java
  • Deep copy: LogicalPlanDeepCopier support for new RecursiveUnion nodes.
    • File: LogicalPlanDeepCopier.java

Rewrite / Optimization Rules

  • CTEInline / ColumnPruning / AdjustNullable: Adjusted to work with new node types; legacy per-recursive-node logic removed or migrated.
    • Files:
      • CTEInline.java
      • ColumnPruning.java
      • AdjustNullable.java

Distribution / Job Builder

  • UnassignedJobBuilder: Removed special-case for recursive-CTE scanning; new sentinel nodes drive shuffle/assignment decisions.
    • File: UnassignedJobBuilder.java

Statistics / Cost

  • StatsCalculator: Reworked to support new nodes and added RECURSIVE_CTE_EXPAND_RATION to estimate recursion expansion; anchor stores producer stats by CTEId.
    • File: StatsCalculator.java

Type Equality

  • DataType equality hooks: Added equalsForRecursiveCte and specific implementations for complex types to relax/adjust equality semantics in recursive contexts.
    • Files: DataType.java, StructType.java, VariantType.java

Analyzer / CTE handling

  • LogicalCTE: field renamed to isRecursive and usage updated.
    • File: LogicalCTE.java
  • LogicalSubQueryAlias: enhanced logic to detect recursive CTE by relation name (case handling) to differentiate analysis paths.
    • File: LogicalSubQueryAlias.java

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.
  • 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
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?

@starocean999
Copy link
Contributor Author

run buildall

@starocean999
Copy link
Contributor Author

run buildall

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17596	4230	4061	4061
q2	2128	345	259	259
q3	10095	1249	721	721
q4	10213	835	301	301
q5	7501	2037	1822	1822
q6	180	165	134	134
q7	925	783	638	638
q8	9267	1391	1124	1124
q9	4877	4684	4673	4673
q10	6758	1819	1416	1416
q11	519	295	277	277
q12	701	730	571	571
q13	17790	3800	3075	3075
q14	292	292	272	272
q15	592	525	512	512
q16	658	668	652	652
q17	640	800	475	475
q18	6568	6401	6863	6401
q19	1098	1062	648	648
q20	398	407	263	263
q21	3166	2612	2473	2473
q22	1177	1079	1052	1052
Total cold run time: 103139 ms
Total hot run time: 31820 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4289	4181	4217	4181
q2	343	433	322	322
q3	2269	2836	2486	2486
q4	1465	1842	1434	1434
q5	4663	4337	4406	4337
q6	215	166	124	124
q7	1962	1912	1742	1742
q8	2551	2415	2312	2312
q9	7196	7313	7183	7183
q10	2579	2664	2295	2295
q11	549	475	441	441
q12	698	731	573	573
q13	3291	3791	3094	3094
q14	280	278	261	261
q15	521	486	479	479
q16	625	651	597	597
q17	1081	1233	1299	1233
q18	7341	7272	7123	7123
q19	830	756	786	756
q20	1877	1922	1816	1816
q21	4409	4252	4001	4001
q22	1076	1015	969	969
Total cold run time: 50110 ms
Total hot run time: 47759 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 173839 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 9f75bd8d6c123e4572fe07b196b968c503667eed, data reload: false

query5	4405	621	473	473
query6	330	221	224	221
query7	4239	455	259	259
query8	352	267	251	251
query9	8747	2860	2856	2856
query10	479	389	328	328
query11	15320	15329	14912	14912
query12	170	121	113	113
query13	1262	487	387	387
query14	6237	3027	2763	2763
query14_1	2662	2691	2667	2667
query15	204	189	179	179
query16	966	472	447	447
query17	1122	692	577	577
query18	2533	439	341	341
query19	230	225	199	199
query20	120	116	114	114
query21	219	134	120	120
query22	3912	4140	3990	3990
query23	16083	15780	15373	15373
query23_1	15360	15526	15593	15526
query24	7157	1571	1160	1160
query24_1	1181	1181	1169	1169
query25	556	464	438	438
query26	1267	262	155	155
query27	2771	436	273	273
query28	4548	2105	2110	2105
query29	809	547	450	450
query30	316	247	209	209
query31	772	625	579	579
query32	89	81	71	71
query33	545	369	314	314
query34	922	869	536	536
query35	721	786	678	678
query36	829	916	871	871
query37	127	97	83	83
query38	2675	2731	2595	2595
query39	785	757	741	741
query39_1	709	702	710	702
query40	221	130	118	118
query41	64	62	60	60
query42	102	100	96	96
query43	407	422	423	422
query44	1319	710	733	710
query45	184	186	177	177
query46	816	932	563	563
query47	1408	1441	1430	1430
query48	321	314	244	244
query49	599	435	332	332
query50	616	268	213	213
query51	3759	4137	3801	3801
query52	103	108	98	98
query53	288	317	273	273
query54	285	262	264	262
query55	80	80	78	78
query56	304	298	292	292
query57	1034	999	928	928
query58	271	259	259	259
query59	2152	2206	2051	2051
query60	331	332	310	310
query61	154	159	147	147
query62	396	349	312	312
query63	297	266	261	261
query64	4900	1315	975	975
query65	3794	3636	3741	3636
query66	1420	404	322	322
query67	15595	15524	15379	15379
query68	2429	1061	755	755
query69	446	362	321	321
query70	991	972	939	939
query71	319	306	281	281
query72	5469	3257	3068	3068
query73	596	744	301	301
query74	8663	8683	8658	8658
query75	2739	2792	2443	2443
query76	2287	1055	651	651
query77	349	374	300	300
query78	9624	9750	9166	9166
query79	2305	878	594	594
query80	1760	559	484	484
query81	534	259	235	235
query82	947	143	113	113
query83	320	263	237	237
query84	252	114	88	88
query85	897	493	437	437
query86	405	300	324	300
query87	2810	2866	2765	2765
query88	3470	2561	2536	2536
query89	378	347	316	316
query90	1983	168	161	161
query91	174	153	134	134
query92	74	75	66	66
query93	1087	873	531	531
query94	653	287	278	278
query95	573	323	376	323
query96	632	495	223	223
query97	2332	2389	2301	2301
query98	205	202	196	196
query99	594	602	502	502
Total cold run time: 248292 ms
Total hot run time: 173839 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.76 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 9f75bd8d6c123e4572fe07b196b968c503667eed, data reload: false

query1	0.06	0.05	0.05
query2	0.10	0.04	0.04
query3	0.26	0.09	0.08
query4	1.61	0.12	0.11
query5	0.26	0.25	0.24
query6	1.14	0.66	0.65
query7	0.04	0.03	0.03
query8	0.06	0.04	0.04
query9	0.57	0.50	0.49
query10	0.55	0.55	0.54
query11	0.14	0.10	0.09
query12	0.14	0.10	0.10
query13	0.59	0.59	0.60
query14	0.94	0.94	0.95
query15	0.79	0.76	0.77
query16	0.39	0.39	0.40
query17	1.10	1.05	1.05
query18	0.23	0.22	0.21
query19	1.89	1.93	1.86
query20	0.02	0.01	0.02
query21	15.96	0.28	0.15
query22	5.52	0.05	0.04
query23	15.96	0.29	0.10
query24	1.44	0.35	0.18
query25	0.09	0.08	0.08
query26	0.15	0.13	0.14
query27	0.06	0.08	0.06
query28	3.36	1.07	0.91
query29	12.54	3.88	3.16
query30	0.28	0.14	0.11
query31	2.82	0.62	0.40
query32	3.25	0.57	0.46
query33	2.97	3.04	3.03
query34	15.90	5.07	4.41
query35	4.43	4.42	4.51
query36	0.64	0.51	0.50
query37	0.11	0.07	0.06
query38	0.07	0.04	0.03
query39	0.04	0.04	0.03
query40	0.17	0.14	0.13
query41	0.09	0.03	0.03
query42	0.04	0.04	0.04
query43	0.05	0.04	0.03
Total cold run time: 96.82 s
Total hot run time: 26.76 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 66.21% (241/364) 🎉
Increment coverage report
Complete coverage report

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR refactors the recursive CTE implementation in Apache Doris's Frontend by replacing the legacy RecursiveCTE model with a clearer RecursiveUnion model. The refactor separates anchor (initial rows) and producer (recursive body) responsibilities and makes work-table references explicit.

Changes:

  • Introduced new RecursiveUnion model with anchor/producer/work-table reference sentinel nodes
  • Removed legacy RecursiveCte/RecursiveCteScan classes and replaced with new implementation
  • Updated type equality checks for recursive CTE compatibility

Reviewed changes

Copilot reviewed 56 out of 56 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
PhysicalWorkTableReference.java New physical node for work table reference
LogicalWorkTableReference.java New logical node for work table reference
PhysicalRecursiveUnion*.java New physical nodes for recursive union, anchor, and producer
LogicalRecursiveUnion*.java New logical nodes for recursive union, anchor, and producer
RecursiveCteScanNode.java Simplified scan node, removed ScanNode inheritance
ThriftPlansBuilder.java Enhanced documentation for recursive CTE handling
StatsCalculator.java Updated statistics calculation for new nodes
ColumnPruning.java Removed legacy recursive CTE pruning logic
Test files Updated to use new API

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

return false;
}
PhysicalWorkTableReference that = (PhysicalWorkTableReference) o;
return cteId.equals(that.cteId) && nameParts.equals(that.nameParts) && outputs.equals(outputs);
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

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

In the equals method, outputs.equals(outputs) compares outputs to itself instead of comparing to that.outputs. This should be outputs.equals(that.outputs).

Copilot uses AI. Check for mistakes.
return false;
}
LogicalWorkTableReference that = (LogicalWorkTableReference) o;
return cteId.equals(that.cteId) && nameParts.equals(that.nameParts) && outputs.equals(outputs);
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

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

In the equals method, outputs.equals(outputs) compares outputs to itself instead of comparing to that.outputs. This should be outputs.equals(that.outputs).

Copilot uses AI. Check for mistakes.

@Override
public String toString() {
return Utils.toSqlStringSkipNull("PhysicalRecursiveCteRecursiveChild",
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

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

The toString() method uses an outdated class name 'PhysicalRecursiveCteRecursiveChild' instead of the current class name 'PhysicalRecursiveUnionAnchor'.

Copilot uses AI. Check for mistakes.
public static double DEFAULT_AGGREGATE_RATIO = 1 / 3.0;
public static double AGGREGATE_COLUMN_CORRELATION_COEFFICIENT = 0.75;
public static double DEFAULT_COLUMN_NDV_RATIO = 0.5;
public static double RECURSIVE_CTE_EXPAND_RATION = 5.0;
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

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

Corrected spelling of 'RATION' to 'RATIO'.

Suggested change
public static double RECURSIVE_CTE_EXPAND_RATION = 5.0;
public static double RECURSIVE_CTE_EXPAND_RATIO = 5.0;
@Deprecated
public static double RECURSIVE_CTE_EXPAND_RATION = RECURSIVE_CTE_EXPAND_RATIO;

Copilot uses AI. Check for mistakes.
*/
public Statistics computeRecursiveCte(RecursiveCte recursiveCte, List<Statistics> childStats) {
// TODO: refactor this for one row relation
// simliar as computeUnion
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

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

Corrected spelling of 'simliar' to 'similar'.

Suggested change
// simliar as computeUnion
// similar as computeUnion

Copilot uses AI. Check for mistakes.
@starocean999
Copy link
Contributor Author

run buildall

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 66.21% (241/364) 🎉
Increment coverage report
Complete coverage report

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17646	4194	4102	4102
q2	2032	357	247	247
q3	10161	1297	743	743
q4	10218	874	318	318
q5	7755	2125	1919	1919
q6	249	179	150	150
q7	949	804	659	659
q8	9279	1459	1100	1100
q9	5072	4774	4609	4609
q10	6755	1826	1410	1410
q11	508	301	292	292
q12	690	751	597	597
q13	17781	3864	3138	3138
q14	293	291	289	289
q15	594	501	513	501
q16	715	672	652	652
q17	658	803	521	521
q18	6799	6394	6364	6364
q19	1238	995	634	634
q20	397	365	239	239
q21	3160	2590	2311	2311
q22	1028	1027	955	955
Total cold run time: 103977 ms
Total hot run time: 31750 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4129	4074	4068	4068
q2	342	372	327	327
q3	2108	2597	2218	2218
q4	1330	1741	1307	1307
q5	4139	4087	4134	4087
q6	208	171	136	136
q7	1873	1858	2052	1858
q8	2688	2478	2509	2478
q9	7273	7224	7151	7151
q10	2537	2833	2247	2247
q11	578	490	476	476
q12	717	766	613	613
q13	3554	4226	3804	3804
q14	294	299	273	273
q15	550	509	505	505
q16	617	695	660	660
q17	1248	1378	1619	1378
q18	8093	7796	7610	7610
q19	896	865	874	865
q20	1950	2256	1889	1889
q21	4943	4431	4289	4289
q22	1089	1004	992	992
Total cold run time: 51156 ms
Total hot run time: 49231 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 174446 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 7f745fddab582f6314d51bcc5a5e221dca8dd2cd, data reload: false

query5	4426	620	492	492
query6	356	250	229	229
query7	4220	453	266	266
query8	349	254	247	247
query9	8723	2922	2880	2880
query10	558	380	328	328
query11	15312	15369	14904	14904
query12	174	124	114	114
query13	1278	500	404	404
query14	6135	3017	2797	2797
query14_1	2710	2641	2717	2641
query15	198	190	172	172
query16	994	497	463	463
query17	1115	682	583	583
query18	2454	460	353	353
query19	222	222	229	222
query20	118	111	113	111
query21	213	134	114	114
query22	3964	3943	3864	3864
query23	15979	15738	15220	15220
query23_1	15402	15407	15434	15407
query24	7117	1549	1158	1158
query24_1	1153	1159	1182	1159
query25	538	445	408	408
query26	1241	264	148	148
query27	2773	436	308	308
query28	4549	2130	2146	2130
query29	788	535	419	419
query30	309	239	203	203
query31	811	627	561	561
query32	83	75	74	74
query33	529	357	313	313
query34	906	873	532	532
query35	712	754	684	684
query36	853	916	840	840
query37	139	95	85	85
query38	2722	2736	2666	2666
query39	767	744	732	732
query39_1	709	719	705	705
query40	223	138	120	120
query41	68	67	64	64
query42	106	99	100	99
query43	452	457	459	457
query44	1362	758	730	730
query45	185	184	178	178
query46	828	949	577	577
query47	1414	1425	1271	1271
query48	335	332	252	252
query49	615	426	339	339
query50	615	277	208	208
query51	3815	3805	3752	3752
query52	107	111	98	98
query53	295	326	273	273
query54	299	270	283	270
query55	86	80	76	76
query56	306	302	304	302
query57	1013	1056	937	937
query58	275	259	262	259
query59	2166	2210	2108	2108
query60	347	333	325	325
query61	166	161	162	161
query62	388	353	310	310
query63	302	269	266	266
query64	5048	1426	1057	1057
query65	3840	3736	3716	3716
query66	1456	422	313	313
query67	15824	15704	15444	15444
query68	2414	1081	763	763
query69	449	355	333	333
query70	1016	970	958	958
query71	317	316	293	293
query72	5417	3302	3331	3302
query73	596	739	319	319
query74	8704	8851	8605	8605
query75	2761	2814	2461	2461
query76	2280	1053	651	651
query77	356	383	302	302
query78	9805	9782	9205	9205
query79	1052	900	568	568
query80	1198	612	505	505
query81	524	260	236	236
query82	1342	145	107	107
query83	366	256	241	241
query84	264	115	98	98
query85	995	539	467	467
query86	358	300	322	300
query87	2821	2932	2804	2804
query88	3497	2598	2580	2580
query89	391	362	327	327
query90	1875	173	166	166
query91	174	167	147	147
query92	73	80	71	71
query93	897	905	533	533
query94	582	339	310	310
query95	595	347	326	326
query96	678	509	235	235
query97	2342	2357	2300	2300
query98	216	199	200	199
query99	641	581	496	496
Total cold run time: 247457 ms
Total hot run time: 174446 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.66 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 7f745fddab582f6314d51bcc5a5e221dca8dd2cd, data reload: false

query1	0.06	0.05	0.05
query2	0.09	0.05	0.04
query3	0.25	0.08	0.08
query4	1.61	0.12	0.11
query5	0.27	0.25	0.25
query6	1.15	0.67	0.65
query7	0.03	0.02	0.03
query8	0.05	0.04	0.05
query9	0.58	0.52	0.50
query10	0.56	0.55	0.54
query11	0.14	0.10	0.10
query12	0.14	0.11	0.11
query13	0.59	0.58	0.59
query14	0.95	0.93	0.95
query15	0.79	0.78	0.77
query16	0.40	0.40	0.39
query17	1.07	1.01	1.07
query18	0.22	0.21	0.21
query19	1.98	1.90	1.86
query20	0.02	0.01	0.01
query21	15.45	0.27	0.13
query22	5.13	0.05	0.05
query23	15.84	0.30	0.10
query24	1.16	0.64	0.19
query25	0.09	0.09	0.08
query26	0.14	0.14	0.14
query27	0.13	0.06	0.05
query28	4.09	1.09	0.87
query29	12.57	3.96	3.14
query30	0.28	0.14	0.12
query31	2.85	0.62	0.40
query32	3.26	0.57	0.45
query33	3.05	2.98	3.08
query34	16.14	5.06	4.41
query35	4.49	4.46	4.56
query36	0.65	0.50	0.50
query37	0.11	0.06	0.07
query38	0.07	0.04	0.04
query39	0.05	0.03	0.02
query40	0.17	0.14	0.13
query41	0.10	0.03	0.03
query42	0.05	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 96.86 s
Total hot run time: 26.66 s

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 68.13% (248/364) 🎉
Increment coverage report
Complete coverage report

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 66.48% (242/364) 🎉
Increment coverage report
Complete coverage report

@github-actions
Copy link
Contributor

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

@github-actions github-actions bot added approved Indicates a PR has been approved by one committer. reviewed labels Jan 19, 2026
@github-actions
Copy link
Contributor

PR approved by anyone and no changes requested.

@starocean999 starocean999 marked this pull request as ready for review January 20, 2026 02:14
@starocean999 starocean999 merged commit e723190 into apache:master Jan 20, 2026
28 of 29 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. rec_cte reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants