From d22add8057cc5629868fdcc3dd391bf34d0c002f Mon Sep 17 00:00:00 2001 From: Leon Zhang Date: Wed, 20 Feb 2019 15:43:43 +0800 Subject: [PATCH] -report-type query-type add syntax check --- ast/testdata/TestQueryType.golden | 1 + ast/token.go | 2 +- ast/token_test.go | 1 + cmd/soar/soar.go | 12 +++++++----- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ast/testdata/TestQueryType.golden b/ast/testdata/TestQueryType.golden index 8f01697..d54070f 100644 --- a/ast/testdata/TestQueryType.golden +++ b/ast/testdata/TestQueryType.golden @@ -1,5 +1,6 @@ SELECT SELECT +SELECT GRANT REVOKE SELECT diff --git a/ast/token.go b/ast/token.go index 70afb52..3416332 100644 --- a/ast/token.go +++ b/ast/token.go @@ -1000,5 +1000,5 @@ func QueryType(sql string) string { } } } - return "" + return "UNKNOWN" } diff --git a/ast/token_test.go b/ast/token_test.go index c8f7ec9..ef7f18e 100644 --- a/ast/token_test.go +++ b/ast/token_test.go @@ -241,6 +241,7 @@ func TestNewLines(t *testing.T) { func TestQueryType(t *testing.T) { common.Log.Debug("Entering function: %s", common.GetFunctionName()) var testSQLs = []string{ + ` select 1`, `/*comment*/ select 1`, `(select 1)`, `grant select on *.* to user@'localhost'`, diff --git a/cmd/soar/soar.go b/cmd/soar/soar.go index ad4c117..87a378d 100644 --- a/cmd/soar/soar.go +++ b/cmd/soar/soar.go @@ -163,10 +163,6 @@ func main() { _, err = pretty.Println(ast.Tokenize(sql)) common.LogIfWarn(err, "") continue - case "query-type": - // query type by first key word - fmt.Println(ast.QueryType(sql)) - continue default: // SQL 签名 id = query.Id(fingerprint) @@ -190,7 +186,8 @@ func main() { if syntaxErr != nil { errContent := fmt.Sprintf("At SQL %d : %v", sqlCounter, syntaxErr) common.Log.Warning(errContent) - if common.Config.OnlySyntaxCheck || common.Config.ReportType == "rewrite" { + if common.Config.OnlySyntaxCheck || common.Config.ReportType == "rewrite" || + common.Config.ReportType == "query-type" { fmt.Println(errContent) os.Exit(1) } @@ -208,6 +205,11 @@ func main() { env.ChangeDB(vEnv.Connector, q.Query) tables[id] = ast.SchemaMetaInfo(sql, vEnv.Database) continue + case "query-type": + fmt.Println(syntaxErr) + // query type by first key word + fmt.Println(ast.QueryType(sql)) + continue } // +++++++++++++++++++++启发式规则建议[开始]+++++++++++++++++++++++{ -- GitLab