SQLVET는 GO Code Base의 원시 SQL 쿼리에 대한 정적 분석을 수행하여 빌드 시점에 표면 잠재적 런타임 오류를 나타냅니다.
기능 하이라이트 :
TODO :
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에게 query 또는 sql 이라는 첫 번째 매개 변수가있는 github.com/mattermost/gorp 패키지의 모든 함수/메소드를 분석하도록 지시합니다.
쿼리 함수를 이름으로 일치시킬 수도 있습니다.
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 위의 구성은 SQLVET에 github.com/jmoiron/sqlx 패키지에서 NamedExecContext 라는 이름의 모든 함수/메소드의 두 번째 매개 변수를 분석하도록 지시합니다.
거짓 긍정적 인 것을 건너 뛰려면 sqlvet: ignore .
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET은 Safesql 및 SQLC에서 영감을 받았습니다.