self.table = table # this is a Table object
self.table_args = table_args
self.table_kwargs = table_kwargs
+ self.temp_table_name = self._calc_temp_name(table.name)
self.new_table = None
self.column_transfers = OrderedDict(
(c.name, {'expr': c}) for c in self.table.c
self.reflected = reflected
self._grab_table_elements()
+ @classmethod
+ def _calc_temp_name(cls, tablename):
+ return ("_alembic_tmp_%s" % tablename)[0:50]
+
def _grab_table_elements(self):
schema = self.table.schema
self.columns = OrderedDict()
schema = self.table.schema
self.new_table = new_table = Table(
- '_alembic_batch_temp', m,
+ self.temp_table_name, m,
*(list(self.columns.values()) + list(self.table_args)),
schema=schema,
**self.table_kwargs)
else:
referent_schema = None
- if tname != '_alembic_batch_temp':
+ if tname != self.temp_table_name:
key = sql_schema._get_table_key(tname, referent_schema)
if key in metadata.tables:
t = metadata.tables[key]
raise
else:
op_impl.rename_table(
- "_alembic_batch_temp",
+ self.temp_table_name,
self.table.name,
schema=self.table.schema
)
for idx in self._gather_indexes_from_both_tables():
op_impl.create_index(idx)
finally:
- self.new_table.name = "_alembic_batch_temp"
+ self.new_table.name = self.temp_table_name
def alter_column(self, table_name, column_name,
nullable=None,
for idx in impl.new_indexes.values():
impl.new_table.name = impl.table.name
idx_stmt += str(CreateIndex(idx).compile(dialect=context.dialect))
- impl.new_table.name = '_alembic_batch_temp'
+ impl.new_table.name = ApplyBatchImpl._calc_temp_name(
+ impl.table.name)
idx_stmt = re.sub(r'[\n\t]', '', idx_stmt)
if ddl_contains:
else:
args = {"schema": ""}
+ args["temp_name"] = impl.new_table.name
+
args['colnames'] = ", ".join([
impl.new_table.c[name].name
for name in colnames
)
expected.extend([
- 'INSERT INTO %(schema)s_alembic_batch_temp (%(colnames)s) '
+ 'INSERT INTO %(schema)s%(temp_name)s (%(colnames)s) '
'SELECT %(tname_colnames)s FROM %(schema)stname' % args,
'DROP TABLE %(schema)stname' % args,
- 'ALTER TABLE %(schema)s_alembic_batch_temp '
+ 'ALTER TABLE %(schema)s%(temp_name)s '
'RENAME TO %(schema)stname' % args
])
if idx_stmt:
"foo", copy_from=self.table) as batch_op:
batch_op.alter_column('data', type_=Integer)
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data INTEGER, x INTEGER, PRIMARY KEY (id))',
- 'INSERT INTO _alembic_batch_temp (id, data, x) SELECT foo.id, '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x) SELECT foo.id, '
'CAST(foo.data AS INTEGER) AS anon_1, foo.x FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo'
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo'
)
def test_change_type_from_schematype(self):
existing_type=Boolean(
create_constraint=True, name="ck1"))
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data VARCHAR(50), x INTEGER, y INTEGER, PRIMARY KEY (id))',
- 'INSERT INTO _alembic_batch_temp (id, data, x, y) SELECT foo.id, '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x, y) SELECT foo.id, '
'foo.data, foo.x, CAST(foo.y AS INTEGER) AS anon_1 FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo'
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo'
)
def test_change_type_to_schematype(self):
type_=Boolean(
create_constraint=True, name="ck1"))
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data VARCHAR(50), x INTEGER, y BOOLEAN, PRIMARY KEY (id), '
'CONSTRAINT ck1 CHECK (y IN (0, 1)))',
- 'INSERT INTO _alembic_batch_temp (id, data, x, y) SELECT foo.id, '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x, y) SELECT foo.id, '
'foo.data, foo.x, CAST(foo.y AS BOOLEAN) AS anon_1 FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo'
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo'
)
def test_create_drop_index_w_always(self):
'ix_data', ['data'], unique=True)
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data VARCHAR(50), '
'x INTEGER, PRIMARY KEY (id))',
- 'INSERT INTO _alembic_batch_temp (id, data, x) '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x) '
'SELECT foo.id, foo.data, foo.x FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo',
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo',
'CREATE UNIQUE INDEX ix_data ON foo (data)',
)
batch_op.drop_index('ix_data')
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data VARCHAR(50), x INTEGER, PRIMARY KEY (id))',
- 'INSERT INTO _alembic_batch_temp (id, data, x) '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x) '
'SELECT foo.id, foo.data, foo.x FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo'
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo'
)
def test_create_drop_index_wo_always(self):
'ix_data', ['data'], unique=True)
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data INTEGER, x INTEGER, PRIMARY KEY (id))',
- 'INSERT INTO _alembic_batch_temp (id, data, x) SELECT foo.id, '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x) SELECT foo.id, '
'CAST(foo.data AS INTEGER) AS anon_1, foo.x FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo',
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo',
'CREATE UNIQUE INDEX ix_data ON foo (data)',
)
batch_op.alter_column('data', type_=String)
context.assert_(
- 'CREATE TABLE _alembic_batch_temp (id INTEGER NOT NULL, '
+ 'CREATE TABLE _alembic_tmp_foo (id INTEGER NOT NULL, '
'data VARCHAR, x INTEGER, PRIMARY KEY (id))',
- 'INSERT INTO _alembic_batch_temp (id, data, x) SELECT foo.id, '
+ 'INSERT INTO _alembic_tmp_foo (id, data, x) SELECT foo.id, '
'foo.data, foo.x FROM foo',
'DROP TABLE foo',
- 'ALTER TABLE _alembic_batch_temp RENAME TO foo'
+ 'ALTER TABLE _alembic_tmp_foo RENAME TO foo'
)
# in particular, this tests that the failures
# on PG and MySQL result in recovery of the batch system,
- # e.g. that the _alembic_batch_temp table is dropped
+ # e.g. that the _alembic_tmp_temp table is dropped
@config.requirements.no_referential_integrity
def test_fk_points_to_me_recreate(self):
self._test_fk_points_to_me("always")