SQLVET выполняет статический анализ необработанных запросов SQL в вашей базе кода GO, чтобы поверхности потенциальных ошибок времени выполнения во время сборки.
Основные моменты функции:
Тодо:
Идти меньше 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 , github.com/jinzhu/gorm и библиотеки go-gorp/gorp . Однако вы можете настроить его на произвольные функции белого списка, как ниже:
[[ 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 анализировать второй параметр любой функции/метода с именем с именем NamedExecContext в github.com/jmoiron/sqlx .
Чтобы пропустить ложный положительный, аннотировать соответствующую строку с sqlvet: ignore комментарий:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET был вдохновлен SAFESQL и SQLC.