提交 5de903a2 编写于 作者: martianzhang's avatar martianzhang

polish code

上级 906ce846
...@@ -29,6 +29,3 @@ script: ...@@ -29,6 +29,3 @@ script:
- make docker - make docker
- make cover - make cover
- make test-cli - make test-cli
after_success:
- bash <(curl -s https://codecov.io/bash)
...@@ -26,7 +26,7 @@ import ( ...@@ -26,7 +26,7 @@ import (
"vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/sqlparser"
) )
// Profiling show profile输出的结果 // Profiling show profile 输出的结果
type Profiling struct { type Profiling struct {
Rows []ProfilingRow Rows []ProfilingRow
} }
...@@ -35,7 +35,7 @@ type Profiling struct { ...@@ -35,7 +35,7 @@ type Profiling struct {
type ProfilingRow struct { type ProfilingRow struct {
Status string Status string
Duration float64 Duration float64
// TODO: 支持show profile all,不过目前看all的信息过多有点眼花缭乱 // TODO: 支持show profile all, 不过目前看所有的信息过多有点眼花缭乱
} }
// Profiling 执行SQL,并对其 Profile // Profiling 执行SQL,并对其 Profile
...@@ -48,14 +48,14 @@ func (db *Connector) Profiling(sql string, params ...interface{}) ([]ProfilingRo ...@@ -48,14 +48,14 @@ func (db *Connector) Profiling(sql string, params ...interface{}) ([]ProfilingRo
return rows, errors.New("no need profiling") return rows, errors.New("no need profiling")
} }
// 测试环境如果检查是关闭的,则SQL不会被执行 // 测试环境如果检查是关闭的,则 SQL 不会被执行
if common.Config.TestDSN.Disable { if common.Config.TestDSN.Disable {
return rows, errors.New("dsn is disable") return rows, errors.New("dsn is disable")
} }
// 数据库安全性检查:如果 Connector 的 IP 端口与 TEST 环境不一致,则启用 SQL 白名单 // 数据库安全性检查:如果 Connector 的 IP 端口与 TEST 环境不一致,则启用 SQL 白名单
// 不在白名单中的 SQL 不允许执行 // 不在白名单中的 SQL 不允许执行
// 执行环境与test环境不相同 // 执行环境与 test 环境不相同
if db.Addr != common.Config.TestDSN.Addr && db.dangerousQuery(sql) { if db.Addr != common.Config.TestDSN.Addr && db.dangerousQuery(sql) {
return rows, fmt.Errorf("query execution deny: Execute SQL with DSN(%s/%s) '%s'", return rows, fmt.Errorf("query execution deny: Execute SQL with DSN(%s/%s) '%s'",
db.Addr, db.Database, fmt.Sprintf(sql, params...)) db.Addr, db.Database, fmt.Sprintf(sql, params...))
...@@ -114,7 +114,7 @@ func (db *Connector) Profiling(sql string, params ...interface{}) ([]ProfilingRo ...@@ -114,7 +114,7 @@ func (db *Connector) Profiling(sql string, params ...interface{}) ([]ProfilingRo
return rows, err return rows, err
} }
// FormatProfiling 格式化输出Profiling信息 // FormatProfiling 格式化输出 Profiling 信息
func FormatProfiling(rows []ProfilingRow) string { func FormatProfiling(rows []ProfilingRow) string {
str := []string{"| Status | Duration |"} str := []string{"| Status | Duration |"}
str = append(str, "| --- | --- |") str = append(str, "| --- | --- |")
......
...@@ -20,6 +20,7 @@ import ( ...@@ -20,6 +20,7 @@ import (
"testing" "testing"
"github.com/XiaoMi/soar/common" "github.com/XiaoMi/soar/common"
"github.com/kr/pretty" "github.com/kr/pretty"
) )
......
...@@ -90,7 +90,7 @@ func BuildEnv() (*VirtualEnv, *database.Connector) { ...@@ -90,7 +90,7 @@ func BuildEnv() (*VirtualEnv, *database.Connector) {
common.Config.TestDSN.Disable = true common.Config.TestDSN.Disable = true
} }
// 检查是否允许Online和Test一致,防止误操作 // 检查是否允许 Online 和 Test 一致,防止误操作
if common.FormatDSN(common.Config.OnlineDSN) == common.FormatDSN(common.Config.TestDSN) && if common.FormatDSN(common.Config.OnlineDSN) == common.FormatDSN(common.Config.TestDSN) &&
!common.Config.AllowOnlineAsTest { !common.Config.AllowOnlineAsTest {
common.Log.Warn("BuildEnv AllowOnlineAsTest: %s:********@%s/%s OnlineDSN can't config as TestDSN", common.Log.Warn("BuildEnv AllowOnlineAsTest: %s:********@%s/%s OnlineDSN can't config as TestDSN",
...@@ -108,7 +108,7 @@ func BuildEnv() (*VirtualEnv, *database.Connector) { ...@@ -108,7 +108,7 @@ func BuildEnv() (*VirtualEnv, *database.Connector) {
return vEnv, connOnline return vEnv, connOnline
} }
// RealDB 从测试环境中获取通过hash后的DB // RealDB 从测试环境中获取通过 hash 后的 DB
func (vEnv *VirtualEnv) RealDB(hash string) string { func (vEnv *VirtualEnv) RealDB(hash string) string {
if _, ok := vEnv.Hash2DB[hash]; ok { if _, ok := vEnv.Hash2DB[hash]; ok {
return vEnv.Hash2DB[hash] return vEnv.Hash2DB[hash]
...@@ -120,7 +120,7 @@ func (vEnv *VirtualEnv) RealDB(hash string) string { ...@@ -120,7 +120,7 @@ func (vEnv *VirtualEnv) RealDB(hash string) string {
return hash return hash
} }
// DBHash 从测试环境中根据DB找到对应的hash // DBHash 从测试环境中根据 DB 找到对应的 hash
func (vEnv *VirtualEnv) DBHash(db string) string { func (vEnv *VirtualEnv) DBHash(db string) string {
if _, ok := vEnv.DBRef[db]; ok { if _, ok := vEnv.DBRef[db]; ok {
return vEnv.DBRef[db] return vEnv.DBRef[db]
...@@ -194,15 +194,15 @@ func (vEnv *VirtualEnv) CleanupTestDatabase() { ...@@ -194,15 +194,15 @@ func (vEnv *VirtualEnv) CleanupTestDatabase() {
common.Log.Debug("CleanupTestDatabase done") common.Log.Debug("CleanupTestDatabase done")
} }
// BuildVirtualEnv rEnv为SQL源环境,DB使用的信息从接口获取 // BuildVirtualEnv rEnv 为 SQL 源环境,DB 使用的信息从接口获取
// 注意:如果是USE,DDL等语句,执行完第一条就会返回,后面的SQL不会执行 // 注意:如果是 USE, DDL 等语句,执行完第一条就会返回,后面的 SQL 不会执行
func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string) bool { func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string) bool {
var stmt sqlparser.Statement var stmt sqlparser.Statement
var err error var err error
// 置空错误信息 // 置空错误信息
vEnv.Error = nil vEnv.Error = nil
// 检测是否已经创建初始数据库,如果未创建则创建一个名称hash过的映射数据库 // 检测是否已经创建初始数据库,如果未创建则创建一个名称 hash 过的映射数据库
err = vEnv.createDatabase(rEnv) err = vEnv.createDatabase(rEnv)
common.LogIfWarn(err, "") common.LogIfWarn(err, "")
...@@ -212,7 +212,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string ...@@ -212,7 +212,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string
return true return true
} }
// 判断rEnv中是否指定了DB // 判断 rEnv 中是否指定了 DB
if rEnv.Database == "" { if rEnv.Database == "" {
common.Log.Error("BuildVirtualEnv no database specified, TestDSN init failed") common.Log.Error("BuildVirtualEnv no database specified, TestDSN init failed")
return false return false
...@@ -221,9 +221,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string ...@@ -221,9 +221,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string
// 库表提取 // 库表提取
meta := make(map[string]*common.DB) meta := make(map[string]*common.DB)
for _, sql := range SQLs { for _, sql := range SQLs {
common.Log.Debug("BuildVirtualEnv Database&TableName Mapping, SQL: %s", sql) common.Log.Debug("BuildVirtualEnv Database&TableName Mapping, SQL: %s", sql)
stmt, err = sqlparser.Parse(sql) stmt, err = sqlparser.Parse(sql)
if err != nil { if err != nil {
common.Log.Error("BuildVirtualEnv Error : %v", err) common.Log.Error("BuildVirtualEnv Error : %v", err)
...@@ -249,7 +247,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string ...@@ -249,7 +247,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string
// 为不影响其他SQL操作,复制一个Connector对象,将数据库切换到对应的DB上直接执行 // 为不影响其他SQL操作,复制一个Connector对象,将数据库切换到对应的DB上直接执行
vEnv.Database = vEnv.DBRef[rEnv.Database] vEnv.Database = vEnv.DBRef[rEnv.Database]
// 为了支持并发,需要将DB进行映射,但db.table这种形式无法保证DB的映射是正确的 // 为了支持并发,需要将DB进行映射,但 db.table 这种形式无法保证 DB 的映射是正确的
// TODO:暂不支持 create db.tableName (id int) 形式的建表语句 // TODO:暂不支持 create db.tableName (id int) 形式的建表语句
if stmt.Table.Qualifier.String() != "" { if stmt.Table.Qualifier.String() != "" {
common.Log.Error("BuildVirtualEnv DDL Not support db.tb format") common.Log.Error("BuildVirtualEnv DDL Not support db.tb format")
...@@ -300,7 +298,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string ...@@ -300,7 +298,7 @@ func (vEnv *VirtualEnv) BuildVirtualEnv(rEnv *database.Connector, SQLs ...string
meta := ast.GetMeta(stmt, nil) meta := ast.GetMeta(stmt, nil)
// 由于DB环境可能是变的,所以需要每一次都单独的提取库表结构,整体随着rEnv的变动而发生变化 // 由于 DB 环境可能是变的,所以需要每一次都单独的提取库表结构,整体随着 rEnv 的变动而发生变化
for db, table := range meta { for db, table := range meta {
if db == "" { if db == "" {
db = rEnv.Database db = rEnv.Database
...@@ -361,7 +359,7 @@ func (vEnv *VirtualEnv) createDatabase(rEnv *database.Connector) error { ...@@ -361,7 +359,7 @@ func (vEnv *VirtualEnv) createDatabase(rEnv *database.Connector) error {
// optimizer_YYMMDDHHmmss_xxxx // optimizer_YYMMDDHHmmss_xxxx
dbHash := fmt.Sprintf("optimizer_%s_%s", // Total 39 bytes dbHash := fmt.Sprintf("optimizer_%s_%s", // Total 39 bytes
time.Now().Format("060102150405"), // 12 Bytes 20180102030405 time.Now().Format("060102150405"), // 12 Bytes 180102030405
strings.ToLower(uniuri.New())) // 16 Bytes random string strings.ToLower(uniuri.New())) // 16 Bytes random string
common.Log.Debug("createDatabase, mapping `%s` :`%s`-->`%s`", rEnv.Database, rEnv.Database, dbHash) common.Log.Debug("createDatabase, mapping `%s` :`%s`-->`%s`", rEnv.Database, rEnv.Database, dbHash)
ddl, err := rEnv.ShowCreateDatabase(rEnv.Database) ddl, err := rEnv.ShowCreateDatabase(rEnv.Database)
...@@ -496,7 +494,7 @@ func (vEnv *VirtualEnv) GenTableColumns(meta common.Meta) common.TableColumns { ...@@ -496,7 +494,7 @@ func (vEnv *VirtualEnv) GenTableColumns(meta common.Meta) common.TableColumns {
} }
if len(tb.Column) == 0 { if len(tb.Column) == 0 {
// tb.column为空说明SQL里这个表是用的*来查询 // tb.column 为空说明 SQL 里这个表是用的*来查询
if err != nil { if err != nil {
common.Log.Error("ast.Rewrite ShowColumns, Error: %v", err) common.Log.Error("ast.Rewrite ShowColumns, Error: %v", err)
break break
......
...@@ -10,5 +10,4 @@ setup() { ...@@ -10,5 +10,4 @@ setup() {
golden_diff() { golden_diff() {
FUNC_NAME=$1 FUNC_NAME=$1
diff "${BATS_TMP_DIRNAME}/${FUNC_NAME}.golden" "${BATS_FIXTURE_DIRNAME}/${FUNC_NAME}.golden" >/dev/null diff "${BATS_TMP_DIRNAME}/${FUNC_NAME}.golden" "${BATS_FIXTURE_DIRNAME}/${FUNC_NAME}.golden" >/dev/null
return $?
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册