hanchuanchuan / goInception

一个集审核、执行、备份及生成回滚语句于一身的MySQL运维工具
https://hanchuanchuan.github.io/goInception/
GNU General Public License v3.0
1.62k stars 553 forks source link

增加在SQL审核阶段自动识别并合并相同表的alter table语句的功能 #669

Closed jiweixiao closed 1 month ago

jiweixiao commented 1 month ago

新增 check-merge参数,设置其为1后开启自动合并alter table语句功能(现在仅有命令行参数,后续将添加配置文件参数并将参数名修改为 alter-auto-merge)。在添加了check-merge参数后,goInc会检查用户提交的SQL,并将其中涉及相同表的alter table,create index,drop index语句统一合并为 alter table语句,然后返回SQL检查结果以及合并后新生成的SQL。

goInc校验的返回值增加了一个字段,显示对应的SQL是否为 (alter table|create index|drop index), 如果是的话,就会显示'alterTable'字样。对于合并后新生成的SQL,ErrorMessage字段显示"Merged"。以上两个字段可用于区分是原有SQL还是合并后的SQL

新增alterTableInfo结构体,记录每一个表被修改的信息,包括表名,所有alter语句的语法树,以及合并后的新SQL

在checkAlterTable方法中写入alterTableInfo,在提交阶段进行SQL的合并工作,通过合并语法树然后生成新的SQL

对于create index和drop index语句,使用convertCreateIndexToAddConstrain和convertDropIndexToDropIndex方法(已修改成convertCreateIndexToAlterTable和convertDropIndexToAlerTable)将其转换为alter table语句,然后进行合并。

hanchuanchuan commented 1 month ago

感谢PR!

  1. 建议将参数名改为alter-auto-merge参数, 以便和check-*参数区分开.
  2. 参数可以调到到config/config.go的结构体, 可以动态配置而非硬编码到调用选项, 这样会更加灵活.
  3. 获取语句type时可以尝试使用 fmt.Sprintf("%T",r.Type)返回所有语句的类型, 而非仅处理alter table/ add/drop index.
sonarcloud[bot] commented 1 month ago

Quality Gate Passed Quality Gate passed

Issues
1 New issue
0 Accepted issues

Measures
0 Security Hotspots
0.0% Coverage on New Code
0.0% Duplication on New Code

See analysis details on SonarCloud