blob: 570e02409d3c61ba88ba75acff4357a9388e23a6 [file] [log] [blame] [view]
Bazel rules for sqlc
===
This is a set of rules which uses [sqlc](https://github.com/kyleconroy/sqlc) to generate Go code (types and functions) based on a SQL schema/migrations and a list of queries to be turned into functions.
Usage
---
In an empty directory (eg. monogon/foo/bar/model), create:
- Migration files, eg. `1662395623_foo.up.sql` and `1662395623_foo.down.sql` containing CREATE TABLE and DROP TABLE statements respectively.
- A query file, containing SQL queries annotated with function names and return values (see [official docs](https://docs.sqlc.dev/en/stable/tutorials/getting-started-postgresql.html) for a sample `query.sql` file).
- A `BUILD.bazel` file containing:
```
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("//build/sqlc:sqlc.bzl", "sqlc_go_library")
sqlc_go_library(
name = "sqlc_model",
importpath = "source.monogon.dev/foo/bar/model",
migrations = [
"1662395623_foo.up.sql",
"1662395623_foo.down.sql",
# More migrations can be created by provising larger timestamp values.
],
queries = [
"queries.sql",
],
dialect = "cockroachdb",
)
go_library(
name = "model",
importpath = "source.monogon.dev/foo/bar/model",
embed = [":sqlc_model"],
deps = [
# Might need this for CockroachDB UUID types.
"@com_github_google_uuid//:uuid",
],
)
```
The built `go_library ` will contain sqlc functions corresponding to queries defined in `queries.sql` and structures corresponding to database tables (and query parameters/results).
To list the generated files for inspection/debugging, `bazel aquery //foo/bar:sqlc_model` and find files named `db.go`, `model.go` and `queries.sql.go` (or similar, depending on how your query file(s) are named).
Migrations
---
Currently, you need to manually embed the same migrations files using standard //go:embed directives, then you can used them with golang-migrate via en embed.FS/io.FS/iofs-source. See //cloud/apigw/model for an example.