SQLVET führt eine statische Analyse von RAW -SQL -Abfragen in Ihrer GO -Code -Basis durch, um potenzielle Laufzeitfehler zum Erstellungszeit zu ermitteln.
Feature -Highlights:
Todo:
Gehen Sie weniger als 1,18:
$ go get github.com/houqp/sqlvetGehen Sie größer oder gleich 1,18:
$ go install github.com/houqp/sqlvet@latestSQLVET sollte für jedes GO -Projekt mit Go -Modulen in der Box herausarbeiten:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
Hinweis: Der nicht erreichbare Code wird übersprungen.
Erstellen Sie eine detailliertere Analyse, erstellen Sie eine konfigurierende Datei sqlvet.toml am Stamm Ihres Projekts und geben Sie den Pfad zu einer Datenbankschema-Datei an:
$ 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.
Standardmäßig überprüft SQLVET alle Aufrufe zur Abfragefunktion in database/sql , github.com/jmoiron/sqlx , github.com/jinzhu/gorm und go-gorp/gorp Bibliotheken. Sie können es jedoch mit willkürlichen Abfragefunktionen der weißen Liste konfigurieren, wie unten:
[[ 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 Die obige Konfiguration fordert SQLVET an, jede Funktion/Methode vom Paket github.com/mattermost/gorp zu analysieren, das den ersten Parameter mit dem Namen query oder sql enthält.
Sie können auch Abfragefunktionen mit Namen übereinstimmen:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 In der obigen Konfiguration wird SQLVET angewiesen, den zweiten Parameter einer beliebigen Funktion/Methode mit dem Namen NamedExecContext in github.com/jmoiron/sqlx -Paket zu analysieren.
Um ein falsch positives Überspringen zu überspringen, kommentieren Sie die entsprechende Zeile mit sqlvet: ignore :
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET wurde von Safesql und SQLC inspiriert.