Skip to content
Snippets Groups Projects
Commit e9a81157 authored by Florian Floimair's avatar Florian Floimair Committed by Kevin Harwell
Browse files

alembic: Add support for MS-SQL

MS-SQL has no native Enum-type support and therefore
needs to work with constraints.
Since these constraints need unique names the suggested approach
referenced in the following alembic documentation has been applied:
http://bit.ly/2x9r8pb

ASTERISK-27255 #close

Change-Id: I8b579750dae0c549f1103ee50172644afb9b2f95
parent 2857a333
No related branches found
No related tags found
No related merge requests found
Showing
with 61 additions and 7 deletions
...@@ -27,5 +27,7 @@ def upgrade(): ...@@ -27,5 +27,7 @@ def upgrade():
op.add_column('ps_endpoints', sa.Column('moh_passthrough', yesno_values)) op.add_column('ps_endpoints', sa.Column('moh_passthrough', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_moh_passthrough_yesno_values','ps_endpoints')
with op.batch_alter_table('ps_endpoints') as batch_op: with op.batch_alter_table('ps_endpoints') as batch_op:
batch_op.drop_column('moh_passthrough') batch_op.drop_column('moh_passthrough')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_rtcp_mux_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'rtcp_mux') op.drop_column('ps_endpoints', 'rtcp_mux')
...@@ -45,4 +45,6 @@ def upgrade(): ...@@ -45,4 +45,6 @@ def upgrade():
op.add_column('ps_endpoints', sa.Column('rpid_immediate', yesno_values)) op.add_column('ps_endpoints', sa.Column('rpid_immediate', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_rpid_immediate_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'rpid_immediate') op.drop_column('ps_endpoints', 'rpid_immediate')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_bind_rtp_to_media_address_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'bind_rtp_to_media_address') op.drop_column('ps_endpoints', 'bind_rtp_to_media_address')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoint_id_ips_srv_lookups_yesno_values','ps_endpoint_id_ips')
op.drop_column('ps_endpoint_id_ips', 'srv_lookups') op.drop_column('ps_endpoint_id_ips', 'srv_lookups')
...@@ -27,4 +27,6 @@ def upgrade(): ...@@ -27,4 +27,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_g726_non_standard_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'g726_non_standard') op.drop_column('ps_endpoints', 'g726_non_standard')
...@@ -142,6 +142,8 @@ def upgrade(): ...@@ -142,6 +142,8 @@ def upgrade():
def downgrade(): def downgrade():
########################## drop columns ########################## ########################## drop columns ##########################
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_aors_support_path_yesno_values', 'ps_aors')
op.drop_column('ps_aors', 'support_path') op.drop_column('ps_aors', 'support_path')
op.drop_column('ps_aors', 'outbound_proxy') op.drop_column('ps_aors', 'outbound_proxy')
op.drop_column('ps_aors', 'maximum_expiration') op.drop_column('ps_aors', 'maximum_expiration')
...@@ -153,6 +155,8 @@ def downgrade(): ...@@ -153,6 +155,8 @@ def downgrade():
new_column_name='mwi_fromuser', existing_type=sa.String(40)) new_column_name='mwi_fromuser', existing_type=sa.String(40))
op.drop_column('ps_endpoints', 'set_var') op.drop_column('ps_endpoints', 'set_var')
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_redirect_method_pjsip_redirect_method_values', 'ps_endpoints')
op.drop_column('ps_endpoints', 'redirect_method') op.drop_column('ps_endpoints', 'redirect_method')
op.drop_column('ps_endpoints', 'media_address') op.drop_column('ps_endpoints', 'media_address')
......
...@@ -27,4 +27,6 @@ def upgrade(): ...@@ -27,4 +27,6 @@ def upgrade():
op.add_column('ps_endpoints', sa.Column('user_eq_phone', yesno_values)) op.add_column('ps_endpoints', sa.Column('user_eq_phone', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_user_eq_phone_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'user_eq_phone') op.drop_column('ps_endpoints', 'user_eq_phone')
...@@ -16,6 +16,8 @@ import sqlalchemy as sa ...@@ -16,6 +16,8 @@ import sqlalchemy as sa
def enum_update(table_name, column_name, enum_name, enum_values): def enum_update(table_name, column_name, enum_name, enum_values):
if op.get_context().bind.dialect.name != 'postgresql': if op.get_context().bind.dialect.name != 'postgresql':
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_identify_by_pjsip_identify_by_values', 'ps_endpoints')
op.alter_column(table_name, column_name, op.alter_column(table_name, column_name,
type_=sa.Enum(*enum_values, name=enum_name)) type_=sa.Enum(*enum_values, name=enum_name))
return return
......
...@@ -22,4 +22,6 @@ def upgrade(): ...@@ -22,4 +22,6 @@ def upgrade():
op.add_column('ps_transports', sa.Column('allow_reload', yesno_values)) op.add_column('ps_transports', sa.Column('allow_reload', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_transports_allow_reload_yesno_values','ps_transports')
op.drop_column('ps_transports', 'allow_reload') op.drop_column('ps_transports', 'allow_reload')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_asymmetric_rtp_codec_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'asymmetric_rtp_codec') op.drop_column('ps_endpoints', 'asymmetric_rtp_codec')
...@@ -28,7 +28,7 @@ def upgrade(): ...@@ -28,7 +28,7 @@ def upgrade():
op.alter_column('ps_transports', 'tos', type_=sa.String(10)) op.alter_column('ps_transports', 'tos', type_=sa.String(10))
# Can't cast YENO_VALUES to Integers, so dropping and adding is required # Can't cast YENO_VALUES to Integers, so dropping and adding is required
op.drop_column('ps_transports', 'cos') op.drop_column('ps_transports', 'cos', schema=None, mssql_drop_check=True)
op.add_column('ps_transports', sa.Column('cos', sa.Integer)) op.add_column('ps_transports', sa.Column('cos', sa.Integer))
def downgrade(): def downgrade():
...@@ -45,6 +45,8 @@ def downgrade(): ...@@ -45,6 +45,8 @@ def downgrade():
op.add_column('ps_endpoints', sa.Column('cos_audio', yesno_values)) op.add_column('ps_endpoints', sa.Column('cos_audio', yesno_values))
op.add_column('ps_endpoints', sa.Column('cos_video', yesno_values)) op.add_column('ps_endpoints', sa.Column('cos_video', yesno_values))
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_transports_tos_yesno_values', 'ps_transports')
op.drop_column('ps_transports', 'tos') op.drop_column('ps_transports', 'tos')
op.add_column('ps_transports', sa.Column('tos', yesno_values)) op.add_column('ps_transports', sa.Column('tos', yesno_values))
# Can't cast integers to YESNO_VALUES, so dropping and adding is required # Can't cast integers to YESNO_VALUES, so dropping and adding is required
......
...@@ -38,7 +38,7 @@ def upgrade(): ...@@ -38,7 +38,7 @@ def upgrade():
op.drop_column('queue_members', 'uniqueid') op.drop_column('queue_members', 'uniqueid')
op.add_column('queue_members', sa.Column(name='uniqueid', type_=sa.Integer, op.add_column('queue_members', sa.Column(name='uniqueid', type_=sa.Integer,
nullable=False, unique=True)) nullable=False, unique=True))
# The postgres backend does not like the autoincrement needed for # The postgres and mssql backends do not like the autoincrement needed for
# mysql here. It is just the backend that is giving a warning and # mysql here. It is just the backend that is giving a warning and
# not the database itself. # not the database itself.
op.alter_column(table_name='queue_members', column_name='uniqueid', op.alter_column(table_name='queue_members', column_name='uniqueid',
...@@ -49,5 +49,7 @@ def upgrade(): ...@@ -49,5 +49,7 @@ def upgrade():
def downgrade(): def downgrade():
# Was unable to find a way to use op.alter_column() to remove the # Was unable to find a way to use op.alter_column() to remove the
# unique index property. # unique index property.
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('uq_queue_members_uniqueid', 'queue_members')
op.drop_column('queue_members', 'uniqueid') op.drop_column('queue_members', 'uniqueid')
op.add_column('queue_members', sa.Column(name='uniqueid', type_=sa.String(80), nullable=False)) op.add_column('queue_members', sa.Column(name='uniqueid', type_=sa.String(80), nullable=False))
...@@ -28,5 +28,8 @@ def upgrade(): ...@@ -28,5 +28,8 @@ def upgrade():
op.add_column('ps_endpoints', sa.Column('media_use_received_transport', yesno_values)) op.add_column('ps_endpoints', sa.Column('media_use_received_transport', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_force_avp_yesno_values', 'ps_endpoints')
op.drop_constraint('ck_ps_endpoints_media_use_received_transport_yesno_values', 'ps_endpoints')
op.drop_column('ps_endpoints', 'force_avp') op.drop_column('ps_endpoints', 'force_avp')
op.drop_column('ps_endpoints', 'media_use_received_transport') op.drop_column('ps_endpoints', 'media_use_received_transport')
...@@ -11,19 +11,32 @@ revision = '5950038a6ead' ...@@ -11,19 +11,32 @@ revision = '5950038a6ead'
down_revision = 'd39508cb8d8' down_revision = 'd39508cb8d8'
from alembic import op from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.dialects.postgresql import ENUM
YESNO_NAME = 'yesno_values' YESNO_NAME = 'yesno_values'
YESNO_VALUES = ['yes', 'no'] YESNO_VALUES = ['yes', 'no']
def upgrade(): def upgrade():
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False) yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
op.alter_column('ps_transports', 'verifiy_server', type_=yesno_values,
new_column_name='verify_server') if op.get_context().bind.dialect.name != 'mssql':
op.alter_column('ps_transports', 'verifiy_server', type_=yesno_values,
new_column_name='verify_server')
else:
op.alter_column('ps_transports', 'verifiy_server', existing_type=yesno_values, type_=sa.String(3),
new_column_name='verify_server')
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=True)
op.alter_column('ps_transports', 'verify_server', existing_type=sa.String(3), type_=yesno_values)
def downgrade(): def downgrade():
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False) yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
op.alter_column('ps_transports', 'verify_server', type_=yesno_values, if op.get_context().bind.dialect.name != 'mssql':
new_column_name='verifiy_server') op.alter_column('ps_transports', 'verify_server', type_=yesno_values,
new_column_name='verifiy_server')
else:
op.alter_column('ps_transports', 'verify_server', existing_type=yesno_values, type_=sa.String(3),
new_column_name='verifiy_server')
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=True)
op.alter_column('ps_transports', 'verifiy_server', existing_type=sa.String(3), type_=yesno_values)
...@@ -28,5 +28,7 @@ def upgrade(): ...@@ -28,5 +28,7 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_contacts_authenticate_qualify_yesno_values','ps_contacts')
op.drop_column('ps_contacts', 'authenticate_qualify') op.drop_column('ps_contacts', 'authenticate_qualify')
...@@ -27,4 +27,6 @@ def upgrade(): ...@@ -27,4 +27,6 @@ def upgrade():
op.add_column('ps_endpoints', sa.Column('refer_blind_progress', yesno_values)) op.add_column('ps_endpoints', sa.Column('refer_blind_progress', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_refer_blind_progress_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'refer_blind_progress') op.drop_column('ps_endpoints', 'refer_blind_progress')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_globals_disable_multi_domain_yesno_values','ps_globals')
op.drop_column('ps_globals', 'disable_multi_domain') op.drop_column('ps_globals', 'disable_multi_domain')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_allow_overlap_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'allow_overlap') op.drop_column('ps_endpoints', 'allow_overlap')
...@@ -28,4 +28,6 @@ def upgrade(): ...@@ -28,4 +28,6 @@ def upgrade():
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_media_encryption_optimistic_yesno_values','ps_endpoints')
op.drop_column('ps_endpoints', 'media_encryption_optimistic') op.drop_column('ps_endpoints', 'media_encryption_optimistic')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment