summaryrefslogtreecommitdiff
path: root/src/mailman/database/alembic/versions
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/database/alembic/versions')
-rw-r--r--src/mailman/database/alembic/versions/2bb9b382198_workflow_state_table.py9
-rw-r--r--src/mailman/database/alembic/versions/33bc0099223_add_member_indexes.py31
-rw-r--r--src/mailman/database/alembic/versions/33e1f5f6fa8_.py3
-rw-r--r--src/mailman/database/alembic/versions/42756496720_header_matches.py12
-rw-r--r--src/mailman/database/alembic/versions/46e92facee7_add_serverowner_domainowner.py5
-rw-r--r--src/mailman/database/alembic/versions/47294d3a604_pendable_indexes.py5
-rw-r--r--src/mailman/database/alembic/versions/70af5a4e5790_digests.py9
-rw-r--r--src/mailman/database/alembic/versions/7b254d88f122_members_and_list_moderation_action.py6
-rw-r--r--src/mailman/database/alembic/versions/d4fbb4fd34ca_header_match_order.py32
-rw-r--r--src/mailman/database/alembic/versions/fa0d96e28631_template_manager.py55
10 files changed, 100 insertions, 67 deletions
diff --git a/src/mailman/database/alembic/versions/2bb9b382198_workflow_state_table.py b/src/mailman/database/alembic/versions/2bb9b382198_workflow_state_table.py
index 64def0253..df7a10e00 100644
--- a/src/mailman/database/alembic/versions/2bb9b382198_workflow_state_table.py
+++ b/src/mailman/database/alembic/versions/2bb9b382198_workflow_state_table.py
@@ -9,6 +9,7 @@ Create Date: 2015-03-25 18:09:18.338790
import sqlalchemy as sa
from alembic import op
+from mailman.database.types import SAUnicode
# Revision identifiers, used by Alembic.
@@ -19,10 +20,10 @@ down_revision = '16c2b25c7b'
def upgrade():
op.create_table(
'workflowstate',
- sa.Column('name', sa.Unicode(), nullable=False),
- sa.Column('token', sa.Unicode(), nullable=False),
- sa.Column('step', sa.Unicode(), nullable=True),
- sa.Column('data', sa.Unicode(), nullable=True),
+ sa.Column('name', SAUnicode(), nullable=False),
+ sa.Column('token', SAUnicode(), nullable=False),
+ sa.Column('step', SAUnicode(), nullable=True),
+ sa.Column('data', SAUnicode(), nullable=True),
sa.PrimaryKeyConstraint('name', 'token')
)
diff --git a/src/mailman/database/alembic/versions/33bc0099223_add_member_indexes.py b/src/mailman/database/alembic/versions/33bc0099223_add_member_indexes.py
index ce8f2f3f1..5f01f4a66 100644
--- a/src/mailman/database/alembic/versions/33bc0099223_add_member_indexes.py
+++ b/src/mailman/database/alembic/versions/33bc0099223_add_member_indexes.py
@@ -7,6 +7,7 @@ Create Date: 2015-11-19 23:04:42.449553
"""
from alembic import op
+from mailman.database.helpers import is_mysql
# Revision identifiers, used by Alembic.
@@ -15,22 +16,28 @@ down_revision = '42756496720'
def upgrade():
- op.create_index(op.f('ix_member_address_id'),
- 'member', ['address_id'],
- unique=False)
- op.create_index(op.f('ix_member_preferences_id'),
- 'member', ['preferences_id'],
- unique=False)
- op.create_index(op.f('ix_member_user_id'),
- 'member', ['user_id'],
- unique=False)
op.create_index(op.f('ix_address_email'),
'address', ['email'],
unique=False)
+ # MySQL automatically creates the indexes for primary keys so don't need
+ # to do it explicitly again.
+ if not is_mysql(op.get_bind()):
+ op.create_index(op.f('ix_member_address_id'),
+ 'member', ['address_id'],
+ unique=False)
+ op.create_index(op.f('ix_member_preferences_id'),
+ 'member', ['preferences_id'],
+ unique=False)
+ op.create_index(op.f('ix_member_user_id'),
+ 'member', ['user_id'],
+ unique=False)
def downgrade():
op.drop_index(op.f('ix_address_email'), table_name='address')
- op.drop_index(op.f('ix_member_user_id'), table_name='member')
- op.drop_index(op.f('ix_member_preferences_id'), table_name='member')
- op.drop_index(op.f('ix_member_address_id'), table_name='member')
+ # MySQL automatically creates and removes the indexes for primary keys.
+ # So, you cannot drop it without removing the foreign key constraint.
+ if not is_mysql(op.get_bind()):
+ op.drop_index(op.f('ix_member_user_id'), table_name='member')
+ op.drop_index(op.f('ix_member_preferences_id'), table_name='member')
+ op.drop_index(op.f('ix_member_address_id'), table_name='member')
diff --git a/src/mailman/database/alembic/versions/33e1f5f6fa8_.py b/src/mailman/database/alembic/versions/33e1f5f6fa8_.py
index a8b572518..72754d3c5 100644
--- a/src/mailman/database/alembic/versions/33e1f5f6fa8_.py
+++ b/src/mailman/database/alembic/versions/33e1f5f6fa8_.py
@@ -29,6 +29,7 @@ import sqlalchemy as sa
from alembic import op
from mailman.database.helpers import is_sqlite
+from mailman.database.types import SAUnicode
# Revision identifiers, used by Alembic.
@@ -50,7 +51,7 @@ def upgrade():
# SQLite does not support altering columns.
return
for table, column in COLUMNS_TO_CHANGE:
- op.alter_column(table, column, type_=sa.Unicode)
+ op.alter_column(table, column, type_=SAUnicode)
def downgrade():
diff --git a/src/mailman/database/alembic/versions/42756496720_header_matches.py b/src/mailman/database/alembic/versions/42756496720_header_matches.py
index 4514fb398..d1308a134 100644
--- a/src/mailman/database/alembic/versions/42756496720_header_matches.py
+++ b/src/mailman/database/alembic/versions/42756496720_header_matches.py
@@ -10,7 +10,7 @@ import sqlalchemy as sa
from alembic import op
from mailman.database.helpers import exists_in_db, is_sqlite
-
+from mailman.database.types import SAUnicode
# Revision identifiers, used by Alembic.
revision = '42756496720'
@@ -23,9 +23,9 @@ def upgrade():
'headermatch',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('mailing_list_id', sa.Integer(), nullable=True),
- sa.Column('header', sa.Unicode(), nullable=False),
- sa.Column('pattern', sa.Unicode(), nullable=False),
- sa.Column('chain', sa.Unicode(), nullable=True),
+ sa.Column('header', SAUnicode(), nullable=False),
+ sa.Column('pattern', SAUnicode(), nullable=False),
+ sa.Column('chain', SAUnicode(), nullable=True),
sa.ForeignKeyConstraint(['mailing_list_id'], ['mailinglist.id'], ),
sa.PrimaryKeyConstraint('id')
)
@@ -73,8 +73,8 @@ def downgrade():
header_match_table = sa.sql.table(
'headermatch',
sa.sql.column('mailing_list_id', sa.Integer),
- sa.sql.column('header', sa.Unicode),
- sa.sql.column('pattern', sa.Unicode),
+ sa.sql.column('header', SAUnicode),
+ sa.sql.column('pattern', SAUnicode),
)
for mlist_id, header, pattern in connection.execute(
header_match_table.select()).fetchall():
diff --git a/src/mailman/database/alembic/versions/46e92facee7_add_serverowner_domainowner.py b/src/mailman/database/alembic/versions/46e92facee7_add_serverowner_domainowner.py
index 1c689670a..bf734934b 100644
--- a/src/mailman/database/alembic/versions/46e92facee7_add_serverowner_domainowner.py
+++ b/src/mailman/database/alembic/versions/46e92facee7_add_serverowner_domainowner.py
@@ -56,8 +56,9 @@ def downgrade():
if not is_sqlite(op.get_bind()):
op.drop_column('user', 'is_server_owner')
if not exists_in_db(op.get_bind(), 'domain', 'contact_address'):
- # SQLite may not have removed it.
+ # SQLite may not have removed it. Add a fixed length VARCHAR for
+ # MySQL.
op.add_column(
'domain',
- sa.Column('contact_address', sa.VARCHAR(), nullable=True))
+ sa.Column('contact_address', sa.VARCHAR(255), nullable=True))
op.drop_table('domain_owner')
diff --git a/src/mailman/database/alembic/versions/47294d3a604_pendable_indexes.py b/src/mailman/database/alembic/versions/47294d3a604_pendable_indexes.py
index 5e465af24..4aafb4613 100644
--- a/src/mailman/database/alembic/versions/47294d3a604_pendable_indexes.py
+++ b/src/mailman/database/alembic/versions/47294d3a604_pendable_indexes.py
@@ -13,6 +13,7 @@ import json
import sqlalchemy as sa
from alembic import op
+from mailman.database.types import SAUnicode
# revision identifiers, used by Alembic.
@@ -34,8 +35,8 @@ pended_table = sa.sql.table(
keyvalue_table = sa.sql.table(
'pendedkeyvalue',
sa.sql.column('id', sa.Integer),
- sa.sql.column('key', sa.Unicode),
- sa.sql.column('value', sa.Unicode),
+ sa.sql.column('key', SAUnicode),
+ sa.sql.column('value', SAUnicode),
sa.sql.column('pended_id', sa.Integer),
)
diff --git a/src/mailman/database/alembic/versions/70af5a4e5790_digests.py b/src/mailman/database/alembic/versions/70af5a4e5790_digests.py
index 50c87ccf3..1f9a93bcd 100644
--- a/src/mailman/database/alembic/versions/70af5a4e5790_digests.py
+++ b/src/mailman/database/alembic/versions/70af5a4e5790_digests.py
@@ -20,7 +20,10 @@ down_revision = '47294d3a604'
def upgrade():
with op.batch_alter_table('mailinglist') as batch_op:
- batch_op.alter_column('digestable', new_column_name='digests_enabled')
+ batch_op.alter_column('digestable',
+ new_column_name='digests_enabled',
+ existing_type=sa.Boolean)
+ # All column modifications require existing types for Mysql.
batch_op.drop_column('nondigestable')
# Non-database migration: rename the list's data-path.
for dirname in os.listdir(config.LIST_DATA_DIR):
@@ -34,7 +37,9 @@ def upgrade():
def downgrade():
with op.batch_alter_table('mailinglist') as batch_op:
- batch_op.alter_column('digests_enabled', new_column_name='digestable')
+ batch_op.alter_column('digests_enabled',
+ new_column_name='digestable',
+ existing_type=sa.Boolean)
# The data for this column is lost, it's not used anyway.
batch_op.add_column(sa.Column('nondigestable', sa.Boolean))
for dirname in os.listdir(config.LIST_DATA_DIR):
diff --git a/src/mailman/database/alembic/versions/7b254d88f122_members_and_list_moderation_action.py b/src/mailman/database/alembic/versions/7b254d88f122_members_and_list_moderation_action.py
index 6b4d7bfd1..9f19e3278 100644
--- a/src/mailman/database/alembic/versions/7b254d88f122_members_and_list_moderation_action.py
+++ b/src/mailman/database/alembic/versions/7b254d88f122_members_and_list_moderation_action.py
@@ -13,7 +13,7 @@ fallback to the list's default.
import sqlalchemy as sa
from alembic import op
-from mailman.database.types import Enum
+from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.action import Action
from mailman.interfaces.member import MemberRole
@@ -26,7 +26,7 @@ down_revision = 'd4fbb4fd34ca'
mailinglist_table = sa.sql.table(
'mailinglist',
sa.sql.column('id', sa.Integer),
- sa.sql.column('list_id', sa.Unicode),
+ sa.sql.column('list_id', SAUnicode),
sa.sql.column('default_member_action', Enum(Action)),
sa.sql.column('default_nonmember_action', Enum(Action)),
)
@@ -35,7 +35,7 @@ mailinglist_table = sa.sql.table(
member_table = sa.sql.table(
'member',
sa.sql.column('id', sa.Integer),
- sa.sql.column('list_id', sa.Unicode),
+ sa.sql.column('list_id', SAUnicode),
sa.sql.column('role', Enum(MemberRole)),
sa.sql.column('moderation_action', Enum(Action)),
)
diff --git a/src/mailman/database/alembic/versions/d4fbb4fd34ca_header_match_order.py b/src/mailman/database/alembic/versions/d4fbb4fd34ca_header_match_order.py
index 2608bb812..313963b86 100644
--- a/src/mailman/database/alembic/versions/d4fbb4fd34ca_header_match_order.py
+++ b/src/mailman/database/alembic/versions/d4fbb4fd34ca_header_match_order.py
@@ -9,6 +9,7 @@ Create Date: 2016-02-01 15:57:09.807678
import sqlalchemy as sa
from alembic import op
+from mailman.database.helpers import is_mysql
# Revision identifiers, used by Alembic.
@@ -20,19 +21,34 @@ def upgrade():
with op.batch_alter_table('headermatch') as batch_op:
batch_op.add_column(
sa.Column('position', sa.Integer(), nullable=True))
- batch_op.alter_column(
- 'mailing_list_id', existing_type=sa.INTEGER(), nullable=False)
batch_op.create_index(
op.f('ix_headermatch_position'), ['position'], unique=False)
- batch_op.create_index(
- op.f('ix_headermatch_mailing_list_id'), ['mailing_list_id'],
- unique=False)
+ if not is_mysql(op.get_bind()):
+ # MySQL automatically creates indexes for primary keys.
+ batch_op.create_index(
+ op.f('ix_headermatch_mailing_list_id'), ['mailing_list_id'],
+ unique=False)
+ # MySQL doesn't allow changing columns used in a foreign key
+ # constrains since MySQL version 5.6. We need to drop the
+ # constraint before changing the column. But, since the
+ # constraint name is auto-generated, we can't really hardcode the
+ # name here to use batch_op.drop_constraint(). Until we have a
+ # better fix for this, it should be safe to skip this.
+ batch_op.alter_column(
+ 'mailing_list_id', existing_type=sa.INTEGER(), nullable=False)
def downgrade():
with op.batch_alter_table('headermatch') as batch_op:
- batch_op.drop_index(op.f('ix_headermatch_mailing_list_id'))
batch_op.drop_index(op.f('ix_headermatch_position'))
- batch_op.alter_column(
- 'mailing_list_id', existing_type=sa.INTEGER(), nullable=True)
batch_op.drop_column('position')
+
+ if not is_mysql(op.get_bind()):
+ # MySQL automatically creates and removes the indexes for primary
+ # keys. So, you cannot drop it without removing the foreign key
+ # constraint.
+ batch_op.drop_index(op.f('ix_headermatch_mailing_list_id'))
+ # MySQL doesn't allow changing columns used in foreign_key
+ # constraints.
+ batch_op.alter_column(
+ 'mailing_list_id', existing_type=sa.INTEGER(), nullable=True)
diff --git a/src/mailman/database/alembic/versions/fa0d96e28631_template_manager.py b/src/mailman/database/alembic/versions/fa0d96e28631_template_manager.py
index 5920dd4e4..58d688453 100644
--- a/src/mailman/database/alembic/versions/fa0d96e28631_template_manager.py
+++ b/src/mailman/database/alembic/versions/fa0d96e28631_template_manager.py
@@ -12,6 +12,7 @@ import sqlalchemy as sa
from alembic import op
from mailman.config import config
from mailman.database.helpers import exists_in_db
+from mailman.database.types import SAUnicode
# revision identifiers, used by Alembic.
@@ -35,8 +36,8 @@ def upgrade():
op.create_table(
'file_cache',
sa.Column('id', sa.Integer(), nullable=False),
- sa.Column('key', sa.Unicode(), nullable=False),
- sa.Column('file_id', sa.Unicode(), nullable=True),
+ sa.Column('key', SAUnicode(), nullable=False),
+ sa.Column('file_id', SAUnicode(), nullable=True),
sa.Column('is_bytes', sa.Boolean(), nullable=False),
sa.Column('created_on', sa.DateTime(), nullable=False),
sa.Column('expires_on', sa.DateTime(), nullable=False),
@@ -45,10 +46,10 @@ def upgrade():
template_table = op.create_table(
'template',
sa.Column('id', sa.Integer(), nullable=False),
- sa.Column('name', sa.Unicode(), nullable=False),
- sa.Column('context', sa.Unicode(), nullable=True),
- sa.Column('uri', sa.Unicode(), nullable=False),
- sa.Column('username', sa.Unicode(), nullable=True),
+ sa.Column('name', SAUnicode(), nullable=False),
+ sa.Column('context', SAUnicode(), nullable=True),
+ sa.Column('uri', SAUnicode(), nullable=False),
+ sa.Column('username', SAUnicode(), nullable=True),
sa.Column('password', sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint('id')
)
@@ -60,13 +61,13 @@ def upgrade():
mlist_table = sa.sql.table(
'mailinglist',
sa.sql.column('id', sa.Integer),
- sa.sql.column('list_id', sa.Unicode),
- sa.sql.column('digest_footer_uri', sa.Unicode),
- sa.sql.column('digest_header_uri', sa.Unicode),
- sa.sql.column('footer_uri', sa.Unicode),
- sa.sql.column('header_uri', sa.Unicode),
- sa.sql.column('goodbye_message_uri', sa.Unicode),
- sa.sql.column('welcome_message_uri', sa.Unicode),
+ sa.sql.column('list_id', SAUnicode),
+ sa.sql.column('digest_footer_uri', SAUnicode),
+ sa.sql.column('digest_header_uri', SAUnicode),
+ sa.sql.column('footer_uri', SAUnicode),
+ sa.sql.column('header_uri', SAUnicode),
+ sa.sql.column('goodbye_message_uri', SAUnicode),
+ sa.sql.column('welcome_message_uri', SAUnicode),
)
for (mlist_id, list_id,
digest_footer_uri, digest_header_uri,
@@ -131,30 +132,30 @@ def downgrade():
if not exists_in_db(op.get_bind(), 'mailinglist', column):
op.add_column(
'mailinglist',
- sa.Column(column, sa.Unicode, nullable=True))
- op.add_column('domain', sa.Column('base_url', sa.Unicode))
+ sa.Column(column, SAUnicode, nullable=True))
+ op.add_column('domain', sa.Column('base_url', SAUnicode))
# Put all the templates with a context mapping the list-id back into the
# mailinglist table. No other contexts are supported, so just throw those
# away.
template_table = sa.sql.table(
'template',
sa.sql.column('id', sa.Integer),
- sa.sql.column('name', sa.Unicode),
- sa.sql.column('context', sa.Unicode),
- sa.sql.column('uri', sa.Unicode),
- sa.sql.column('username', sa.Unicode),
- sa.sql.column('password', sa.Unicode),
+ sa.sql.column('name', SAUnicode),
+ sa.sql.column('context', SAUnicode),
+ sa.sql.column('uri', SAUnicode),
+ sa.sql.column('username', SAUnicode),
+ sa.sql.column('password', SAUnicode),
)
mlist_table = sa.sql.table(
'mailinglist',
sa.sql.column('id', sa.Integer),
- sa.sql.column('list_id', sa.Unicode),
- sa.sql.column('digest_footer_uri', sa.Unicode),
- sa.sql.column('digest_header_uri', sa.Unicode),
- sa.sql.column('footer_uri', sa.Unicode),
- sa.sql.column('header_uri', sa.Unicode),
- sa.sql.column('goodbye_message_uri', sa.Unicode),
- sa.sql.column('welcome_message_uri', sa.Unicode),
+ sa.sql.column('list_id', SAUnicode),
+ sa.sql.column('digest_footer_uri', SAUnicode),
+ sa.sql.column('digest_header_uri', SAUnicode),
+ sa.sql.column('footer_uri', SAUnicode),
+ sa.sql.column('header_uri', SAUnicode),
+ sa.sql.column('goodbye_message_uri', SAUnicode),
+ sa.sql.column('welcome_message_uri', SAUnicode),
)
connection = op.get_bind()
for (table_id, name, context, uri, username, password