summaryrefslogtreecommitdiff
path: root/test/engine
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-02-01 16:25:31 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2017-02-01 17:00:42 -0500
commit388d8db68d0db6f38e72d60386023c9eef263034 (patch)
tree1deae94a0a2c8ac4a066da157ee6c36ecfc409ce /test/engine
parent9a5943bf76cd436484a85a6d9478507c9bac3b08 (diff)
downloadsqlalchemy-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.py53
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
+ )