| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- import sqlalchemy as sa
- from sqlalchemy import Column
- from sqlalchemy import Integer
- from sqlalchemy import MetaData
- from sqlalchemy import Table
- from ._autogen_fixtures import AutogenFixtureTest
- from ... import testing
- from ...testing import eq_
- from ...testing import is_
- from ...testing import is_true
- from ...testing import mock
- from ...testing import TestBase
- class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
- __requires__ = ("computed_columns",)
- __backend__ = True
- def test_add_computed_column(self):
- m1 = MetaData()
- m2 = MetaData()
- Table("user", m1, Column("id", Integer, primary_key=True))
- Table(
- "user",
- m2,
- Column("id", Integer, primary_key=True),
- Column("foo", Integer, sa.Computed("5")),
- )
- diffs = self._fixture(m1, m2)
- eq_(diffs[0][0], "add_column")
- eq_(diffs[0][2], "user")
- eq_(diffs[0][3].name, "foo")
- c = diffs[0][3].computed
- is_true(isinstance(c, sa.Computed))
- is_(c.persisted, None)
- eq_(str(c.sqltext), "5")
- def test_remove_computed_column(self):
- m1 = MetaData()
- m2 = MetaData()
- Table(
- "user",
- m1,
- Column("id", Integer, primary_key=True),
- Column("foo", Integer, sa.Computed("5")),
- )
- Table("user", m2, Column("id", Integer, primary_key=True))
- diffs = self._fixture(m1, m2)
- eq_(diffs[0][0], "remove_column")
- eq_(diffs[0][2], "user")
- c = diffs[0][3]
- eq_(c.name, "foo")
- is_true(isinstance(c.computed, sa.Computed))
- is_true(isinstance(c.server_default, sa.Computed))
- @testing.combinations(
- lambda: (None, sa.Computed("bar*5")),
- (lambda: (sa.Computed("bar*5"), None)),
- lambda: (
- sa.Computed("bar*5"),
- sa.Computed("bar * 42", persisted=True),
- ),
- lambda: (sa.Computed("bar*5"), sa.Computed("bar * 42")),
- )
- def test_cant_change_computed_warning(self, test_case):
- arg_before, arg_after = testing.resolve_lambda(test_case, **locals())
- m1 = MetaData()
- m2 = MetaData()
- arg_before = [] if arg_before is None else [arg_before]
- arg_after = [] if arg_after is None else [arg_after]
- Table(
- "user",
- m1,
- Column("id", Integer, primary_key=True),
- Column("bar", Integer),
- Column("foo", Integer, *arg_before),
- )
- Table(
- "user",
- m2,
- Column("id", Integer, primary_key=True),
- Column("bar", Integer),
- Column("foo", Integer, *arg_after),
- )
- with mock.patch("alembic.util.warn") as mock_warn:
- diffs = self._fixture(m1, m2)
- eq_(
- mock_warn.mock_calls,
- [mock.call("Computed default on user.foo cannot be modified")],
- )
- eq_(list(diffs), [])
- @testing.combinations(
- lambda: (None, None),
- lambda: (sa.Computed("5"), sa.Computed("5")),
- lambda: (sa.Computed("bar*5"), sa.Computed("bar*5")),
- lambda: (sa.Computed("bar*5"), sa.Computed("bar * \r\n\t5")),
- )
- def test_computed_unchanged(self, test_case):
- arg_before, arg_after = testing.resolve_lambda(test_case, **locals())
- m1 = MetaData()
- m2 = MetaData()
- arg_before = [] if arg_before is None else [arg_before]
- arg_after = [] if arg_after is None else [arg_after]
- Table(
- "user",
- m1,
- Column("id", Integer, primary_key=True),
- Column("bar", Integer),
- Column("foo", Integer, *arg_before),
- )
- Table(
- "user",
- m2,
- Column("id", Integer, primary_key=True),
- Column("bar", Integer),
- Column("foo", Integer, *arg_after),
- )
- with mock.patch("alembic.util.warn") as mock_warn:
- diffs = self._fixture(m1, m2)
- eq_(mock_warn.mock_calls, [])
- eq_(list(diffs), [])
|