graphile / migrate

Opinionated SQL-powered productive roll-forward migration tool for PostgreSQL.
MIT License
751 stars 58 forks source link

Feature request: `compile` and `run` should be able to `--!include` fixtures #217

Open FelixZY opened 5 months ago

FelixZY commented 5 months ago

Summary

I set up a current.sql like this:

--!include schemas/private.sql
--!include schemas/public.sql
--!include functions/uid.sql
--!include tables/accounts.sql
--!include types/jwt_token.sql
--!include functions/authenticate.sql

I then tried running graphile-migrate compile and graphile-migrate run against it but the fixtures do not appear to be substituted in:

$ graphile-migrate --config src/db/.gmrc compile  src/db/migrations/current.sql
--!include schemas/private.sql
--!include schemas/public.sql
--!include functions/uid.sql
--!include tables/accounts.sql
--!include types/jwt_token.sql
--!include functions/authenticate.sql
$ graphile-migrate --config src/db/.gmrc run  src/db/migrations/current.sql
┌───┐
│   │
├───┤
└───┘

The fixtures are substituted in correctly when running graphile-migrate --config src/db/.gmrc commit

Steps to reproduce

See above

Expected results

The fixtures should be substituted in when using compile and run

Actual results

The fixtures are not substituted in when using compile and run

Additional context

OS: dockerized mcr.microsoft.com/devcontainers/base:bookworm running on ubuntu 20.0.4 graphile-migrate: 2.0.0-rc.2 bun: 1.1.13

Possible Solution

Support fixture substitution in compile and run

FelixZY commented 5 months ago

The reason I noticed this is because I prefer graphile-migrate run ./migrations/current.sql over watch as I don't want to run semi-completed statements accidentally. I also don't want to mess with my editor (vscode) to disable auto-save for a single file in my repo.

benjie commented 5 months ago

You should use graphile-migrate watch --once rather than graphile-migrate run for your use case.