O SQLVET realiza análise estática em consultas SQL brutas em sua base de código GO para superfície de erros de tempo de execução em potencial no momento da construção.
Destaques de recursos:
PENDÊNCIA:
Vá menos de 1,18:
$ go get github.com/houqp/sqlvetVá maior ou igual a 1,18:
$ go install github.com/houqp/sqlvet@latestO SQLVET deve funcionar fora da caixa para qualquer projeto GO usando os módulos Go:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
NOTA: O código inacessível será ignorado.
Para ativar uma análise mais aprofundada, crie um arquivo de configuração sqlvet.toml na raiz do seu projeto e especifique o caminho para um arquivo de esquema de banco de dados:
$ 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.
Por padrão, o SQLVET verifica todas as chamadas para a função de consulta no database/sql , github.com/jmoiron/sqlx , bibliotecas github.com/jinzhu/gorm e go-gorp/gorp . No entanto, você pode configurá-lo para funções de consulta arbitrária na lista branca, como abaixo:
[[ 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 A configuração acima diz ao SQLVET para analisar qualquer função/método do pacote github.com/mattermost/gorp que possui o primeiro parâmetro chamado query ou sql .
Você também pode combinar funções de consulta por nomes:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 A configuração acima diz ao SQLVET para analisar o segundo parâmetro de qualquer função/método nomeado NamedExecContext em github.com/jmoiron/sqlx pacote.
Para pular um falso positivo, anote a linha relevante com sqlvet: ignore o comentário:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}O SQLVET foi inspirado em SafeSQL e SQLC.