### Version v4.1 ### Which SQL? Hive ### SQL content ```sql CREATE TABLE table1 ``` ### JavaScript/TypeScript code _No response_ ### What happened? 建表语句缺少列定义的情况,在 Hive 实际语法中是非法的,但在解析树中没有报错 <img width="1303" alt="image" src="https://github.com/user-attachments/assets/24ebbfbb-08bd-4589-807f-bf74eb6c88de"> 导致 c3 收集补全时把 `statement` 开头的所有关键字都收集进来了,正常应该是 AS、Like等等 <img width="569" alt="image" src="https://github.com/user-attachments/assets/11657931-04c8-46ec-8aee-768323e08824"> ### Relevant log output _No response_
Activity
JackWang032 commentedon Mar 28, 2025
这是由于所有类型 SQL 中语句结束符分号都是可选的导致的,考虑可以通过 action 的方式往
g4中注入运行时代码,当进行getSuggestion时使分号必选以进行正确的 SQL 切分。liuxy0551 commentedon Sep 22, 2026
该问题已在 PR #485 中一并解决。虽然 PR 关联的是 #436,但两个问题的根因相同:由于各方言的语句结束分号可选,ANTLR4-C3 从 program 规则收集候选时,会认为当前语句已经结束,并继续收集下一条 statement 的起始关键字。
最终没有采用在各方言 g4 中注入 action、补全时强制分号的方案,而是在公共补全逻辑中进行 statement 级候选隔离:
这样不会修改正常 SQL 解析规则,也能同时保证:
当前在
CREATE TABLE table1表名后输入空格,只会返回 AS、LIKE、COMMENT、PARTITIONED BY 等当前建表语句的候选,不再混入 SELECT、CREATE、DROP 等下一语句起始关键字。该修复已随 v4.5.1 发布,因此本 Issue 可以关闭。