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

add new -report-type `query-type`

  echo "select * from tb" | soar -report-type query-type
上级 cc59f44e
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
...@@ -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
}
...@@ -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())
}
...@@ -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)
......
...@@ -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()
......
...@@ -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的指纹",
......
...@@ -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.
先完成此消息的编辑!
想要评论请 注册