diff options
| author | Federico Caselli <cfederico87@gmail.com> | 2020-03-14 13:57:42 +0100 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-03-15 19:09:04 -0400 |
| commit | 62b7dace0c1d03acf3224085d03a03684a969031 (patch) | |
| tree | 29037c928ce0b5b728a5d7ba2eb24ac6f110664c /test/engine | |
| parent | fcc03730c553b3fc0229e446e886d4f61dcb6291 (diff) | |
| download | sqlalchemy-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.py | 36 |
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, + ) |
