Mike Bayer [Wed, 22 Jul 2015 16:37:35 +0000 (12:37 -0400)]
- Fixed critical issue where a complex series of branches/merges would
bog down the iteration algorithm working over redundant nodes for
millions of cycles. An internal adjustment has been
made so that duplicate nodes are skipped within this iteration.
fixes #310
Mike Bayer [Fri, 3 Jul 2015 21:29:17 +0000 (17:29 -0400)]
- Implemented support for :meth:`.BatchOperations.create_primary_key`
and :meth:`.BatchOperations.create_check_constraint`.
fixes #305
- table keyword arguments are copied from the original reflected table,
such as the "mysql_engine" keyword argument.
Mike Bayer [Tue, 9 Jun 2015 15:40:34 +0000 (11:40 -0400)]
- The :meth:`.MigrationContext.stamp` method, added as part of the
versioning refactor in 0.7 as a more granular version of
:func:`.command.stamp`, now includes the "create the alembic_version
table if not present" step in the same way as the command version,
which was previously omitted.
fixes #300
Mike Bayer [Tue, 19 May 2015 00:21:49 +0000 (20:21 -0400)]
- Fixed bug where foreign key options including "onupdate",
"ondelete" would not render within the ``op.create_foreign_key()``
directive, even though they render within a full
``ForeignKeyConstraint`` directive.
fixes #298
Mike Bayer [Mon, 4 May 2015 00:17:19 +0000 (20:17 -0400)]
- Fixed bug where the case of multiple mergepoints that all
have the identical set of ancestor revisions would fail to be
upgradable, producing an assertion failure. Merge points were
previously assumed to always require at least an UPDATE in
alembic_revision from one of the previous revs to the new one,
however in this case, if one of the mergepoints has already
been reached, the remaining mergepoints have no row to UPDATE therefore
they must do an INSERT of their target version.
fixes #297
Mike Bayer [Thu, 30 Apr 2015 15:33:58 +0000 (11:33 -0400)]
- Added support for type comparison functions to be not just per
environment, but also present on the custom types themselves, by
supplying a method ``compare_against_backend``.
Added a new documentation section :ref:`compare_types` describing
type comparison fully.
fixes #296
Mike Bayer [Tue, 7 Apr 2015 16:36:51 +0000 (12:36 -0400)]
- Added a new option
:paramref:`.EnvironmentContext.configure.literal_binds`, which
will pass the ``literal_binds`` flag into the compilation of SQL
constructs when using "offline" mode. This has the effect that
SQL objects like inserts, updates, deletes as well as textual
statements sent using ``text()`` will be compiled such that the dialect
will attempt to render literal values "inline" automatically.
Only a subset of types is typically supported; the
:meth:`.Operations.inline_literal` construct remains as the construct
used to force a specific literal representation of a value.
The :paramref:`.EnvironmentContext.configure.literal_binds` flag
is added to the "offline" section of the ``env.py`` files generated
in new environments.
fixes #255
- enhance the op_fixture as well as MigrationContext._stdout_connection()
so that it uses the real DefaultImpl
and MigrationContext fully in tests.
Mike Bayer [Fri, 27 Mar 2015 22:55:00 +0000 (18:55 -0400)]
- Fully implemented the
:paramref:`~.Operations.batch_alter_table.copy_from` parameter for
batch mode, which previously was not functioning. This allows
"batch mode" to be usable in conjunction with ``--sql``.
fixes #289
- sqlite dialect checks for "create_index" and "drop_index" as exceptions
for "recreate" in batch mode, the same way as "add_column", so that
unnecessary table recreates don't emit for index-only operations
Mike Bayer [Fri, 27 Mar 2015 19:15:55 +0000 (15:15 -0400)]
- Repaired support for the :meth:`.BatchOperations.create_index`
directive, which was mis-named internally such that the operation
within a batch context could not proceed.
fixes #287
Mike Bayer [Tue, 10 Mar 2015 15:26:43 +0000 (11:26 -0400)]
- Postgresql "functional" indexes are necessarily skipped from the
autogenerate process, as the SQLAlchemy backend currently does not
support reflection of these structures. A warning is emitted
both from the SQLAlchemy backend as well as from the Alembic
backend for Postgresql when such an index is detected.
fixes #282
Mike Bayer [Sat, 21 Feb 2015 00:20:53 +0000 (19:20 -0500)]
- Fixed bug where MySQL backend would report dropped unique indexes
and/or constraints as both at the same time. This is because
MySQL doesn't actually have a "unique constraint" construct that
reports differently than a "unique index", so it is present in both
lists. The net effect though is that the MySQL backend will report
a dropped unique index/constraint as an index in cases where the object
was first created as a unique constraint, if no other information
is available to make the decision. This differs from other backends
like Postgresql which can report on unique constraints and
unique indexes separately.
fixes #276
Mike Bayer [Mon, 9 Feb 2015 00:27:42 +0000 (19:27 -0500)]
- additional fix which impacts #267. fix filtered_heads() to accommodate
being given "heads" as the target so that it will in fact match when all heads
are given. fixes #267
Mike Bayer [Tue, 3 Feb 2015 16:40:40 +0000 (11:40 -0500)]
- move resolution of "starting rev" for --sql mode into
get_current_heads() directly; therefore we don't need to
do this in alembic.command, which we were doing for stamp but
not downgrade/upgrade. The slight change here is that the
context.get_starting_revision_argument() method will
return an abbreviated starting rev as abbreviated in
all cases, including the stamp command, where we previously
were converting a stamp argument first, but not for the
upgrade or downgrade commands.
- Fixed bug where using a partial revision identifier as the
"starting revision" in ``--sql`` mode in a downgrade operation
would fail to resolve properly. fixes #269
Mike Bayer [Sat, 24 Jan 2015 01:05:02 +0000 (20:05 -0500)]
- Added a new feature :attr:`.Config.attributes`, to help with the use
case of sharing state such as engines and connections on the outside
with a series of Alembic API calls; also added a new cookbook section
to describe this simple but pretty important use case.
Change single-quoting of floats in PostgreSQL compare_server_default
Do not wrap string defaults with single quotes when comparing against
columns of type float or numeric.
This fixes the crash occuring when the default of a float column is
an integer value (e.g., DEFAULT 5), while the Python server_default is
a string (e.g., server_default="5.0"). This results in the query
used in the comparison to throw a DataError ('SELECT 5 = '5.0').
Mike Bayer [Sat, 10 Jan 2015 22:08:03 +0000 (17:08 -0500)]
- The rendering of a :class:`~sqlalchemy.schema.ForeignKeyConstraint`
will now ensure that the names of the source and target columns are
the database-side name of each column, and not the value of the
``.key`` attribute as may be set only on the Python side.
This is because Alembic generates the DDL for constraints
as standalone objects without the need to actually refer to an in-Python
:class:`~sqlalchemy.schema.Table` object, so there's no step that
would resolve these Python-only key names to database column names.
fixes #259
Mike Bayer [Sat, 10 Jan 2015 21:32:17 +0000 (16:32 -0500)]
- Fixed bug in foreign key autogenerate where if the in-Python table
used custom column keys (e.g. using the ``key='foo'`` kwarg to
``Column``), the comparison of existing foreign keys to those specified
in the metadata would fail, as the reflected table would not have
these keys available which to match up. Foreign key comparison for
autogenerate now ensures it's looking at the database-side names
of the columns in all cases; this matches the same functionality
within unique constraints and indexes.
fixes #260
Mike Bayer [Fri, 9 Jan 2015 16:26:36 +0000 (11:26 -0500)]
- changelog: Fixed issue in autogenerate type rendering where types that belong
to modules that have the name "sqlalchemy" in them would be mistaken
as being part of the ``sqlalchemy.`` namespace. Pull req courtesy
Bartosz Burclaf. fixes #261
Mike Bayer [Tue, 30 Dec 2014 17:12:58 +0000 (12:12 -0500)]
- Fixed regression in new versioning system where upgrade / history
operation would fail on AttributeError if no version files were
present at all.
fixes #258
Mike Bayer [Sun, 14 Dec 2014 17:10:56 +0000 (12:10 -0500)]
- Adjusted the SQLite backend regarding autogen of unique constraints
to work fully with the current SQLAlchemy 1.0, which now will report
on UNIQUE constraints that have no name.
- fix named foreign key test requirements for SQLAlchemy 1.0 sqlite
FK reflection
Mike Bayer [Sat, 13 Dec 2014 19:02:14 +0000 (14:02 -0500)]
- Fixed bug in batch where if the target table contained multiple
foreign keys to the same target table, the batch mechanics would
fail with a "table already exists" error. Thanks for the help
on this from Lucas Kahlert. fixes #254
Mike Bayer [Fri, 12 Dec 2014 17:55:08 +0000 (12:55 -0500)]
-Repaired a regression in both the MSSQL and Oracle dialects whereby
the overridden ``_exec()`` method failed to return a value, as is
needed now in the 0.7 series. fixes #253
- add __backend__ to UpdateRevTest which does a great job testing
_exec() pathing for all backends
MySQL: Ignore unique indexes when removing implicit indexes
MySQL will implicitly create indexes when using foreign keys. Alembic
attempts to remove those implicit indexes so they don't appear as
removes when comparing metadata.
However, unique indexes with the same name as a column are considered
as possibly implicitly created causing alembic to emit a spurious
'remove_constraint'.
Since MySQL will never implicitly create unique indexes, they can be
safely ignored when removing the implicit indexes.
Mike Bayer [Wed, 3 Dec 2014 20:49:58 +0000 (15:49 -0500)]
- The ``render_as_batch`` flag was inadvertently hardcoded to ``True``,
so all autogenerates were spitting out batch mode...this has been
fixed so that batch mode again is only when selected in env.py.
Mike Bayer [Sun, 30 Nov 2014 23:55:29 +0000 (18:55 -0500)]
- Added :paramref:`~.Operations.batch_alter_table.naming_convention`
argument to :meth:`.Operations.batch_alter_table`, as this is necessary
in order to drop foreign key constraints; these are often unnamed
on the target database, and in the case that they are named, SQLAlchemy
is as of the 0.9 series not including these names yet.
- rework the docs on batch + constraints, which remains subject
to a lot of caveats and problems, some to be resolved in SQLAlchemy 1.0
Mike Bayer [Sun, 30 Nov 2014 23:50:03 +0000 (18:50 -0500)]
- name the include_object hook "foreign_key_constraint"
- changelog and other doc updates, fixes #178
- fix drop_constraint() unit tests and add two more for FKs
Mike Bayer [Sun, 30 Nov 2014 23:02:57 +0000 (18:02 -0500)]
- refactor the FK merge a bit
- getting at attributes of FKs varies a bit on SQLA versions,
so implement an _fk_spec() called for all FK inspection
- to enable include_object() filters and allow the FK constraint
code to flow like that of indexes/uniques, change the approach
so that we deal with an _fk_constraint_sig() object again which
contains the real ForeignKeyConstraint() within; we need this
anyway for include_object, but also allows us to use the standard
"drop_constraint" call for rendering.
- enhance tests in test_autogen_fks to support real FK databases like
Postgresql, MySQL, add in InnoDB flags and ensure that FKs refer
to real primary key constraints for PG support
- implement and test include_object() support for FKs
- inspectors all have get_foreign_keys(), no need to check
- repair the drop_constraint call to quote the "type" and table
name correctly, run all constraint drops through drop_constraint()
for rendering
- fix up schema identifiers for foreign key autogens
Mike Bayer [Sun, 30 Nov 2014 19:20:40 +0000 (14:20 -0500)]
- Merge branch 'add_fk_check' of https://bitbucket.org/akamyshnikova/alembic into pr32
- complete merge, get all tests passing
- use 'foreignkey' literal
Mike Bayer [Sun, 30 Nov 2014 16:46:37 +0000 (11:46 -0500)]
- Fixed bug where the "source_schema" argument was not correctly passed
when calling :meth:`.BatchOperations.create_foreign_key`. Pull
request courtesy Malte Marquarding.
- add tests
Mike Bayer [Sat, 29 Nov 2014 21:31:30 +0000 (16:31 -0500)]
- Repaired the inspection, copying and rendering of CHECK constraints
and so-called "schema" types such as Boolean, Enum within the batch
copy system; the CHECK constraint will not be "doubled" when the table is
copied, and additionally the inspection of the CHECK constraint for
its member columns will no longer fail with an attribute error.
fixes #249
- Added two new arguments
:paramref:`.Operations.batch_alter_table.reflect_args`
and :paramref:`.Operations.batch_alter_table.reflect_kwargs`, so that
arguments may be passed directly to suit the
:class:`~.sqlalchemy.schema.Table`
object that will be reflected.
Mike Bayer [Sun, 23 Nov 2014 20:35:12 +0000 (15:35 -0500)]
- The ``alembic revision`` command accepts the ``--sql`` option to
suit some very obscure use case where the ``revision_environment``
flag is set up, so that ``env.py`` is run when ``alembic revision``
is run even though autogenerate isn't specified. As this flag is
otherwise confusing, error messages are now raised if
``alembic revision`` is invoked with both ``--sql`` and
``--autogenerate`` or with ``--sql`` without
``revision_environment`` being set.
fixes #248
Mike Bayer [Sun, 23 Nov 2014 20:23:52 +0000 (15:23 -0500)]
- Relative revision identifiers as used with ``alembic upgrade``,
``alembic downgrade`` and ``alembic history`` can be combined with
specific revisions as well, e.g. ``alembic upgrade ae10+3``, to produce
a migration target relative to the given exact version.