uptrace / bun

SQL-first Golang ORM
https://bun.uptrace.dev
BSD 2-Clause "Simplified" License
3.65k stars 221 forks source link

AutoMigrate: Rename/Create/Drop tables #926

Open bevzzz opened 11 months ago

bevzzz commented 11 months ago

This PR is my second attempt at implementing #456 :)

This time around I decided to start with the functionality we want to bring (AutoMigrator), design a good interface and work from there.

I took into account our discussions of the ALTER TABLE functionality from #726 and let each dialect export a simple RenameTable(context.Context, string, string) function to be used by AutoMigrator's internals. My thinking was that, if auto migration is done well, the users wouldn't need to work with ALTER TABLE all that much.

AutoMigrator.Migrate() is just a sketch -- running it will do the migration and record it in the db, but the users won't be able to revert it because no migration file (.sql or .go) is generated at the moment. AutoMigrator.Run() should be used to run the migrations "in-place".

There might be other improvements to make here (e.g. add more unit test cases) but I thought I'd put it out here sooner to get the feedback.

What is still to do:

Other:

bevzzz commented 11 months ago

I had to update a lot of to the existing unit tests (~5-7 files) because I noticed that many of them weren't properly cleaning up the database, causing side-effects in the auto-migrate tests.
All of those changes come in a single commit and I could open a different PR for them to be merged separately.

UPD: opened #927 for this specific change. Should make it easier to review the current one once the other changes are merged.