Skip to content

Commit

Permalink
修复bug并更新文档 (#675)
Browse files Browse the repository at this point in the history
* 增加在SQL审核阶段自动识别并合并相同表的alter table语句的功能
  • Loading branch information
jiweixiao authored Nov 1, 2024
1 parent 2f06c61 commit 6ffef97
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 2 deletions.
1 change: 1 addition & 0 deletions docs/zh/options.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ inception set check_dml_limit = true;

参数 | 默认值 | 可选范围 | 说明
------------ | ------------- | ------------ | ------------
alter_auto_merge | false | true,false | 当同一个表出现多条alter table/create index/drop index语句时,goInception会将这些SQL合并成一条,并将合并后的SQL连同原始SQL的校验结果一起返回
check_autoincrement_datatype | false | true,false | 当建表时自增列的类型不为int或者bigint时报错
check_autoincrement_init_value | false | true,false | 当建表时自增列的值指定的不为1,则报错
check_autoincrement_name | false | true,false | 建表时,如果指定的自增列的名字不为ID,则报错,说明是有意义的,给提示
Expand Down
3 changes: 2 additions & 1 deletion docs/zh/result.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ goInception返回结果集的结构如下:
- 如果执行成功则返回Execute Successfully,否则返回Execute failed,
- 如果备份成功,则在后面追加Backup successfully,否则追加Backup failed,
- 这个列的返回信息是为了将结果集直接输出而设置的,如果在具体使用过程中,为了更友好的显示,可以在这基础上再做加工处理。
1. `error_message` 错误信息。用来表示出错错误信息,这里包括一条语句中所有的错误信息,用换行符分隔,但有时候如果某一个错误导致不能继续分析了,则后面的错误就不能显示出来。如果没有出错,则返回NULL。而对于执行及备份错误,因为对于一条语句,这样的错误只会有一次,那么执行错误会在后面追加“execute:具体的执行错误原因”,如果是备份出错,则在后面追加“backup:具体的备份错误原因”。
1. `error_message` 错误信息。用来表示出错错误信息,这里包括一条语句中所有的错误信息,用换行符分隔,但有时候如果某一个错误导致不能继续分析了,则后面的错误就不能显示出来。如果没有出错,则返回NULL。而对于执行及备份错误,因为对于一条语句,这样的错误只会有一次,那么执行错误会在后面追加“execute:具体的执行错误原因”,如果是备份出错,则在后面追加“backup:具体的备份错误原因”。如果设置参数alter_auto_merge=true,则合并后的SQL行该字段会显示“MERGED”。
1. `sql` 用来表示当前检查的是哪条sql语句
1. `affected_rows` 执行时预计影响行数,在执行时显示的是真实影响行数。
1. `sequence` 这个列与上面说的备份功能有关系,其实就是对应**$$Inception_backup_information$$**表中的 opid_time 这个列,一一对应,这就为前端应用在针对某一操作回滚找到了入口,每次执行都会产生一个序号,如果要回滚,则就使用这个值从备份表中找到对应的回滚语句执行即可。详见[备份功能](backup.html)
1. `backup_dbname` 这个列表示的是当前语句产生的备份信息,存储在备份服务器的哪个数据库中,这是一个字符串类型的值,只针对需要备份的语句,数据库名由IP地址、端口、源数据库名组成,由下划线连接。详见[备份功能](backup.html)
1. `execute_time` 这个列表示当前语句执行时间,单位为秒,精确到小数点后两位。列类型为字符串,使用时可能需要转换成DOUBLE类型的值,如果只是审核而不执行,则这个列返回的值为0。
1. `sqlsha1` 这个列用来存储当前这个语句的一个HASH值,这是用来标识这个语句是不是会使用OSC功能,如果返回信息中有值,则表示这个语句在执行的时候会使用OSC,因为在执行前,会有一次单独的审核操作,此时上层已经可以拿到这个值,审核通过之后,语句是不会改变的,当然这个值也不会改变,那么在执行时就可以使用这个值来查看OSC执行的进度等信息,这个值一般长的样子如下:*D0210DFF35F0BC0A7C95CD98F5BCD4D9B0CA8154,具体其它信息,请参考 [DDL变更:pt-osc](osc.html)[DDL变更:gh-ost](ghost.html)
1. `backup_time` 生成当前SQL的备份语句耗时。
1. `need_merge` 当前SQL是否可以和其他SQL合并成一条。0代表不可以;-1代表当前SQL是已经合并过的;其他大于0的数字代表可以合并,具体数值和已合并SQL行(即当前字段值为-1的行)的order_id值一样。
2 changes: 1 addition & 1 deletion session/session_inception.go
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ func (s *session) executeInc(ctx context.Context, sql string) (recordSets []sqle
continue
case *ast.InceptionCommitStmt:
/******* jwx added 将对同一个表的多条alter语句合并成一条 ******/
if s.inc.AlterAutoMerge {
if s.inc.AlterAutoMerge && s.opt.Check && !s.opt.Execute {
for _, info := range s.alterTableInfoList {
if len(info.alterStmtList) >= 2 {
merged := info.alterStmtList[0]
Expand Down

0 comments on commit 6ffef97

Please sign in to comment.