Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
ac810d3e
S
soar
项目概览
Xiaomi
/
soar
大约 2 年 前同步成功
通知
467
Star
8513
Fork
1329
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
soar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ac810d3e
编写于
2月 15, 2019
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add new -report-type `query-type`
echo "select * from tb" | soar -report-type query-type
上级
cc59f44e
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
133 addition
and
1 deletion
+133
-1
ast/testdata/TestQueryType.golden
ast/testdata/TestQueryType.golden
+86
-0
ast/token.go
ast/token.go
+13
-0
ast/token_test.go
ast/token_test.go
+16
-0
cmd/soar/soar.go
cmd/soar/soar.go
+4
-0
cmd/soar/soar_test.go
cmd/soar/soar_test.go
+1
-1
common/config.go
common/config.go
+5
-0
doc/report_type.md
doc/report_type.md
+8
-0
未找到文件。
ast/testdata/TestQueryType.golden
0 → 100644
浏览文件 @
ac810d3e
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
DELETE
DELETE
DELETE
DELETE
DELETE
UPDATE
UPDATE
UPDATE
UPDATE
INSERT
INSERT
INSERT
INSERT
REPLACE
REPLACE
REPLACE
REPLACE
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
SELECT
ALTER
ALTER
ALTER
SELECT
CREATE
SELECT
ALTER
ast/token.go
浏览文件 @
ac810d3e
...
@@ -986,3 +986,16 @@ func NewLines(buf []byte) int {
...
@@ -986,3 +986,16 @@ func NewLines(buf []byte) int {
}
}
return
newLines
return
newLines
}
}
// QueryType get query type such as SELECT/INSERT/DELETE/CREATE/ALTER
func
QueryType
(
sql
string
)
string
{
var
typ
string
tokens
:=
Tokenizer
(
sql
)
for
_
,
token
:=
range
tokens
{
if
val
,
ok
:=
mySQLKeywords
[
token
.
Val
];
ok
{
typ
=
val
break
}
}
return
typ
}
ast/token_test.go
浏览文件 @
ac810d3e
...
@@ -237,3 +237,19 @@ func TestNewLines(t *testing.T) {
...
@@ -237,3 +237,19 @@ func TestNewLines(t *testing.T) {
}
}
common
.
Log
.
Debug
(
"Exiting function: %s"
,
common
.
GetFunctionName
())
common
.
Log
.
Debug
(
"Exiting function: %s"
,
common
.
GetFunctionName
())
}
}
func
TestQueryType
(
t
*
testing
.
T
)
{
common
.
Log
.
Debug
(
"Entering function: %s"
,
common
.
GetFunctionName
())
var
testSQLs
=
[]
string
{
`(select 1)`
,
}
err
:=
common
.
GoldenDiff
(
func
()
{
for
_
,
buf
:=
range
append
(
testSQLs
,
common
.
TestSQLs
...
)
{
fmt
.
Println
(
QueryType
(
buf
))
}
},
t
.
Name
(),
update
)
if
nil
!=
err
{
t
.
Fatal
(
err
)
}
common
.
Log
.
Debug
(
"Exiting function: %s"
,
common
.
GetFunctionName
())
}
cmd/soar/soar.go
浏览文件 @
ac810d3e
...
@@ -163,6 +163,10 @@ func main() {
...
@@ -163,6 +163,10 @@ func main() {
_
,
err
=
pretty
.
Println
(
ast
.
Tokenize
(
sql
))
_
,
err
=
pretty
.
Println
(
ast
.
Tokenize
(
sql
))
common
.
LogIfWarn
(
err
,
""
)
common
.
LogIfWarn
(
err
,
""
)
continue
continue
case
"query-type"
:
// query type by first key word
fmt
.
Println
(
ast
.
QueryType
(
sql
))
continue
default
:
default
:
// SQL 签名
// SQL 签名
id
=
query
.
Id
(
fingerprint
)
id
=
query
.
Id
(
fingerprint
)
...
...
cmd/soar/soar_test.go
浏览文件 @
ac810d3e
...
@@ -63,7 +63,7 @@ func Test_Main_More(_ *testing.T) {
...
@@ -63,7 +63,7 @@ func Test_Main_More(_ *testing.T) {
orgRerportType
:=
common
.
Config
.
ReportType
orgRerportType
:=
common
.
Config
.
ReportType
for
_
,
typ
:=
range
[]
string
{
for
_
,
typ
:=
range
[]
string
{
"json"
,
"html"
,
"markdown"
,
"fingerprint"
,
"compress"
,
"pretty"
,
"rewrite"
,
"json"
,
"html"
,
"markdown"
,
"fingerprint"
,
"compress"
,
"pretty"
,
"rewrite"
,
"ast"
,
"tiast"
,
"ast-json"
,
"tiast-json"
,
"tokenize"
,
"lint"
,
"tables"
,
"ast"
,
"tiast"
,
"ast-json"
,
"tiast-json"
,
"tokenize"
,
"lint"
,
"tables"
,
"query-type"
,
}
{
}
{
common
.
Config
.
ReportType
=
typ
common
.
Config
.
ReportType
=
typ
main
()
main
()
...
...
common/config.go
浏览文件 @
ac810d3e
...
@@ -884,6 +884,11 @@ var ReportTypes = []ReportType{
...
@@ -884,6 +884,11 @@ var ReportTypes = []ReportType{
Description
:
"以 JSON 格式输出 SQL 使用的库表名"
,
Description
:
"以 JSON 格式输出 SQL 使用的库表名"
,
Example
:
`echo "select * from film" | soar -report-type meta`
,
Example
:
`echo "select * from film" | soar -report-type meta`
,
},
},
{
Name
:
"query-type"
,
Description
:
"SQL 语句的请求类型"
,
Example
:
`echo "select * from film" | soar -report-type query-type`
,
},
{
{
Name
:
"fingerprint"
,
Name
:
"fingerprint"
,
Description
:
"输出SQL的指纹"
,
Description
:
"输出SQL的指纹"
,
...
...
doc/report_type.md
浏览文件 @
ac810d3e
...
@@ -66,6 +66,14 @@ echo "select * from film" | soar -report-type tiast-json
...
@@ -66,6 +66,14 @@ echo "select * from film" | soar -report-type tiast-json
```
bash
```
bash
echo
"select * from film"
| soar
-report-type
meta
echo
"select * from film"
| soar
-report-type
meta
```
```
## query-type
*
**Description**
:SQL 语句的请求类型
*
**Example**
:
```
bash
echo
"select * from film"
| soar
-report-type
query-type
```
## fingerprint
## fingerprint
*
**Description**
:输出SQL的指纹
*
**Description**
:输出SQL的指纹
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录