SQLVET effectue une analyse statique sur les requêtes SQL brutes dans votre base de code GO pour surface des erreurs d'exécution de potentiel de surface au moment de la construction.
Fonctionnement des éléments:
FAIRE:
Aller moins de 1,18:
$ go get github.com/houqp/sqlvetAller plus ou égal à 1,18:
$ go install github.com/houqp/sqlvet@latestSQLVET devrait fonctionner hors de la boîte pour tout projet GO à l'aide de modules Go:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
Remarque: le code inaccessible sera ignoré.
Pour activer une analyse plus approfondie, créez un fichier de configuration sqlvet.toml à la racine de votre projet et spécifiez le chemin d'accès à un fichier de schéma de base de données:
$ 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.
Par défaut, SQLVET vérifie tous les appels à la fonction de requête dans database/sql , github.com/jmoiron/sqlx , github.com/jinzhu/gorm et go-gorp/gorp bibliothèques. Vous pouvez cependant le configurer sur des fonctions de requête arbitraire de la liste blanche comme ci-dessous:
[[ 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 La configuration ci-dessus indique à SQLVET d'analyser n'importe quelle fonction / méthode à partir du package github.com/mattermost/gorp qui a le premier paramètre nommé query ou sql .
Vous pouvez également faire correspondre les fonctions de requête par noms:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 La configuration ci-dessus indique à SQLVET d'analyser le deuxième paramètre de n'importe quelle fonction / méthode nommée nommée NamedExecContext dans github.com/jmoiron/sqlx package.
Pour sauter un faux positif, annotez la ligne pertinente avec sqlvet: ignore le commentaire:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET a été inspiré par SafeSQL et SQLC.