diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-07-11 19:23:40 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-07-11 19:23:40 -0400 |
commit | 520b808db255eba3fdccfb93656a79008154dcae (patch) | |
tree | 428dfd4a203a7b161b8a063f69086d7aed6e0608 /test/dialect/postgresql/test_compiler.py | |
parent | ca52e87268fec966f6005b1e4aa30206ae895e9e (diff) | |
download | sqlalchemy-520b808db255eba3fdccfb93656a79008154dcae.tar.gz |
repair schema_translate_map for schema type use cases
Fixed issue where the PostgreSQL ``ENUM`` datatype as embedded in the
``ARRAY`` datatype would fail to emit correctly in create/drop when the
``schema_translate_map`` feature were also in use. Additionally repairs a
related issue where the same ``schema_translate_map`` feature would not
work for the ``ENUM`` datatype in combination with a ``CAST``, that's also
intrinsic to how the ``ARRAY(ENUM)`` combination works on the PostgreSQL
dialect.
Fixes: #6739
Change-Id: I44b1ad4db4af3acbf639aa422c46c22dd3b0d3a6
Diffstat (limited to 'test/dialect/postgresql/test_compiler.py')
-rw-r--r-- | test/dialect/postgresql/test_compiler.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/dialect/postgresql/test_compiler.py b/test/dialect/postgresql/test_compiler.py index e48de9d21..3b542880f 100644 --- a/test/dialect/postgresql/test_compiler.py +++ b/test/dialect/postgresql/test_compiler.py @@ -249,6 +249,33 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): "'y', 'z')))", ) + def test_cast_enum_schema(self): + """test #6739""" + e1 = Enum("x", "y", "z", name="somename") + e2 = Enum("x", "y", "z", name="somename", schema="someschema") + + stmt = select(cast(column("foo"), e1), cast(column("bar"), e2)) + self.assert_compile( + stmt, + "SELECT CAST(foo AS somename) AS foo, " + "CAST(bar AS someschema.somename) AS bar", + ) + + def test_cast_enum_schema_translate(self): + """test #6739""" + e1 = Enum("x", "y", "z", name="somename") + e2 = Enum("x", "y", "z", name="somename", schema="someschema") + schema_translate_map = {None: "bat", "someschema": "hoho"} + + stmt = select(cast(column("foo"), e1), cast(column("bar"), e2)) + self.assert_compile( + stmt, + "SELECT CAST(foo AS bat.somename) AS foo, " + "CAST(bar AS hoho.somename) AS bar", + schema_translate_map=schema_translate_map, + render_schema_translate=True, + ) + def test_create_type_schema_translate(self): e1 = Enum("x", "y", "z", name="somename") e2 = Enum("x", "y", "z", name="somename", schema="someschema") @@ -285,6 +312,27 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): render_schema_translate=True, ) + def test_create_table_array_embedded_schema_type_schema_translate(self): + """test #6739""" + e1 = Enum("x", "y", "z", name="somename") + e2 = Enum("x", "y", "z", name="somename", schema="someschema") + schema_translate_map = {None: "foo", "someschema": "bar"} + + table = Table( + "some_table", + MetaData(), + Column("q", PG_ARRAY(e1)), + Column("p", PG_ARRAY(e2)), + ) + from sqlalchemy.schema import CreateTable + + self.assert_compile( + CreateTable(table), + "CREATE TABLE foo.some_table (q foo.somename[], p bar.somename[])", + schema_translate_map=schema_translate_map, + render_schema_translate=True, + ) + def test_create_table_with_tablespace(self): m = MetaData() tbl = Table( |