diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-02-01 16:25:31 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-02-01 17:00:42 -0500 |
| commit | 388d8db68d0db6f38e72d60386023c9eef263034 (patch) | |
| tree | 1deae94a0a2c8ac4a066da157ee6c36ecfc409ce /test/engine | |
| parent | 9a5943bf76cd436484a85a6d9478507c9bac3b08 (diff) | |
| download | sqlalchemy-388d8db68d0db6f38e72d60386023c9eef263034.tar.gz | |
Accept FetchedValue, text() for column "default" value
Fixed bug whereby the :meth:`.DDLEvents.column_reflect` event would not
allow a non-textual expression to be passed as the value of the
"default" for the new column, such as a :class:`.FetchedValue`
object to indicate a generic triggered default or a
:func:`.sql.expression.text` construct. Clarified the documentation
in this regard as well.
Fixes: #3905
Change-Id: I829796c3e9f87f375149bebee7eef133a6876d4d
Diffstat (limited to 'test/engine')
| -rw-r--r-- | test/engine/test_reflection.py | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index 0bc5b111e..9ddfe940f 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -1,13 +1,14 @@ import unicodedata import sqlalchemy as sa -from sqlalchemy import schema, inspect +from sqlalchemy import schema, inspect, sql from sqlalchemy import MetaData, Integer, String, Index, ForeignKey, \ - UniqueConstraint + UniqueConstraint, FetchedValue, DefaultClause from sqlalchemy.testing import ( ComparesTables, engines, AssertsCompiledSQL, fixtures, skip) from sqlalchemy.testing.schema import Table, Column -from sqlalchemy.testing import eq_, assert_raises, assert_raises_message +from sqlalchemy.testing import eq_, is_true, assert_raises, \ + assert_raises_message from sqlalchemy import testing from sqlalchemy.util import ue from sqlalchemy.testing import config @@ -1770,3 +1771,49 @@ class ColumnEventsTest(fixtures.RemovesEvents, fixtures.TestBase): "x", {"info": {"a": "b"}}, lambda table: eq_(table.c.x.info, {"a": "b"}) ) + + def test_override_server_default_fetchedvalue(self): + my_default = FetchedValue() + self._do_test( + "x", {"default": my_default}, + lambda table: eq_(table.c.x.server_default, my_default) + ) + + def test_override_server_default_default_clause(self): + my_default = DefaultClause("1") + self._do_test( + "x", {"default": my_default}, + lambda table: eq_(table.c.x.server_default, my_default) + ) + + def test_override_server_default_plain_text(self): + my_default = "1" + + def assert_text_of_one(table): + is_true( + isinstance( + table.c.x.server_default.arg, sql.elements.TextClause) + ) + eq_( + str(table.c.x.server_default.arg), "1" + ) + self._do_test( + "x", {"default": my_default}, + assert_text_of_one + ) + + def test_override_server_default_textclause(self): + my_default = sa.text("1") + + def assert_text_of_one(table): + is_true( + isinstance( + table.c.x.server_default.arg, sql.elements.TextClause) + ) + eq_( + str(table.c.x.server_default.arg), "1" + ) + self._do_test( + "x", {"default": my_default}, + assert_text_of_one + ) |
