I am working with sqlc in golang. Most of the work has been very good. But now my project is growing a little bit an I am struggling to have some level of organization
I am organizing my sqls in repository files like:
├── queries
│ ├── objects.sql
│ ├── object_versions.sql
│ └── project_config.sql
I wanted a package to each of the queries, so I come up with the following sqlc.yaml config
version: "2"
sql:
- &default
name: "common"
engine: "postgresql"
queries: "./internal/db/queries.sql"
schema: "./internal/db/shared_schema.sql"
gen:
go: &go_defaults
package: "common"
out: "internal/db/repository/common"
sql_package: "pgx/v5"
emit_json_tags: true
- <<: *default
name: "objects"
engine: "postgresql"
queries: "./internal/db/queries/objects.sql"
gen:
go:
<<: *go_defaults
package: "objects"
out: "internal/db/repository/objects"
- <<: *default
name: "object_versions"
engine: "postgresql"
queries: "./internal/db/queries/object_versions.sql"
gen:
go:
<<: *go_defaults
package: "objects_version"
out: "internal/db/repository/objects_version"
- name: "project_config"
engine: "postgresql"
queries: "./internal/db/queries/project_config.sql"
schema: "./internal/db/shared_schema.sql"
gen:
go:
<<: *go_defaults
package: "project_config"
out: "internal/db/repository/project_config"
When I split one .sql for each item the sql array, I am able to generate almost my desired output: Except that the models.go keep being generated for each of them
├── repository
│ ├── common
│ │ ├── copyfrom.go
│ │ ├── db.go
│ │ ├── models.go
│ │ └── queries.sql.go
│ ├── objects
│ │ ├── db.go
│ │ ├── models.go
│ │ └── objects.sql.go
│ ├── objects_version
│ │ ├── db.go
│ │ ├── models.go
│ │ └── object_versions.sql.go
│ └── project_config
│ ├── db.go
│ ├── models.go
│ └── project_config.sql.go
├── seed.sql
└── shared_schema.sql
From the current version of my sqlc.yaml, that is kind of obvious. What isn’t obvious though it is how can I have a unique separate models.go file that is shared between my query pckages.
Using all my queries from the same package is not the biggest problem. The biggest issue is that I can’t have the same names for queries in different files. Which is very annoying.
Is there any way that I can have a shared models.go across my generated packages?
3