
GORM has certain downsides: - Code-first approach, where queries have to be translated to the Go code required to execute them. - GORM comes with its own SQLite implementation, which doesn't provide an on-connect callback. This means that new connections cannot correctly enable foreign key constraints, causing database consistency issues. [SQLC](https://sqlc.dev/) solves these issues for us. This commit doesn't fully replace GORM with SQLC, but introduces it for a few queries. Once all queries have been converted, GORM can be removed completely.
30 lines
810 B
Markdown
30 lines
810 B
Markdown
---
|
|
title: Database
|
|
weight: 50
|
|
---
|
|
|
|
Flamenco Manager and Worker use SQLite as database, and GORM as
|
|
object-relational mapper (but see the note below).
|
|
|
|
Since SQLite has limited support for altering table schemas, migration requires
|
|
copying old data to a temporary table with the new schema, then swap out the
|
|
tables. Because of this, avoid `NOT NULL` columns, as they will be problematic
|
|
in this process.
|
|
|
|
## SQLC
|
|
|
|
Flamenco mostly uses [GORM][gorm] for interfacing with its SQLite database. This
|
|
is gradually being phased out, to be replaced with [SQLC][sqlc].
|
|
|
|
To generate the SQLC schema file:
|
|
```sh
|
|
make db-migrate-up
|
|
go run ./cmd/sqlc-export-schema
|
|
```
|
|
|
|
To generate Go code with SQLC after changing `schema.sql` or `queries.sql`:
|
|
```sh
|
|
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
|
|
sqlc generate
|
|
```
|