summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_autogen_render.py4
-rw-r--r--tests/test_mssql.py73
-rw-r--r--tests/test_op.py9
-rw-r--r--tests/test_postgresql.py3
-rw-r--r--tests/test_script_production.py4
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)