Go + Yesql

Treat SQL as code

29 May 2020

Tiago "Myhro" Ilieve

Software Engineer, Toggl

Origins: Yesql

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:

2

Yesql: SQL split from code

-- name: users-by-country
SELECT *
  FROM users
  WHERE country_code = :country_code
(defqueries "users.sql" {:connection db-spec})
(users-by-country {:country_code "GB"})

Advantages:

3

Go + Yesql

There's a Go port of Yeqsl: github.com/nleof/goyesql

-- name: users-by-country
SELECT *
  FROM users
  WHERE country_code = $1
queries, err := goyesql.ParseFile("users.sql")
if err != nil {
    (...)
}

rows, err = db.Query(queries["users-by-country"], countryCode)
if err != nil {
    (...)
}
4

Demo

Storing email + password

5

Thank you

Tiago "Myhro" Ilieve

Software Engineer, Toggl

Use the left and right arrow keys or click the left and right edges of the page to navigate between slides.
(Press 'H' or navigate to hide this message.)