SQLVET melakukan analisis statis pada kueri SQL mentah di basis kode GO Anda untuk permukaan kesalahan runtime potensial pada waktu pembuatan.
Sorotan fitur:
TODO:
Pergi kurang dari 1,18:
$ go get github.com/houqp/sqlvetPergi lebih besar atau sama 1,18:
$ go install github.com/houqp/sqlvet@latestSQLVET harus bekerja di luar kotak untuk setiap proyek GO menggunakan modul GO:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
Catatan: Kode yang tidak terjangkau akan dilewati.
Untuk mengaktifkan lebih banyak analisis mendalam, buat file konfigurasi sqlvet.toml di root proyek Anda dan tentukan jalur ke file skema basis data:
$ 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.
Secara default, SQLVET memeriksa semua panggilan ke fungsi kueri di database/sql , github.com/jmoiron/sqlx , github.com/jinzhu/gorm dan perpustakaan go-gorp/gorp . Namun Anda dapat mengkonfigurasinya ke fungsi kueri sewenang-wenang daftar putih seperti di bawah ini:
[[ 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 Konfigurasi di atas memberi tahu SQLVET untuk menganalisis fungsi/metode apa pun dari github.com/mattermost/gorp yang memiliki parameter pertama bernama query atau sql .
Anda juga dapat mencocokkan fungsi kueri dengan nama:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 Konfigurasi di atas memberi tahu SQLVET untuk menganalisis parameter kedua dari setiap fungsi/metode bernama bernama NamedExecContext dalam paket github.com/jmoiron/sqlx .
Untuk melewatkan false positive, anotasi baris yang relevan dengan sqlvet: ignore komentar:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET terinspirasi oleh SafeSQL dan SQLC.