diff --git a/advisor/rules.go b/advisor/rules.go index f5490065a10c31924b13273d7498314799ad450b..39a08a563538db472d6552b7b9a246aad45c847e 100644 --- a/advisor/rules.go +++ b/advisor/rules.go @@ -1007,8 +1007,8 @@ func InitHeuristicRules() { Severity: "L2", Summary: "建表语句中定义为 ON UPDATE CURRENT_TIMESTAMP 的字段不建议包含业务逻辑", Content: "定义为 ON UPDATE CURRENT_TIMESTAMP 的字段在该表其他字段更新时会联动修改,如果包含业务逻辑用户可见会埋下隐患。后续如有批量修改数据却又不想修改该字段时会导致数据错误。", - Case: `CREATE TABLE category (category_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(25) NOT NULL, last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (category_id)`, - Func: (*Query4Audit).RuleCreateOnUpdate, + Case: `CREATE TABLE category (category_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(25) NOT NULL, last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (category_id)`, + Func: (*Query4Audit).RuleCreateOnUpdate, }, "RES.011": { Item: "RES.011", diff --git a/env/env.go b/env/env.go index facf71b0d59a501c8885ef0cdbf64f1abb46b866..731fe4ecae5cdc99331db82980217f11d0d51262 100644 --- a/env/env.go +++ b/env/env.go @@ -423,24 +423,29 @@ func (vEnv *VirtualEnv) createDatabase(rEnv *database.Connector) error { } /* - @input: - database.Connector 为一个线上环境数据库连接句柄的复制,因为在处理SQL时需要对上下文进行关联处理, - 所以存在修改DB连接参数(主要是数据库名称变更)的可能性,为了不影响整体上下文的环境,所以需要一个镜像句柄来做当前环境的操作。 - - dbName, tbName: 需要在环境中操作的库表名称, - - @output: - return 执行过程中的错误 - - NOTE: - 该函数会将线上环境中使用到的库表结构复制到测试环境中,为后续操作提供基础环境。 - 传入的库表名称均来自于对AST的解析,库表名称的获取遵循以下原则: - 如果未在SQL中指定数据库名称,则数据库一定是配置文件(或命令行参数传入DSN)中指定的数据库 - 如果一个SQL中存在多个数据库,则只能有一个数据库是没有在SQL中被显示指定的(即DSN中指定的数据库) - TODO: - 在一些可能的情况下,由于数据库配置的不一致(如SQL_MODE不同)导致remote环境的库表无法正确的在测试环境进行同步, - soar 能够做出判断并进行 session 级别的修改,但是这一阶段可用性保证应该是由用户提供两个完全相同(或测试环境兼容线上环境) - 的数据库环境来实现的。 +@input: + + database.Connector 为一个线上环境数据库连接句柄的复制,因为在处理SQL时需要对上下文进行关联处理, + 所以存在修改DB连接参数(主要是数据库名称变更)的可能性,为了不影响整体上下文的环境,所以需要一个镜像句柄来做当前环境的操作。 + + dbName, tbName: 需要在环境中操作的库表名称, + +@output: + + return 执行过程中的错误 + +NOTE: + + 该函数会将线上环境中使用到的库表结构复制到测试环境中,为后续操作提供基础环境。 + 传入的库表名称均来自于对AST的解析,库表名称的获取遵循以下原则: + 如果未在SQL中指定数据库名称,则数据库一定是配置文件(或命令行参数传入DSN)中指定的数据库 + 如果一个SQL中存在多个数据库,则只能有一个数据库是没有在SQL中被显示指定的(即DSN中指定的数据库) + +TODO: + + 在一些可能的情况下,由于数据库配置的不一致(如SQL_MODE不同)导致remote环境的库表无法正确的在测试环境进行同步, + soar 能够做出判断并进行 session 级别的修改,但是这一阶段可用性保证应该是由用户提供两个完全相同(或测试环境兼容线上环境) + 的数据库环境来实现的。 */ func (vEnv *VirtualEnv) createTable(rEnv *database.Connector, tbName string) error { // 判断数据库是否已经创建