feat: optimize collecting entity when match empty column in entityCollecting context#467
Merged
Merged
Conversation
liuxy0551
reviewed
May 19, 2026
8aa5369 to
55616b2
Compare
55616b2 to
c8529f1
Compare
liuxy0551
approved these changes
May 19, 2026
Cythia828
added a commit
that referenced
this pull request
May 20, 2026
* chore(release): 4.3.0 * fix(common): #424 allTokens slice when caretTokenIndex use tokenIndexOffset (#426) * test: #424 syntax after comments * fix(common): #424 allTokens slice when caretTokenIndex use tokenIndexOffset * chore(release): 4.3.1 * fix(postgresql): #432 remove error rule * test: #432 validate unComplete sql * fix: #432 remove error rule * feat: mark as entityCollecting in getAllEntities context to allow empty column * chore: update jest.config.js to hide console.log * fix(flink): #442 fix flink's insert values() can't support function problem * feat: remove noReserved keywords in completions * test: add filter keywords test case * test: #438 sync suggestion no duplicate syntaxContextType * fix: #438 syntaxContextType not duplicate * chore(release): 4.4.0-beta.0 * chore(release): 4.4.0 * feat: support query result and derived table entity collecting (#434) * feat: support queryResult and derived table entities collecting * feat: support query result and derived table entity collecting * test: enhance hive and spark entity collect test case * fix: remove _ctx and add tokenIndex into position * fix: rename declareType COMMON to LITERAL * fix: optimize entity collector and update grammar * test: add derived table and query result entities test case * fix: remove isCaretInDerivedTableStmt and set default isAccessible to null * fix: update _caretStmt docs * test: add isAccessible test case * fix: skip _caretStmt ts check * docs: update README to include additional entity information * test: fix create view test case * fix: import from error sql module * test: update entity collection tests * fix: remove unused type * feat: match empty column when in entityCollecting context * feat: optimize collecting entity when match empty column in entityCollecting context (#467) Co-authored-by: zhaoge <> --------- Co-authored-by: mumiao <1270865802zl@gmail.com> Co-authored-by: 琉易 <liuxy0551@qq.com> Co-authored-by: zhaoge <> Co-authored-by: XCynthia <942884029@qq.com>
Cythia828
added a commit
that referenced
this pull request
May 20, 2026
* chore(release): 4.3.0 * fix(common): #424 allTokens slice when caretTokenIndex use tokenIndexOffset (#426) * test: #424 syntax after comments * fix(common): #424 allTokens slice when caretTokenIndex use tokenIndexOffset * chore(release): 4.3.1 * fix(postgresql): #432 remove error rule * test: #432 validate unComplete sql * fix: #432 remove error rule * feat: mark as entityCollecting in getAllEntities context to allow empty column * chore: update jest.config.js to hide console.log * fix(flink): #442 fix flink's insert values() can't support function problem * feat: remove noReserved keywords in completions * test: add filter keywords test case * test: #438 sync suggestion no duplicate syntaxContextType * fix: #438 syntaxContextType not duplicate * chore(release): 4.4.0-beta.0 * chore(release): 4.4.0 * feat: support query result and derived table entity collecting (#434) * feat: support queryResult and derived table entities collecting * feat: support query result and derived table entity collecting * test: enhance hive and spark entity collect test case * fix: remove _ctx and add tokenIndex into position * fix: rename declareType COMMON to LITERAL * fix: optimize entity collector and update grammar * test: add derived table and query result entities test case * fix: remove isCaretInDerivedTableStmt and set default isAccessible to null * fix: update _caretStmt docs * test: add isAccessible test case * fix: skip _caretStmt ts check * docs: update README to include additional entity information * test: fix create view test case * fix: import from error sql module * test: update entity collection tests * fix: remove unused type * feat: match empty column when in entityCollecting context * feat: optimize collecting entity when match empty column in entityCollecting context (#467) Co-authored-by: Cythia828 <942884029@qq.com> --------- Co-authored-by: Cythia828 <942884029@qq.com> Co-authored-by: JackWang032 <64318393+JackWang032@users.noreply.github.com> Co-authored-by: mumiao <1270865802zl@gmail.com> Co-authored-by: 琉易 <liuxy0551@qq.com> Co-authored-by: zhaoge <942884029@qq.com>
Cythia828
added a commit
that referenced
this pull request
May 20, 2026
* feat: support query result and derived table entity collecting (#434) * feat: support queryResult and derived table entities collecting * feat: support query result and derived table entity collecting * test: enhance hive and spark entity collect test case * fix: remove _ctx and add tokenIndex into position * fix: rename declareType COMMON to LITERAL * fix: optimize entity collector and update grammar * test: add derived table and query result entities test case * fix: remove isCaretInDerivedTableStmt and set default isAccessible to null * fix: update _caretStmt docs * test: add isAccessible test case * fix: skip _caretStmt ts check * docs: update README to include additional entity information * test: fix create view test case * fix: import from error sql module * test: update entity collection tests * fix: remove unused type * chore: remove duplicate changelog in v4.4.1 * chore(release): 4.5.0-beta.0 * Next merge main (#468) * fix(flink): #455 fix json functions' params problem in flink * fix(flink): some grammar rules (#465) * fix: #464 order by + expression * fix: #464 EXTRACT function * test: #464 flink JSON_VALUE RETURNING * chore(release): 4.4.2 --------- Co-authored-by: zhaoge <> Co-authored-by: JackWang032 <64318393+JackWang032@users.noreply.github.com> * fix(parser): #283 collect errors from all erroneous statements in multi-statement input (#470) * test(parser): #283 add multi-statement error validation tests for all dialects * fix(parser): #283 collect errors from all erroneous statements in multi-statement input * feat: add generic SQL language support (#469) * fix(generic): fix INTERSECT/EXCEPT support, trim keywords to ~90 - Add INTERSECT and EXCEPT to queryNoWith rule for set operations - Remove 173 unused KW_* lexer rules for removed features (views, indexes, grants, transactions, stored procedures, window functions, triggers, etc.) - Trim nonReserved list to only keywords actually used in parser rules - Remove unused UNICODE_STRING and DIGIT_IDENTIFIER lexer rules - Keyword count reduced from 263 to 90 (close to ~100 target) - All 197 test suites pass (5627 tests) * fix(generic): reserve core structural keywords and add DIGIT_IDENTIFIER - Remove core structural keywords from nonReserved so they cannot be used as identifiers: SELECT, FROM, WHERE, CREATE, TABLE, INSERT, UPDATE, DELETE, DROP, ALTER, SET, JOIN, GROUP, HAVING, ORDER, ON, UNION, INTERSECT, EXCEPT, INTO, NOT, AND, OR, IN, BETWEEN, LIKE, IS, EXISTS, CASE, WHEN, THEN, ELSE, END, CAST, AS, DISTINCT, PRIMARY, CONSTRAINT, REFERENCES, COLUMN, UNIQUE, CHECK, FOREIGN, RENAME, RECURSIVE, WITH, NULL, ESCAPE, NULLIF - Add DIGIT_IDENTIFIER lexer token for identifiers starting with a digit (e.g. 123abc, 1st_column) - Include DIGIT_IDENTIFIER in identifier rule alternatives * fix(generic): add missing Listener/Visitor exports and diagnostics option - Add GenericSqlListener and GenericSqlVisitor exports to src/index.ts - Add GenericSQLOptions interface with configurable diagnostics flag - Override validate() to return empty array when diagnostics disabled - Export GenericSQLOptions type from src/index.ts * fix(generic): add QUERY_RESULT and SELECT column entity collection - Add exitQuerySpecification for QUERY_RESULT entity tracking - Add exitSelectItem for column entity collection in SELECT clauses - Track wildcard columns (ColumnDeclareType.ALL) for * and table.* - Track expression columns with alias support (ColumnDeclareType.EXPRESSION) - Stage previously untracked files (errorListener, splitListener, semanticContextCollector) * test: add GenericSQL tests * test: ensure all dialect tests pass with GenericSQL * test(generic): add more sql test - Add comprehensive syntax tests for all supported statement types - Add context collect tests for entity and semantic collectors - Add suggestion tests for token, syntax, and multi-statement scenarios - Add error strategy, listener, visitor, and validation tests - Fix entity collector to distinguish simple columns from expressions * feat: match empty column when in entityCollecting context (#457) (#472) * chore(release): 4.3.0 * fix(common): #424 allTokens slice when caretTokenIndex use tokenIndexOffset (#426) * test: #424 syntax after comments * fix(common): #424 allTokens slice when caretTokenIndex use tokenIndexOffset * chore(release): 4.3.1 * fix(postgresql): #432 remove error rule * test: #432 validate unComplete sql * fix: #432 remove error rule * feat: mark as entityCollecting in getAllEntities context to allow empty column * chore: update jest.config.js to hide console.log * fix(flink): #442 fix flink's insert values() can't support function problem * feat: remove noReserved keywords in completions * test: add filter keywords test case * test: #438 sync suggestion no duplicate syntaxContextType * fix: #438 syntaxContextType not duplicate * chore(release): 4.4.0-beta.0 * chore(release): 4.4.0 * feat: support query result and derived table entity collecting (#434) * feat: support queryResult and derived table entities collecting * feat: support query result and derived table entity collecting * test: enhance hive and spark entity collect test case * fix: remove _ctx and add tokenIndex into position * fix: rename declareType COMMON to LITERAL * fix: optimize entity collector and update grammar * test: add derived table and query result entities test case * fix: remove isCaretInDerivedTableStmt and set default isAccessible to null * fix: update _caretStmt docs * test: add isAccessible test case * fix: skip _caretStmt ts check * docs: update README to include additional entity information * test: fix create view test case * fix: import from error sql module * test: update entity collection tests * fix: remove unused type * feat: match empty column when in entityCollecting context * feat: optimize collecting entity when match empty column in entityCollecting context (#467) Co-authored-by: Cythia828 <942884029@qq.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
解决问题
在 #457 的基础上继续解决,目前已支持各大方言派生表、子查询、查询结果的字段实体收集,在语法不完整时保证了语法树完整性。
Preview地址
https://cythia828.github.io/monaco-sql-languages/
修改内容
该 commit 对 7 个方言(MySQL、PGSQL、Flink、Spark、Hive、Impala、Trino)的实体收集功能做了统一增强,核心目的是:在语法不完整时,通过语义谓词 shouldMatchEmpty() 匹配空列,保证语法树完整性,使实体收集能正常工作。
修改逻辑
补充/更新各方言的 suggestionWithEntity.test.ts 用例,覆盖空列补全、带逗号空列补全、isContainCaret 语义、uid DOT 模式等场景。
为什么这样修改
问题 原因 解决方式
目前剩余问题
PGSQL在某些语法不完整的情况下不报错:

select from tb1PGSQL 不报错的原因分析
根因:sqlExpression 中的 targetList? 被设计为可选(?),目的是兼容以下合法 PG 语法:
如果将
targetList?改为targetList必选,以上三种合法语法都会报错。完整链路:
simpleSelect: KW_SELECT (KW_ALL? intoClause? | distinctClause?) sqlExpressionsqlExpression: targetList? intoClause? fromClause? ...对于
select from t1:要彻底修复需要重构 simpleSelect,将 SELECT INTO 和 SELECT 分拆为独立分支,但这涉及大量语法改动,风险较高。当前保持原状,所有测试通过。