Go + Yesql
Treat SQL as code
29 May 2020
Tiago "Myhro" Ilieve
Software Engineer, Toggl
Tiago "Myhro" Ilieve
Software Engineer, Toggl
Yesql is a Clojure library. It was created to avoid:
(query "SELECT * FROM users WHERE country_code = ?" "GB")
(select :* (from :users) (where (= :country_code "GB")))
Disadvantages:
users.sql
-- name: users-by-country SELECT * FROM users WHERE country_code = :country_code
main.clj
(defqueries "users.sql" {:connection db-spec}) (users-by-country {:country_code "GB"})
Advantages:
There's a Go port of Yeqsl: github.com/nleof/goyesql
users.sql
- Positional arguments are used:-- name: users-by-country SELECT * FROM users WHERE country_code = $1
main.go
- Queries are mapped to a map[string]string
:queries, err := goyesql.ParseFile("users.sql") if err != nil { (...) } rows, err = db.Query(queries["users-by-country"], countryCode) if err != nil { (...) }
Storing email + password
5