This is a set of rules which uses sqlc to generate Go code (types and functions) based on a SQL schema/migrations and a list of queries to be turned into functions.
It also embeds the migrations using bindata.
In an empty directory (eg. monogon/foo/bar/model), create:
1662395623_foo.up.sql and 1662395623_foo.down.sql containing CREATE TABLE and DROP TABLE statements respectively.query.sql file).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).
TODO(q3k): document migrations (and probably move them to a subpackage).