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。