Version 0.8 of SQLAlchemy added support of indexes
on expressions in addition to plain table columns,
which changed the way indexes are created.
This broke support of dropping columns of composite
indexes for SQLite: due to limitations of ALTER in
SQLite every time a column is dropped, we recreate
the whole table without the given column; if a
column is a part of a composite index, we change the
index definition to omit that column and then indexes
are recreated too.
SQLAlchemy versions starting from 0.8 no more pay
attention to 'columns' attribute of Index instances
when generating DDL for indexes, so when one of columns
of a composite index is dropped, we try to create a
new index on the column that doesn't exist anymore,
which of course fails.
Closes-Bug: #1241038
Change-Id: I777b8ce36e36f49bfb0889908811a063cf1a527b
In addition to running tests with different Python and SQLAlchemy
versions, they should also be run on different DB backends, which
are used in production (PostgreSQL and MySQL).
This patch:
- modifies test_db.cfg to run tests on PostgreSQL and MySQL
(Jenkins Slave credentials are used here, to ensure these
tests are always run by Jenkins gate); if a backend is not
available, test cases will be skipped for it
- concurrency is set to 1 (sharing of the one MySQL or PostgreSQL
DB among different test runner processes would lead to
race conditions)
- fixes tests dropping FK columns in MySQL: in earlier MySQL
versions dropping a column that is a part of a FK constraint
would lead to dropping of the FK too. As of MySQL 5.5 that's
not the case anymore: if one tries to drop such column, he/she
will get a very obscure error (something like "Error on rename
of './openstack_citest/#sql-4af_aa2' to './openstack_citest/tmp_adddropcol'
(errno: 150)") '\nALTER TABLE tmp_adddropcol DROP COLUMN r2').
So the solution if to drop FK constraints first, and only then
the columns it is made up of
Change-Id: I8c5d2874c83e7df46da69969ed54d85437c849e7