Skip to content

fix: support MySQL CTE audit via conservative splitter fallback - #3355

Open
LordofAvernus wants to merge 2 commits into
mainfrom
sqle/fix-3050
Open

fix: support MySQL CTE audit via conservative splitter fallback#3355
LordofAvernus wants to merge 2 commits into
mainfrom
sqle/fix-3050

Conversation

@LordofAvernus

@LordofAvernus LordofAvernus commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

User description

关联的 issue

https://github.com/actiontech/sqle-ee/issues/3050

描述你的变更

  • MySQL splitter 在 pingcap 解析失败时,对合法 WITH [RECURSIVE] name AS (...) 形态保守剥离 CTE 前缀并解析外层语句,保留原文 Text
  • 使合法 CTE 可审核,且 sql_type 按外层语义为 dql/dml,不再因 Unparsed 默认 ddl
  • 非法 SQL / 裸 WITH(如 WITH GRANT OPTION)仍走原 Unparsed 路径;本期无 EE 专有文件,仅 CE 通用改动

确认项(pr提交后操作)

Tip

请在指定复审人之前,确认并完成以下事项,完成后✅


  • 我已完成自测
  • 我已记录完整日志方便进行诊断
  • 我已在关联的issue里补充了实现方案
  • 我已在关联的issue里补充了测试影响面
  • 我已确认了变更的兼容性,如果不兼容则在issue里标记 not_compatible
  • 我已确认了是否要更新文档,如果要更新则在issue里标记 need_update_doc

Made with Cursor


Description

  • 增加 MySQL CTE 保守解析处理

  • 添加多种 CTE 测试用例验证解析结果

  • 修改 splitter 调用逻辑支持 CTE 解析


Diagram Walkthrough

flowchart LR
  A["新增 CTE 解析模块"]
  B["添加单元测试用例"]
  C["修改 splitter 调用逻辑"]
  A -- "整合解析" --> C
  B -- "验证功能" --> C
Loading

File Walkthrough

Relevant files
Tests
mysql_test.go
增加 CTE 测试验证                                                                                           

sqle/driver/mysql/mysql_test.go

  • 添加 CTE 相关测试案例
  • 验证 DQL、DML、DDL 类型识别
+48/-0   
cte_test.go
增加 CTE 解析单元测试                                                                                       

sqle/driver/mysql/splitter/cte_test.go

  • 编写 CTE 解析单元测试
  • 覆盖多场景 CTE 测试案例
+155/-0 
Enhancement
cte.go
新增 CTE 解析模块                                                                                           

sqle/driver/mysql/splitter/cte.go

  • 实现 MySQL CTE 保守剥离解析
  • 定义多种辅助解析函数
+287/-0 
Bug fix
splitter.go
集成 CTE 保守解析逻辑                                                                                       

sqle/driver/mysql/splitter/splitter.go

  • 在 splitter 中调用 tryParseMySQLCTE
  • 优化错误解析时的处理逻辑
+7/-0     

Parse outer statement after WITH … AS (…) when pingcap fails, so CTE is auditable and sql_type is dql/dml instead of Unparsed→ddl.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown

PR Reviewer Guide 🔍

(Review updated until commit e515af9)

🎫 Ticket compliance analysis 🔶

3050 - Partially compliant

Compliant requirements:

  • 增加 CTE 解析模块并调用
  • 添加对应的单元测试用例
  • 修改 splitter 调用逻辑支持 CTE 解析

Non-compliant requirements:

[]

Requires further human verification:

[]

⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ No major issues detected

@github-actions

Copy link
Copy Markdown

PR Code Suggestions ✨

No code suggestions found for the PR.

Cover splitter CTE outer extraction/parse and assertSQLType dql/dml classification for CTE cases.
@github-actions

Copy link
Copy Markdown

Persistent review updated to latest commit e515af9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant