-
-
Notifications
You must be signed in to change notification settings - Fork 201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AutoMigrate: Rename/Create/Drop tables #926
base: master
Are you sure you want to change the base?
Conversation
- RawQuery - CreateTableQuery
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. UPD: opened #927 for this specific change. Should make it easier to review the current one once the other changes are merged. |
HasOneRelation and BelongsToRelation aren't checked anywhere at the moment, but the change is necessary to avoid any hidden bugs in the future.
+ Document the logic for omitting the clause for some Relations The name References() is derived from the REFERENCES keyword used to declare an FK constraint
Subsequent calls to WithForeignKeys() should not create additional FOREIGN KEY clauses in the query. DBs probably have no problem dealing with duplicated FKs, but this behaviour is hardly expected / relied on by anyone.
Additionally: - allow custom FK names (limited applicability rn) - implement GetReverse for AddFK and DropFK - detect renamed foreign keys - EqualSignature handles empty models (no columns)
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 byAutoMigrator
'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:
type:
)Other:
test.sh
to pass additional arguments togo test
(for example, now possible to run 1 test with
./test.sh -run=TestAutoMigrator_Run
)