mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
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: I4a399ba3eed41a33ce8cb294968ad340221580ee
This commit is contained in:
committed by
Kevin Harwell
parent
9a366d2424
commit
ad606844be
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -45,4 +45,6 @@ def upgrade():
|
||||
op.add_column('ps_endpoints', sa.Column('rpid_immediate', yesno_values))
|
||||
|
||||
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')
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -27,4 +27,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -142,6 +142,8 @@ def upgrade():
|
||||
def downgrade():
|
||||
########################## 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', 'outbound_proxy')
|
||||
op.drop_column('ps_aors', 'maximum_expiration')
|
||||
@@ -153,6 +155,8 @@ def downgrade():
|
||||
new_column_name='mwi_fromuser', existing_type=sa.String(40))
|
||||
|
||||
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', 'media_address')
|
||||
|
||||
|
@@ -27,4 +27,6 @@ def upgrade():
|
||||
op.add_column('ps_endpoints', sa.Column('user_eq_phone', yesno_values))
|
||||
|
||||
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')
|
||||
|
@@ -16,6 +16,8 @@ import sqlalchemy as sa
|
||||
|
||||
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 == 'mssql':
|
||||
op.drop_constraint('ck_ps_endpoints_identify_by_pjsip_identify_by_values', 'ps_endpoints')
|
||||
op.alter_column(table_name, column_name,
|
||||
type_=sa.Enum(*enum_values, name=enum_name))
|
||||
return
|
||||
|
@@ -22,4 +22,6 @@ def upgrade():
|
||||
op.add_column('ps_transports', sa.Column('allow_reload', yesno_values))
|
||||
|
||||
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')
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -29,7 +29,7 @@ def upgrade():
|
||||
op.alter_column('ps_transports', 'tos', type_=sa.String(10))
|
||||
|
||||
# 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))
|
||||
|
||||
def downgrade():
|
||||
@@ -46,6 +46,8 @@ def downgrade():
|
||||
op.add_column('ps_endpoints', sa.Column('cos_audio', 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.add_column('ps_transports', sa.Column('tos', yesno_values))
|
||||
# Can't cast integers to YESNO_VALUES, so dropping and adding is required
|
||||
|
@@ -39,7 +39,7 @@ def upgrade():
|
||||
op.drop_column('queue_members', 'uniqueid')
|
||||
op.add_column('queue_members', sa.Column(name='uniqueid', type_=sa.Integer,
|
||||
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
|
||||
# not the database itself.
|
||||
op.alter_column(table_name='queue_members', column_name='uniqueid',
|
||||
@@ -50,5 +50,7 @@ def upgrade():
|
||||
def downgrade():
|
||||
# Was unable to find a way to use op.alter_column() to remove the
|
||||
# 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.add_column('queue_members', sa.Column(name='uniqueid', type_=sa.String(80), nullable=False))
|
||||
|
@@ -28,5 +28,8 @@ def upgrade():
|
||||
op.add_column('ps_endpoints', sa.Column('media_use_received_transport', yesno_values))
|
||||
|
||||
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', 'media_use_received_transport')
|
||||
|
@@ -11,19 +11,32 @@ revision = '5950038a6ead'
|
||||
down_revision = 'd39508cb8d8'
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects.postgresql import ENUM
|
||||
|
||||
YESNO_NAME = 'yesno_values'
|
||||
YESNO_VALUES = ['yes', 'no']
|
||||
|
||||
|
||||
def upgrade():
|
||||
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():
|
||||
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
|
||||
op.alter_column('ps_transports', 'verify_server', type_=yesno_values,
|
||||
new_column_name='verifiy_server')
|
||||
if op.get_context().bind.dialect.name != 'mssql':
|
||||
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():
|
||||
|
||||
|
||||
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')
|
||||
|
||||
|
@@ -27,4 +27,6 @@ def upgrade():
|
||||
op.add_column('ps_endpoints', sa.Column('refer_blind_progress', yesno_values))
|
||||
|
||||
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')
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -28,5 +28,7 @@ def upgrade():
|
||||
|
||||
|
||||
def downgrade():
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_globals_ignore_uri_user_options_yesno_values','ps_globals')
|
||||
op.drop_column('ps_globals', 'ignore_uri_user_options')
|
||||
|
||||
|
@@ -31,6 +31,8 @@ def upgrade():
|
||||
def downgrade():
|
||||
context = op.get_context()
|
||||
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_endpoints_dtls_fingerprint_sha_hash_values', 'ps_endpoints')
|
||||
op.drop_column('ps_endpoints', 'dtls_fingerprint')
|
||||
|
||||
if context.bind.dialect.name == 'postgresql':
|
||||
|
@@ -32,4 +32,6 @@ def upgrade():
|
||||
def downgrade():
|
||||
op.drop_column('ps_globals', 'mwi_tps_queue_high')
|
||||
op.drop_column('ps_globals', 'mwi_tps_queue_low')
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_globals_mwi_disable_initial_unsolicited_yesno_values','ps_globals')
|
||||
op.drop_column('ps_globals', 'mwi_disable_initial_unsolicited')
|
||||
|
@@ -27,4 +27,6 @@ def upgrade():
|
||||
op.add_column('ps_endpoints', sa.Column('notify_early_inuse_ringing', yesno_values))
|
||||
|
||||
def downgrade():
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_endpoints_notify_early_inuse_ringing_yesno_values', 'ps_endpoints')
|
||||
op.drop_column('ps_endpoints', 'notify_early_inuse_ringing')
|
||||
|
@@ -29,6 +29,9 @@ def upgrade():
|
||||
op.add_column('ps_registrations', sa.Column('endpoint', sa.String(40)))
|
||||
|
||||
def downgrade():
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_systems_disable_tcp_switch_yesno_values','ps_systems')
|
||||
op.drop_constraint('ck_ps_registrations_line_yesno_values','ps_registrations')
|
||||
op.drop_column('ps_systems', 'disable_tcp_switch')
|
||||
op.drop_column('ps_registrations', 'line')
|
||||
op.drop_column('ps_registrations', 'endpoint')
|
||||
|
@@ -28,7 +28,13 @@ def upgrade():
|
||||
def downgrade():
|
||||
op.alter_column('ps_globals', 'user_agent', type_=sa.String(40))
|
||||
|
||||
op.alter_column('ps_contacts', 'id', type_=sa.String(40))
|
||||
if op.get_context().bind.dialect.name != 'mssql':
|
||||
op.alter_column('ps_contacts', 'id', type_=sa.String(40))
|
||||
else:
|
||||
op.drop_constraint('uq_ps_contacts_id', 'ps_contacts')
|
||||
op.drop_index('ps_contacts_id', 'ps_contacts')
|
||||
op.alter_column('ps_contacts', 'id', type_=sa.String(40))
|
||||
op.create_index('ps_contacts_id', 'ps_contacts', ['id'])
|
||||
op.alter_column('ps_contacts', 'uri', type_=sa.String(40))
|
||||
op.alter_column('ps_contacts', 'user_agent', type_=sa.String(40))
|
||||
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
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')
|
||||
|
@@ -27,7 +27,11 @@ def upgrade():
|
||||
op.create_index('ps_contacts_qualifyfreq_exp', 'ps_contacts', ['qualify_frequency', 'expiration_time'])
|
||||
op.create_index('ps_aors_qualifyfreq_contact', 'ps_aors', ['qualify_frequency', 'contact'])
|
||||
def downgrade():
|
||||
op.drop_index('ps_aors_qualifyfreq_contact')
|
||||
op.drop_index('ps_contacts_qualifyfreq_exp')
|
||||
if op.get_context().bind.dialect.name != 'mssql':
|
||||
op.drop_index('ps_aors_qualifyfreq_contact')
|
||||
op.drop_index('ps_contacts_qualifyfreq_exp')
|
||||
else:
|
||||
op.drop_index('ps_aors_qualifyfreq_contact', table_name='ps_aors')
|
||||
op.drop_index('ps_contacts_qualifyfreq_exp', table_name='ps_contacts')
|
||||
op.drop_column('ps_contacts', 'endpoint')
|
||||
op.alter_column('ps_contacts', 'expiration_time', type_=sa.String(40))
|
||||
|
@@ -28,4 +28,6 @@ def upgrade():
|
||||
|
||||
|
||||
def downgrade():
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_contacts_prune_on_boot_yesno_values', 'ps_contacts')
|
||||
op.drop_column('ps_contacts', 'prune_on_boot')
|
||||
|
@@ -29,4 +29,6 @@ def upgrade():
|
||||
|
||||
def downgrade():
|
||||
op.drop_column('ps_subscription_persistence', 'contact_uri')
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_transports_symmetric_transport_yesno_values','ps_transports')
|
||||
op.drop_column('ps_transports', 'symmetric_transport')
|
||||
|
@@ -2,7 +2,8 @@ from __future__ import with_statement
|
||||
from alembic import context
|
||||
from alembic.script import ScriptDirectory
|
||||
from alembic.operations import Operations
|
||||
from sqlalchemy import engine_from_config, pool
|
||||
from sqlalchemy import engine_from_config, pool, MetaData
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from logging.config import fileConfig
|
||||
import logging
|
||||
|
||||
@@ -17,12 +18,24 @@ try:
|
||||
except:
|
||||
pass
|
||||
|
||||
## below block is needed for mssql
|
||||
meta = MetaData(naming_convention = {
|
||||
"ix": 'ix_%(column_0_label)s',
|
||||
"uq": "uq_%(table_name)s_%(column_0_name)s",
|
||||
"ck": "ck_%(table_name)s_%(column_0_name)s_%(constraint_name)s",
|
||||
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
|
||||
"pk": "pk_%(table_name)s"
|
||||
})
|
||||
Base = declarative_base(metadata=meta)
|
||||
|
||||
logger = logging.getLogger('alembic.runtime.setup')
|
||||
# add your model's MetaData object here
|
||||
# for 'autogenerate' support
|
||||
# from myapp import mymodel
|
||||
# target_metadata = mymodel.Base.metadata
|
||||
target_metadata = None
|
||||
#Comment above line and uncomment below line for mssql
|
||||
#target_metadata = Base.metadata
|
||||
|
||||
# other values from the config, defined by the needs of env.py,
|
||||
# can be acquired:
|
||||
@@ -42,7 +55,7 @@ def run_migrations_offline():
|
||||
|
||||
"""
|
||||
url = config.get_main_option("sqlalchemy.url")
|
||||
context.configure(url=url)
|
||||
context.configure(url=url,target_metadata=target_metadata)
|
||||
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
Reference in New Issue
Block a user