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