Defer constraints and indexes when creating models through the evolver.

Review Request #12282 — Created May 15, 2022 and submitted

Information

Django Evolution
release-2.x

Reviewers

When generating SQL for new models, EvolveAppTask was lumping together
the SQL for the model creation and for any constraints/indexes. This
could be fine a lot of the time, but depending on the complexity of the
upgrade, that deferred SQL could fail.

A sample scenario would be an app creating a model that has a reference
to an existing model, but to a newer Primary Key type that would be (but
hasn't yet been) evolved on the target model.

We now separately track the model creation SQL and the deferred SQL. All
deferred SQL is executed once all evolutions and migrations have
concluded.

All unit tests pass for all databases.

Verified this fixed a messy upgrade issue with Review Board 4 -> 5.

Summary ID
Defer constraints and indexes when creating models through the evolver.
When generating SQL for new models, `EvolveAppTask` was lumping together the SQL for the model creation and for any constraints/indexes. This could be fine a lot of the time, but depending on the complexity of the upgrade, that deferred SQL could fail. A sample scenario would be an app creating a model that has a reference to an existing model, but to a newer Primary Key type that would be (but hasn't yet been) evolved on the target model. We now separately track the model creation SQL and the deferred SQL. All deferred SQL is executed once all evolutions and migrations have concluded.
fd87cf874ff4490953df00b46ee8a94b4cb7ad2e
chipx86
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-2.x (52c43f8)