From 318bd5b49128c4b1b5f3d7d8dcd030e01567334b Mon Sep 17 00:00:00 2001 From: Leon Zhang Date: Wed, 31 Oct 2018 22:21:05 +0800 Subject: [PATCH] fix #66 :bug: 1. SplitStatement mulitstatement eof bug 2. empty query by pass --- ast/token.go | 8 ++++++++ ast/token_test.go | 6 ++++++ cmd/soar/soar.go | 6 +++++- vendor/vendor.json | 44 ++++++++++++++++++++++---------------------- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/ast/token.go b/ast/token.go index 0b273e8..5aa47fb 100644 --- a/ast/token.go +++ b/ast/token.go @@ -944,6 +944,14 @@ func SplitStatement(buf []byte, delimiter []byte) (string, []byte) { if multiLineComment && !quoted && !singleLineComment { i = i + 2 multiLineComment = false + // '/*comment*/' + if i == len(buf) { + sql = string(buf[:i]) + } + // '/*comment*/;', 'select 1/*comment*/;' + if string(buf[i:]) == string(delimiter) { + sql = string(buf) + } continue } } diff --git a/ast/token_test.go b/ast/token_test.go index f9174ea..cbf540e 100644 --- a/ast/token_test.go +++ b/ast/token_test.go @@ -100,6 +100,12 @@ func TestSplitStatement(t *testing.T) { ;*/ from test;hello`), []byte(`select * from test`), + // https://github.com/XiaoMi/soar/issues/66 + []byte(`/*comment*/`), + []byte(`/*comment*/;`), + []byte(`--`), + []byte(`-- comment`), + []byte(`# comment`), } for _, buf := range bufs { fmt.Println(SplitStatement(buf, []byte(common.Config.Delimiter))) diff --git a/cmd/soar/soar.go b/cmd/soar/soar.go index 82a17d1..d05b1ea 100644 --- a/cmd/soar/soar.go +++ b/cmd/soar/soar.go @@ -153,6 +153,7 @@ func main() { mysqlSuggest := make(map[string]advisor.Rule) // MySQL返回的ERROR信息 if buf == "" { + common.Log.Debug("buf: %s, sql: %s empty", buf, sql) break } // 查询请求切分 @@ -167,7 +168,10 @@ func main() { // 去除无用的备注和空格 sql = strings.TrimSpace(sql) sql = string(database.RemoveSQLComments([]byte(sql))) - + if sql == "" { + common.Log.Debug("empty query or comment, buf: %s", buf) + continue + } common.Log.Debug("main loop SQL: %s", sql) // +++++++++++++++++++++小工具集[开始]+++++++++++++++++++++++{ diff --git a/vendor/vendor.json b/vendor/vendor.json index 51839a9..88a1db0 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1016,68 +1016,68 @@ { "checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=", "path": "vitess.io/vitess", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=", "path": "vitess.io/vitess/go/bytes2", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=", "path": "vitess.io/vitess/go/hack", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=", "path": "vitess.io/vitess/go/sqltypes", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=", "path": "vitess.io/vitess/go/vt/log", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=", "path": "vitess.io/vitess/go/vt/proto/query", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=", "path": "vitess.io/vitess/go/vt/proto/topodata", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=", "path": "vitess.io/vitess/go/vt/proto/vtgate", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=", "path": "vitess.io/vitess/go/vt/proto/vtrpc", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "re3V8oX+ujxHbNZuB+QEtrcXxE8=", "path": "vitess.io/vitess/go/vt/sqlparser", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" }, { "checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=", "path": "vitess.io/vitess/go/vt/vterrors", - "revision": "ee89e01fd0f1e8d97911a845a1828cc1ca614c9e", - "revisionTime": "2018-10-29T23:21:17Z" + "revision": "3db5b2f0eb75f490c755bf20d35fd3afdacdd920", + "revisionTime": "2018-10-30T14:25:51Z" } ], "rootPath": "github.com/XiaoMi/soar" -- GitLab