summaryrefslogtreecommitdiff
path: root/test/engine
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2020-03-14 13:57:42 +0100
committerMike Bayer <mike_mp@zzzcomputing.com>2020-03-15 19:09:04 -0400
commit62b7dace0c1d03acf3224085d03a03684a969031 (patch)
tree29037c928ce0b5b728a5d7ba2eb24ac6f110664c /test/engine
parentfcc03730c553b3fc0229e446e886d4f61dcb6291 (diff)
downloadsqlalchemy-62b7dace0c1d03acf3224085d03a03684a969031.tar.gz
Support inspection of computed column
Added support for reflection of "computed" columns, which are now returned as part of the structure returned by :meth:`.Inspector.get_columns`. When reflecting full :class:`.Table` objects, computed columns will be represented using the :class:`.Computed` construct. Also improve the documentation in :meth:`Inspector.get_columns`, correctly listing all the returned keys. Fixes: #5063 Fixes: #4051 Closes: #5064 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5064 Pull-request-sha: ba00fc321ce468f8885aad23b3dd33c789e50fbe Change-Id: I789986554fc8ac7f084270474d0b2c12046b1cc2
Diffstat (limited to 'test/engine')
-rw-r--r--test/engine/test_reflection.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py
index 579f1aece..9de181216 100644
--- a/test/engine/test_reflection.py
+++ b/test/engine/test_reflection.py
@@ -1,6 +1,7 @@
import unicodedata
import sqlalchemy as sa
+from sqlalchemy import Computed
from sqlalchemy import DefaultClause
from sqlalchemy import FetchedValue
from sqlalchemy import ForeignKey
@@ -26,6 +27,8 @@ from sqlalchemy.testing import fixtures
from sqlalchemy.testing import in_
from sqlalchemy.testing import is_
from sqlalchemy.testing import is_false
+from sqlalchemy.testing import is_instance_of
+from sqlalchemy.testing import is_not_
from sqlalchemy.testing import is_true
from sqlalchemy.testing import mock
from sqlalchemy.testing import not_in_
@@ -2263,3 +2266,36 @@ class ColumnEventsTest(fixtures.RemovesEvents, fixtures.TestBase):
eq_(str(table.c.x.server_default.arg), "1")
self._do_test("x", {"default": my_default}, assert_text_of_one)
+
+
+class ComputedColumnTest(fixtures.ComputedReflectionFixtureTest):
+ def check_table_column(self, table, name, text, persisted):
+ is_true(name in table.columns)
+ col = table.columns[name]
+ is_not_(col.computed, None)
+ is_instance_of(col.computed, Computed)
+
+ eq_(self.normalize(str(col.computed.sqltext)), text)
+ if testing.requires.computed_columns_reflect_persisted.enabled:
+ eq_(col.computed.persisted, persisted)
+ else:
+ is_(col.computed.persisted, None)
+
+ def test_table_reflection(self):
+ meta = MetaData()
+ table = Table("computed_column_table", meta, autoload_with=config.db)
+
+ self.check_table_column(
+ table,
+ "computed_no_flag",
+ "normal+42",
+ testing.requires.computed_columns_default_persisted.enabled,
+ )
+ if testing.requires.computed_columns_virtual.enabled:
+ self.check_table_column(
+ table, "computed_virtual", "normal+2", False,
+ )
+ if testing.requires.computed_columns_stored.enabled:
+ self.check_table_column(
+ table, "computed_stored", "normal-42", True,
+ )