diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_autogen_render.py | 4 | ||||
-rw-r--r-- | tests/test_mssql.py | 73 | ||||
-rw-r--r-- | tests/test_op.py | 9 | ||||
-rw-r--r-- | tests/test_postgresql.py | 3 | ||||
-rw-r--r-- | tests/test_script_production.py | 4 |
5 files changed, 74 insertions, 19 deletions
diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index f138df5..ada2a12 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -25,6 +25,7 @@ from sqlalchemy import text from sqlalchemy import types from sqlalchemy import Unicode from sqlalchemy import UniqueConstraint +from sqlalchemy import VARCHAR from sqlalchemy.engine.default import DefaultDialect from sqlalchemy.sql import and_ from sqlalchemy.sql import column @@ -1792,7 +1793,6 @@ class AutogenRenderTest(TestBase): ) def test_render_variant(self): - from sqlalchemy import VARCHAR, CHAR self.autogen_context.opts["user_module_prefix"] = None @@ -1824,8 +1824,6 @@ class AutogenRenderTest(TestBase): ) def test_repr_user_type_user_prefix_present(self): - from sqlalchemy.types import UserDefinedType - class MyType(UserDefinedType): def get_col_spec(self): return "MYTYPE" diff --git a/tests/test_mssql.py b/tests/test_mssql.py index 4bb618c..640e168 100644 --- a/tests/test_mssql.py +++ b/tests/test_mssql.py @@ -4,10 +4,16 @@ from __future__ import annotations from typing import Any from typing import Dict +from sqlalchemy import CheckConstraint from sqlalchemy import Column from sqlalchemy import exc +from sqlalchemy import ForeignKey +from sqlalchemy import inspect from sqlalchemy import Integer +from sqlalchemy import MetaData from sqlalchemy import String +from sqlalchemy import Table +from sqlalchemy import text from alembic import command from alembic import op @@ -17,6 +23,7 @@ from alembic.testing import combinations from alembic.testing import config from alembic.testing import eq_ from alembic.testing import expect_warnings +from alembic.testing import fixture from alembic.testing.env import _no_sql_testing_config from alembic.testing.env import clear_staging_env from alembic.testing.env import staging_env @@ -181,9 +188,10 @@ class OpTest(TestBase): server_default=None, ) context.assert_contains( - "declare @const_name varchar(256)select @const_name = [name] " - "from sys.default_constraintswhere parent_object_id = " - "object_id('t')and col_name(parent_object_id, " + "declare @const_name varchar(256)\n" + "select @const_name = QUOTENAME([name]) " + "from sys.default_constraints\nwhere parent_object_id = " + "object_id('t')\nand col_name(parent_object_id, " "parent_column_id) = 'c'" ) context.assert_contains( @@ -199,9 +207,10 @@ class OpTest(TestBase): schema="xyz", ) context.assert_contains( - "declare @const_name varchar(256)select @const_name = [name] " - "from sys.default_constraintswhere parent_object_id = " - "object_id('xyz.t')and col_name(parent_object_id, " + "declare @const_name varchar(256)\n" + "select @const_name = QUOTENAME([name]) from " + "sys.default_constraints\nwhere parent_object_id = " + "object_id('xyz.t')\nand col_name(parent_object_id, " "parent_column_id) = 'c'" ) context.assert_contains( @@ -259,7 +268,7 @@ class OpTest(TestBase): op.drop_column("t1", "c1", mssql_drop_foreign_key=True) context.assert_contains( "declare @const_name varchar(256)\n" - "select @const_name = [name] from\n" + "select @const_name = QUOTENAME([name]) from\n" "sys.foreign_keys fk join sys.foreign_key_columns fkcon " "fk.object_id=fkc.constraint_object_id\n" "where fkc.parent_object_id = object_id('t1')\nand " @@ -276,7 +285,7 @@ class OpTest(TestBase): op.drop_column("t1", "c1", schema="xyz", mssql_drop_foreign_key=True) context.assert_contains( "declare @const_name varchar(256)\n" - "select @const_name = [name] from\n" + "select @const_name = QUOTENAME([name]) from\n" "sys.foreign_keys fk join sys.foreign_key_columns fkcon " "fk.object_id=fkc.constraint_object_id\n" "where fkc.parent_object_id = object_id('xyz.t1')\nand " @@ -516,3 +525,51 @@ class OpTest(TestBase): server_default=sd(), existing_server_default=esd(), ) + + +class RoundTripTest(TestBase): + __backend__ = True + __only_on__ = "mssql" + + @fixture + def tables(self, connection): + self.meta = MetaData() + self.tbl_other = Table( + "other", self.meta, Column("oid", Integer, primary_key=True) + ) + self.tbl = Table( + "round_trip_table", + self.meta, + Column("id", Integer, primary_key=True), + Column( + "oid_fk", ForeignKey("other.oid", name="require quote charß!") + ), + Column("with_check", Integer), + CheckConstraint("with_check > 0", name="chéck çst"), + ) + self.meta.create_all(connection) + yield + self.meta.drop_all(connection) + + def test_drop_col_with_fk(self, ops_context, connection, tables): + ops_context.drop_column( + "round_trip_table", "oid_fk", mssql_drop_foreign_key=True + ) + insp = inspect(connection) + eq_(insp.get_foreign_keys("round_trip_table"), []) + + def test_drop_col_with_check(self, ops_context, connection, tables): + ops_context.drop_column( + "round_trip_table", "with_check", mssql_drop_check=True + ) + # No get_check_constraints on mssql + val = connection.execute( + text( + "select name from sys.check_constraints where " + "parent_object_id=object_id('round_trip_table')" + ) + ).scalar() + eq_(val, None) + + # don't know if a default constraint can be explicitly named, but + # the path is the same as the check constraint, so it should be good diff --git a/tests/test_op.py b/tests/test_op.py index 5682abb..c483c4a 100644 --- a/tests/test_op.py +++ b/tests/test_op.py @@ -14,10 +14,13 @@ from sqlalchemy import Table from sqlalchemy import UniqueConstraint from sqlalchemy.sql import column from sqlalchemy.sql import func +from sqlalchemy.sql import table from sqlalchemy.sql import text from sqlalchemy.sql.schema import quoted_name from alembic import op +from alembic.operations import MigrateOperation +from alembic.operations import Operations from alembic.operations import ops from alembic.operations import schemaobj from alembic.testing import assert_raises_message @@ -1023,8 +1026,6 @@ class OpTest(TestBase): def test_inline_literal(self): context = op_fixture() - from sqlalchemy.sql import table, column - from sqlalchemy import String, Integer account = table( "account", column("name", String), column("id", Integer) @@ -1144,8 +1145,6 @@ class OpTest(TestBase): class SQLModeOpTest(TestBase): def test_auto_literals(self): context = op_fixture(as_sql=True, literal_binds=True) - from sqlalchemy.sql import table, column - from sqlalchemy import String, Integer account = table( "account", column("name", String), column("id", Integer) @@ -1179,8 +1178,6 @@ class SQLModeOpTest(TestBase): class CustomOpTest(TestBase): def test_custom_op(self): - from alembic.operations import Operations, MigrateOperation - @Operations.register_operation("create_sequence") class CreateSequenceOp(MigrateOperation): """Create a SEQUENCE.""" diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index 6a67e0b..23d6a8c 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -19,9 +19,11 @@ from sqlalchemy import types from sqlalchemy import UniqueConstraint from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import BYTEA +from sqlalchemy.dialects.postgresql import ExcludeConstraint from sqlalchemy.dialects.postgresql import HSTORE from sqlalchemy.dialects.postgresql import JSON from sqlalchemy.dialects.postgresql import JSONB +from sqlalchemy.dialects.postgresql import TSRANGE from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.sql import column from sqlalchemy.sql import false @@ -1248,7 +1250,6 @@ class PGUniqueIndexAutogenerateTest(AutogenFixtureTest, TestBase): @config.requirements.btree_gist def test_exclude_const_unchanged(self): - from sqlalchemy.dialects.postgresql import TSRANGE, ExcludeConstraint m1 = MetaData() m2 = MetaData() diff --git a/tests/test_script_production.py b/tests/test_script_production.py index bddea5f..151b3b8 100644 --- a/tests/test_script_production.py +++ b/tests/test_script_production.py @@ -5,7 +5,10 @@ from unittest.mock import patch from dateutil import tz import sqlalchemy as sa +from sqlalchemy import Column from sqlalchemy import inspect +from sqlalchemy import MetaData +from sqlalchemy import Table from alembic import autogenerate from alembic import command @@ -717,7 +720,6 @@ class ImportsTest(TestBase): ) def test_imports_in_script(self): - from sqlalchemy import MetaData, Table, Column from sqlalchemy.dialects.mysql import VARCHAR type_ = VARCHAR(20, charset="utf8", national=True) |