sqlvet
v1.1.8
SQLVET對您的GO代碼基庫中的RAW SQL查詢進行靜態分析,以在構建時表面潛在的運行時錯誤。
功能亮點:
托多:
少於1.18:
$ go get github.com/houqp/sqlvet走更大或相等1.18:
$ go install github.com/houqp/sqlvet@latestSQLVET應該使用GO模塊進行任何GO項目的開箱即用:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
注意:將跳過無法實現的代碼。
要啟用更深入的分析,請在項目的根部創建一個sqlvet.toml配置文件,並指定數據庫架構文件的路徑:
$ cat ./sqlvet.toml
schema_path = "schema/full_schema.sql"
$ sqlvet .
Loaded DB schema from schema/full_schema.sql
table alembic_version with 1 columns
table incident with 13 columns
table usr with 4 columns
Exec @ ./pkg/incident.go:75:19
UPDATE incident SET oops = $1 WHERE id = $2
ERROR: column `oops` is not defined in table `incident`
Checked 10 SQL queries.
Identified 1 errors.
默認情況下,SQLVET在database/sql github.com/jmoiron/sqlx go-gorp/gorp庫中檢查所有查詢函數github.com/jinzhu/gorm調用。然而
[[ sqlfunc_matchers ]]
pkg_path = " github.com/mattermost/gorp "
[[ sqlfunc_matchers . rules ]]
query_arg_name = " query "
query_arg_pos = 0
[[ sqlfunc_matchers . rules ]]
query_arg_name = " sql "
query_arg_pos = 0上面的配置告訴SQLVET從github.com/mattermost/gorp軟件包分析具有名為query或sql第一個參數的任何函數/方法。
您還可以按名稱匹配查詢函數:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1上面的配置告訴SQLVET在github.com/jmoiron/sqlx軟件包中分析名為NamedExecContext的任何函數/方法的第二個參數。
要跳過誤報,請註釋與sqlvet: ignore評論:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET的靈感來自SafesQL和SQLC。