1.4.0
Released: February 4, 2020
feature
-
[feature] [batch] Added new parameters
BatchOperations.add_column.insert_before
,
BatchOperations.add_column.insert_after
which provide for
establishing the specific position in which a new column should be placed.
Also addedOperations.batch_alter_table.partial_reordering
which allows the complete set of columns to be reordered when the new table
is created. Both operations apply only to when batch mode is recreating
the whole table usingrecreate="always"
. Thanks to Marcin Szymanski
for assistance with the implementation.References: #640
bug
-
[bug] [autogenerate] Adjusted the unique constraint comparison logic in a similar manner as that
of #421 did for indexes in order to take into account SQLAlchemy's
own truncation of long constraint names when a naming convention is in use.
Without this step, a name that is truncated by SQLAlchemy based on a unique
constraint naming convention or hardcoded name will not compare properly.References: #647
-
[bug] [autogenerate] A major rework of the "type comparison" logic is in place which changes the
entire approach by which column datatypes are compared. Types are now
compared based on the DDL string generated by the metadata type vs. the
datatype reflected from the database. This means we compare types based on
what would actually render and additionally if elements of the types change
like string length, those changes are detected as well. False positives
like those generated between SQLAlchemy Boolean and MySQL TINYINT should
also be resolved. Thanks very much to Paul Becotte for lots of hard work
and patience on this one.References: #605
usecase
-
[usecase] [environment] Moved the use of the
__file__
attribute at the base of the Alembic
package into the one place that it is specifically needed, which is when
the config attempts to locate the template directory. This helps to allow
Alembic to be fully importable in environments that are using Python
memory-only import schemes. Pull request courtesy layday.References: #648
misc
- [change] The internal inspection routines no longer use SQLAlchemy's
Inspector.from_engine()
method, which is expected to be deprecated in
1.4. Theinspect()
function is now used.