Skip to content

[feat](sql-parser) Split SQL grammar into standalone fe-sql-parser#63823

Merged
morningman merged 7 commits into
apache:masterfrom
morningman:wt-doris-parser
May 29, 2026
Merged

[feat](sql-parser) Split SQL grammar into standalone fe-sql-parser#63823
morningman merged 7 commits into
apache:masterfrom
morningman:wt-doris-parser

Conversation

@morningman
Copy link
Copy Markdown
Contributor

@morningman morningman commented May 28, 2026

Summary

Split SQL syntax parsing out of fe-core into a new fe-sql-parser module that produces an ANTLR parse tree (CST) without semantic analysis. The new module can be packaged as an independent jar for external consumers (third-party tools, linters, format converters, etc.) without dragging in LogicalPlan, Catalog, ConnectContext, or any other fe-core internals.

Module changes

  • Move DorisLexer.g4 / DorisParser.g4 and 8 supporting Java files (CaseInsensitiveStream, Origin, ParserUtils, ParseErrorListener, PostProcessor, ParseException, SyntaxParseException, QueryParsingErrors) into fe-sql-parser. Package names are preserved so fe-core's hundreds of imports do not move.
  • ParseException now extends RuntimeException directly to break the chain through nereids.exceptions.AnalysisException, which references LogicalPlan.
  • Introduce an OriginAware SPI in fe-sql-parser so ParserUtils keeps its per-thread field-based fast path (originally added in [refactor](nereids) Support Origin to provide error location #52125). MoreFieldsThread in fe-core implements the interface; threads that don't fall back to ThreadLocal — correctness is identical either way.
  • Add org.apache.doris.sqlparser.DorisSqlParser facade with parseStatement / parseStatements / parseExpression.
  • fe-core reverse-depends on fe-sql-parser; its own antlr4-maven-plugin now only processes the Nereids pattern-generator's JavaLexer.g4 / JavaParser.g4.

The new module's only runtime dependency is org.antlr:antlr4-runtime.

Standalone CLI

mvn -pl fe-sql-parser -Pcli package produces a self-contained executable jar (fe-sql-parser-*-cli.jar, ~1.7 MB after minimize-shade) so the parser can be invoked directly from a shell:

$ java -jar fe-sql-parser-*-cli.jar "SELECT a FROM t WHERE a > 1"
(singleStatement (statement ...) <EOF>)

$ java -jar fe-sql-parser-*-cli.jar --pretty --multi "USE db; SELECT 1; SELECT 2"
$ java -jar fe-sql-parser-*-cli.jar --expression "a + 1 * COALESCE(b, 0)"
$ echo "SELECT 1" | java -jar fe-sql-parser-*-cli.jar
$ java -jar fe-sql-parser-*-cli.jar -f query.sql

The CLI is gated behind the cli Maven profile so default Doris builds do not pay the shading cost; the thin jar consumed by fe-core is unchanged. Exit codes: 0 success, 1 parse error, 2 usage or I/O error.

Extension hooks for downstream tools

Downstream projects can plug in custom logic (SQL lineage, policy enforcement, audit, rewriting, metrics) without modifying fe-sql-parser. Four mechanisms are available:

Mechanism When it fires Typical use
Subclass DorisParserBaseVisitor<T> After parsing Extract information, rewrite, lineage
Subclass DorisParserBaseListener After parsing Simple enter/exit interception
parser.addParseListener(...) via newLexer / newParser Live, during parsing Token-level processing, on-the-fly mutation
Wrap DorisSqlParser Around the call Metrics, caching, request-level policy

fe/fe-sql-parser/README.md contains end-to-end examples for SQL lineage extraction, policy/audit listeners, hint collection during parsing, an instrumented facade with caching and metrics, plus tips on locating rule names and debugging visitors with the CLI. It also documents the build modes, library/Visitor usage, configuration flags (noBackslashEscapes, ansiSqlSyntax), the OriginAware fast-path SPI, and current caveats.

Test plan

  • fe-sql-parser unit tests: 7 new cases in DorisSqlParserTest covering SELECT, SELECT FROM WHERE, multi-statement, expression, DDL (CREATE TABLE with DISTRIBUTED + PROPERTIES), malformed SQL, and trailing-garbage expressions
  • Full fe reactor compiles (mvn -pl fe-core -am compile)
  • fe-core's 15 existing org.apache.doris.nereids.parser.*Test classes pass (160 cases, 0 failures)
  • CLI smoke test: positional / -e / -f / stdin input modes; --multi / --expression parse modes; --pretty output; parse-error exit code

morningman and others added 2 commits May 28, 2026 15:39
Split SQL syntax parsing out of fe-core into a new fe-sql-parser module
that can be packaged as an independent jar for external consumers — no
semantic analysis, no Catalog or LogicalPlan dependencies.

This commit covers the new module only. fe-core is wired to reverse
depend on it in a follow-up commit and does not compile until then.

- Move DorisLexer.g4 / DorisParser.g4 and 8 supporting java files
  (CaseInsensitiveStream, Origin, ParserUtils, ParseErrorListener,
  PostProcessor, ParseException, SyntaxParseException, QueryParsingErrors).
  Package names are preserved so downstream imports do not move.
- ParseException now extends RuntimeException directly to break the chain
  through AnalysisException, which references LogicalPlan.
- ParserUtils drops the MoreFieldsThread fast path; the new module does
  not pull in fe-core thread-local context.
- Add org.apache.doris.sqlparser.DorisSqlParser facade and 7 unit tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fe-core now consumes DorisLexer / DorisParser and the parser support
classes from fe-sql-parser instead of generating them itself. The
generated ANTLR classes keep the same fully qualified names, so all
existing imports inside fe-core continue to resolve without change.

fe-core's own antlr4-maven-plugin configuration is unchanged and now
only processes the remaining JavaLexer.g4 / JavaParser.g4 (used by the
Nereids pattern-generator annotation processor); SQL grammar generation
moved with the .g4 files into fe-sql-parser.

Verified: full fe reactor compiles, fe-core's 15 nereids parser test
classes (160 cases) pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@morningman morningman requested a review from CalvinKirs as a code owner May 28, 2026 08:56
@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?

morningman and others added 4 commits May 28, 2026 17:31
Reintroduce the per-thread field-based fast path that PR apache#52125 added for
ParserUtils. To keep fe-sql-parser independent of fe-core, the fast path
is now gated by a minimal `OriginAware` interface defined in fe-sql-parser
and implemented by fe-core's `MoreFieldsThread`. Threads that don't
implement it continue to use the ThreadLocal slow path — correctness is
identical.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`mvn -pl fe-sql-parser -Pcli package` produces a self-contained
`fe-sql-parser-*-cli.jar` (~1.7 MB after minimize-shade) with
`org.apache.doris.sqlparser.DorisSqlParserCli` as Main-Class. The CLI
reads SQL from a positional argument, `-e`, `-f`, or stdin; parses as
single statement (default), `--multi`, or `--expression`; and prints
the ANTLR parse tree either LISP-style or `--pretty` indented. Exit
codes are 0 success / 1 parse error / 2 usage or I/O error.

The CLI is gated behind the `cli` Maven profile so default builds do
not pay the shading cost. The thin jar consumed by fe-core is unchanged.

Also adds README.md covering both build modes (library jar and CLI),
end-to-end CLI examples, library and Visitor usage, configuration
flags, the OriginAware fast-path SPI, and current caveats.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add an "Extending the Parser" section to fe/fe-sql-parser/README.md
covering the four mechanisms downstream projects can use without
modifying fe-sql-parser itself: Visitor subclasses, Listener subclasses,
live ParseTreeListener hooks via newLexer/newParser, and wrapping the
DorisSqlParser facade.

Includes worked examples for SQL lineage extraction, policy/audit
listeners, hint collection during parsing, and an instrumented facade
with caching and metrics, plus tips on locating rule names and
debugging visitors with the CLI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@morningman
Copy link
Copy Markdown
Contributor Author

run buildall

@morningman
Copy link
Copy Markdown
Contributor Author

/review

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Review summary: no blocking issues found in the actual PR file set.

Critical checkpoints:

  • Goal/test: The PR extracts the Doris Nereids grammar/support classes into a standalone fe-sql-parser module and wires fe-core to depend on it. The module-level tests cover statement, multi-statement, expression, DDL, and malformed SQL parsing.
  • Scope/focus: The change is focused on parser modularization plus the MoreFieldsThread OriginAware bridge. No unrelated code-path changes were present in the GitHub PR file list.
  • Concurrency/lifecycle: DorisSqlParser is stateless; shared ParseErrorListener/PostProcessor instances do not keep mutable per-parse state. Origin tracking remains thread-confined through OriginAware/ThreadLocal.
  • Config/compatibility/storage: No new configs, storage formats, or FE-BE protocol changes.
  • Parallel paths: fe-core now consumes the extracted parser module; parser support classes moved with the grammar, and MoreFieldsThread implements the new OriginAware interface.
  • Tests/results: Ran mvn -pl fe-sql-parser -DskipTests validate and mvn -pl fe-sql-parser test successfully. Attempted mvn -pl fe-core -am -DskipTests compile, but the runner lacks thirdparty/installed/bin/thrift and the build failed in fe-thrift before reaching fe-sql-parser/fe-core.
  • Observability/transactions/data correctness: Not applicable; this is parser packaging/API work and does not affect data visibility, transactions, MoW delete bitmap, or persistence.
  • Performance: No obvious performance regression found; the existing fast Origin path is preserved via OriginAware.

User focus: No additional user-provided review focus was present.

@hello-stephen
Copy link
Copy Markdown
Contributor

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

------ Round 1 ----------------------------------
orders	Doris	NULL	NULL	0	0	0	NULL	0	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	17763	3981	3973	3973
q2	q3	10782	1370	804	804
q4	4683	471	353	353
q5	7673	2298	2063	2063
q6	279	176	137	137
q7	999	779	650	650
q8	9347	1759	1515	1515
q9	6860	4968	4932	4932
q10	6456	2232	1879	1879
q11	432	275	244	244
q12	697	417	291	291
q13	18305	3422	2779	2779
q14	265	257	241	241
q15	q16	816	782	707	707
q17	982	992	947	947
q18	6881	5651	5507	5507
q19	1199	1291	1045	1045
q20	502	415	257	257
q21	5649	2571	2390	2390
q22	427	365	305	305
Total cold run time: 100997 ms
Total hot run time: 31019 ms

----- Round 2, with runtime_filter_mode=off -----
orders	Doris	NULL	NULL	150000000	42	6422171781	NULL	22778155	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	4317	4230	4230	4230
q2	q3	4538	4921	4351	4351
q4	2079	2176	1394	1394
q5	4419	4294	4296	4294
q6	336	270	161	161
q7	2136	1935	1591	1591
q8	2490	2348	2110	2110
q9	7984	7903	7936	7903
q10	4832	4736	4305	4305
q11	650	416	374	374
q12	753	744	536	536
q13	3315	3655	3003	3003
q14	306	294	258	258
q15	q16	722	728	659	659
q17	1349	1309	1358	1309
q18	7837	7596	6887	6887
q19	1128	1072	1120	1072
q20	2204	2192	1924	1924
q21	5235	4552	4385	4385
q22	526	444	414	414
Total cold run time: 57156 ms
Total hot run time: 51160 ms

@hello-stephen
Copy link
Copy Markdown
Contributor

TPC-DS: Total hot run time: 173189 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 69495f97c47ba67240c8be46438db3b94c83a99b, data reload: false

query5	4328	679	546	546
query6	334	240	201	201
query7	4218	558	305	305
query8	331	261	232	232
query9	8808	4126	4146	4126
query10	468	346	300	300
query11	5807	2609	2240	2240
query12	181	133	132	132
query13	1276	632	427	427
query14	6161	5533	5238	5238
query14_1	4551	4559	4613	4559
query15	223	206	191	191
query16	1023	476	453	453
query17	1166	763	610	610
query18	2482	500	367	367
query19	232	218	172	172
query20	143	133	131	131
query21	221	155	125	125
query22	13724	13642	13462	13462
query23	17436	16608	16287	16287
query23_1	16478	16399	16460	16399
query24	7466	1772	1313	1313
query24_1	1320	1316	1335	1316
query25	546	490	437	437
query26	1317	342	170	170
query27	2688	587	338	338
query28	4449	2031	2026	2026
query29	1008	659	497	497
query30	303	237	202	202
query31	1110	1067	959	959
query32	90	76	73	73
query33	567	341	304	304
query34	1194	1186	666	666
query35	782	802	707	707
query36	1368	1401	1262	1262
query37	157	105	90	90
query38	3236	3173	3075	3075
query39	935	913	890	890
query39_1	874	892	877	877
query40	238	145	129	129
query41	67	63	62	62
query42	111	113	110	110
query43	347	363	312	312
query44	
query45	220	204	206	204
query46	1110	1218	735	735
query47	2371	2314	2258	2258
query48	380	405	289	289
query49	644	503	410	410
query50	992	358	263	263
query51	4348	4302	4313	4302
query52	108	111	95	95
query53	252	291	210	210
query54	316	283	284	283
query55	94	97	85	85
query56	326	319	316	316
query57	1483	1493	1372	1372
query58	315	266	278	266
query59	1684	1764	1545	1545
query60	322	340	324	324
query61	167	162	159	159
query62	717	634	599	599
query63	263	213	218	213
query64	2465	879	733	733
query65	
query66	1788	504	395	395
query67	29904	29719	29582	29582
query68	
query69	493	360	327	327
query70	1012	1040	984	984
query71	325	288	280	280
query72	3249	2717	2451	2451
query73	884	769	437	437
query74	5106	4941	4796	4796
query75	2688	2608	2279	2279
query76	2261	1172	778	778
query77	407	429	353	353
query78	12494	12502	11913	11913
query79	1491	1058	770	770
query80	788	567	469	469
query81	482	283	238	238
query82	1371	164	125	125
query83	354	288	253	253
query84	257	147	110	110
query85	915	556	458	458
query86	430	373	314	314
query87	3481	3394	3284	3284
query88	3689	2765	2736	2736
query89	456	397	353	353
query90	1792	186	184	184
query91	183	171	149	149
query92	87	83	74	74
query93	1509	1417	900	900
query94	595	352	301	301
query95	662	493	376	376
query96	1000	831	330	330
query97	2746	2761	2585	2585
query98	233	230	230	230
query99	1192	1150	1020	1020
Total cold run time: 255398 ms
Total hot run time: 173189 ms

@hello-stephen
Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 100% (0/0) 🎉
Increment coverage report
Complete coverage report

…ance

Earlier in this PR `ParseException` was changed to extend `RuntimeException`
directly so that fe-sql-parser would not pull in `LogicalPlan` (referenced
by `nereids.exceptions.AnalysisException`). That broke catch sites in
fe-core that rely on `try { ... } catch (AnalysisException) { ... }` to
also catch parse-time failures — observed concretely in
`CreateTableTest#testAbnormal`, which uses
`expectThrowsWithMsg(AnalysisException.class, ...)` against SQL that the
parser rejects.

Fix by moving `AnalysisException` itself into fe-sql-parser. The
`Optional<LogicalPlan> plan` field was dead code (no fe-core caller ever
populated it; only `CastException` passed `Optional.empty()` explicitly),
so it is removed along with the `plan.treeString()` branch in
`getMessage()`. Everything else about `AnalysisException` is unchanged:
the package, the public constructors that fe-core actually calls, the
`ErrorCode` enum, and the line/pos rendering.

With that, `ParseException extends AnalysisException` is restored and
fe-core's catch chains behave as before. fe-core's `CastException` is
updated to drop its `Optional.empty()` plan argument so it matches the
slimmed-down 4-arg constructor.

Verified:
- fe-sql-parser unit tests (7) pass.
- Full fe reactor compiles.
- `CreateTableTest#testAbnormal` passes.
- 15 nereids parser test classes (160 cases) pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@morningman
Copy link
Copy Markdown
Contributor Author

run buildall

@morningman
Copy link
Copy Markdown
Contributor Author

/review

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Review result: no blocking issues found in the PR scope.

Critical checkpoint conclusions:

  • Goal/test proof: The PR splits SQL grammar/support into fe-sql-parser, wires fe-core to depend on it, restores ParseException -> AnalysisException, and adds parser facade/CLI tests. The included unit tests cover basic statement, multi-statement, expression, DDL, and malformed input paths.
  • Scope/focus: Changes are focused on parser modularization and build wiring; no unrelated behavioral rewrite was identified in the actual PR diff.
  • Concurrency/lifecycle: The new OriginAware fast path is thread-owned field storage only; DorisSqlParser creates fresh lexer/parser/token streams per call and shared listener instances are stateless.
  • Configuration/compatibility: No new Doris runtime config or persisted format/protocol change. Keeping package names and restoring ParseException as an AnalysisException preserves FE catch-site behavior.
  • Parallel code paths: Existing NereidsParser continues using the moved grammar/support classes; the standalone facade has matching parser setup knobs for external callers.
  • Error handling: Parser syntax errors still go through ParseErrorListener/ParseException; RPC/persistence boundaries are not involved.
  • Test coverage: Parser module tests were added. I could not run FE Maven tests in this runner because thirdparty/installed/bin/protoc is missing, and FE build instructions require stopping before build in that case.
  • Observability/performance: No new runtime service path requiring metrics/logging. The hot-path origin storage optimization is preserved through OriginAware without adding synchronization.
  • Transaction/data correctness/security: Not applicable to this parser/module split.

User focus: no additional user-provided review focus was present.

@hello-stephen
Copy link
Copy Markdown
Contributor

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

------ Round 1 ----------------------------------
orders	Doris	NULL	NULL	0	0	0	NULL	0	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	17809	3950	3956	3950
q2	q3	10779	1322	793	793
q4	4676	474	339	339
q5	7526	2203	2085	2085
q6	314	171	139	139
q7	933	765	628	628
q8	9421	1783	1653	1653
q9	7153	4885	4914	4885
q10	6426	2239	1872	1872
q11	436	267	237	237
q12	691	419	292	292
q13	18271	3430	2794	2794
q14	261	262	229	229
q15	q16	823	777	708	708
q17	983	903	944	903
q18	6651	5696	5586	5586
q19	1184	1401	1108	1108
q20	532	416	282	282
q21	5917	2771	2474	2474
q22	468	374	306	306
Total cold run time: 101254 ms
Total hot run time: 31263 ms

----- Round 2, with runtime_filter_mode=off -----
orders	Doris	NULL	NULL	150000000	42	6422171781	NULL	22778155	NULL	NULL	2023-12-26 18:27:23	2023-12-26 18:42:55	NULL	utf-8	NULL	NULL	
============================================
q1	4906	4759	4979	4759
q2	q3	4845	5231	4672	4672
q4	2134	2222	1403	1403
q5	4932	4662	4661	4661
q6	233	172	127	127
q7	1865	1744	1520	1520
q8	2306	2029	1902	1902
q9	7341	7379	7359	7359
q10	4775	4688	4233	4233
q11	533	382	354	354
q12	738	749	532	532
q13	3043	3429	2841	2841
q14	274	277	246	246
q15	q16	677	711	604	604
q17	1282	1246	1243	1243
q18	7275	6935	6745	6745
q19	1136	1096	1108	1096
q20	2218	2219	1940	1940
q21	5266	4538	4434	4434
q22	507	454	403	403
Total cold run time: 56286 ms
Total hot run time: 51074 ms

@hello-stephen
Copy link
Copy Markdown
Contributor

TPC-DS: Total hot run time: 172031 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 054c656c52c6150849187ea9d4fa013bd8cb11e4, data reload: false

query5	4322	667	540	540
query6	335	221	199	199
query7	4255	565	324	324
query8	316	232	217	217
query9	8806	4056	4003	4003
query10	456	359	306	306
query11	5808	2444	2283	2283
query12	190	135	131	131
query13	1290	632	455	455
query14	6143	5448	5164	5164
query14_1	4494	4534	4492	4492
query15	217	219	187	187
query16	1008	466	479	466
query17	1165	747	615	615
query18	2766	498	367	367
query19	240	207	171	171
query20	143	134	133	133
query21	227	141	118	118
query22	13631	13606	13406	13406
query23	17529	16667	16201	16201
query23_1	16376	16348	16383	16348
query24	7431	1799	1313	1313
query24_1	1343	1326	1346	1326
query25	607	478	421	421
query26	1319	301	170	170
query27	2775	554	347	347
query28	4417	1970	2023	1970
query29	1021	625	510	510
query30	308	228	196	196
query31	1126	1075	983	983
query32	84	75	72	72
query33	545	368	292	292
query34	1220	1132	672	672
query35	774	804	713	713
query36	1401	1388	1265	1265
query37	166	103	91	91
query38	3225	3224	3057	3057
query39	935	919	908	908
query39_1	874	886	871	871
query40	226	152	123	123
query41	66	61	63	61
query42	113	113	107	107
query43	332	335	290	290
query44	
query45	210	207	205	205
query46	1103	1182	753	753
query47	2309	2399	2250	2250
query48	406	396	302	302
query49	629	498	388	388
query50	966	344	256	256
query51	4321	4308	4316	4308
query52	106	105	95	95
query53	268	287	214	214
query54	311	271	259	259
query55	94	90	84	84
query56	304	333	324	324
query57	1470	1432	1319	1319
query58	304	272	277	272
query59	1567	1695	1416	1416
query60	318	325	313	313
query61	162	158	148	148
query62	697	676	567	567
query63	246	201	214	201
query64	2409	884	631	631
query65	
query66	1651	476	366	366
query67	30060	29850	29023	29023
query68	
query69	465	335	310	310
query70	1086	1003	932	932
query71	329	279	270	270
query72	3095	2675	2424	2424
query73	869	762	464	464
query74	5099	5013	4827	4827
query75	2689	2630	2271	2271
query76	2318	1156	754	754
query77	402	418	329	329
query78	12579	12492	11825	11825
query79	1532	1076	770	770
query80	647	535	467	467
query81	463	283	248	248
query82	1366	165	128	128
query83	358	284	256	256
query84	254	141	114	114
query85	908	554	457	457
query86	412	376	357	357
query87	3453	3403	3265	3265
query88	3577	2710	2698	2698
query89	456	402	343	343
query90	1888	181	184	181
query91	176	166	142	142
query92	78	77	74	74
query93	1511	1451	922	922
query94	539	363	329	329
query95	652	379	435	379
query96	1049	785	352	352
query97	2754	2729	2616	2616
query98	237	232	232	232
query99	1186	1152	1040	1040
Total cold run time: 255181 ms
Total hot run time: 172031 ms

@hello-stephen
Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 100.00% (1/1) 🎉
Increment coverage report
Complete coverage report

@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label May 29, 2026
@github-actions
Copy link
Copy Markdown
Contributor

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

@github-actions
Copy link
Copy Markdown
Contributor

PR approved by anyone and no changes requested.

@hello-stephen
Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 0.85% (1/117) 🎉
Increment coverage report
Complete coverage report

@morningman morningman merged commit 7fc8e27 into apache:master May 29, 2026
31 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. reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants