提交 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 {
}
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) {
}
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() {
_, 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)
......
......@@ -63,7 +63,7 @@ func Test_Main_More(_ *testing.T) {
orgRerportType := common.Config.ReportType
for _, typ := range []string{
"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
main()
......
......@@ -884,6 +884,11 @@ var ReportTypes = []ReportType{
Description: "以 JSON 格式输出 SQL 使用的库表名",
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",
Description: "输出SQL的指纹",
......
......@@ -66,6 +66,14 @@ echo "select * from film" | soar -report-type tiast-json
```bash
echo "select * from film" | soar -report-type meta
```
## query-type
* **Description**:SQL 语句的请求类型
* **Example**:
```bash
echo "select * from film" | soar -report-type query-type
```
## fingerprint
* **Description**:输出SQL的指纹
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册