sqlvet
v1.1.8
SQLVETは、GOコードベースのRAW SQLクエリで静的分析を実行し、ビルド時に潜在的なランタイムエラーを表面化します。
機能のハイライト:
TODO:
1.18未満:
$ go get github.com/houqp/sqlvet1.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 github.com/jmoiron/sqlx 、 database/sqlライブラリですべての呼び出し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上記の構成は、 github.com/mattermost/gorp sqlパッケージのqueryの関数/メソッドを分析するようにSqlvetに指示します。
また、名前でクエリ関数を一致させることもできます。
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1上記の構成は、 github.com/jmoiron/sqlx sqlxパッケージのNamedExecContextという名前の任意の関数/メソッドの2番目のパラメーターを分析するようにsqlvetに指示します。
偽陽性をスキップするには、関連するラインにsqlvet: ignore :
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}Sqlvetは、SafeSQLとSQLCに触発されました。