From: Mike Bayer Date: Fri, 7 Aug 2020 15:24:29 +0000 (-0400) Subject: Pass schema_translate_map from DDLCompiler to SQLCompiler X-Git-Tag: rel_1_4_0b1~190^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ed50a003e296ac6bfb998f2b401091d87874cb4c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Pass schema_translate_map from DDLCompiler to SQLCompiler Fixed issue where the :paramref:`_engine.Connection.execution_options.schema_translate_map` feature would not take effect when the :meth:`_schema.Sequence.next_value` function function for a :class:`_schema.Sequence` were used in the :paramref:`_schema.Column.server_default` parameter and the create table DDL were emitted. Fixes: #5500 Change-Id: I74a9fa13d22749d06c8202669f9ea220d9d984d9 --- diff --git a/doc/build/changelog/unreleased_13/5500.rst b/doc/build/changelog/unreleased_13/5500.rst new file mode 100644 index 0000000000..c93a869499 --- /dev/null +++ b/doc/build/changelog/unreleased_13/5500.rst @@ -0,0 +1,10 @@ +.. change:: + :tags: bug, sql + :tickets: 5500 + + Fixed issue where the + :paramref:`_engine.Connection.execution_options.schema_translate_map` + feature would not take effect when the :meth:`_schema.Sequence.next_value` + function function for a :class:`_schema.Sequence` were used in the + :paramref:`_schema.Column.server_default` parameter and the create table + DDL were emitted. diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index b8984316c6..8e273f67c4 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -3661,7 +3661,9 @@ class StrSQLCompiler(SQLCompiler): class DDLCompiler(Compiled): @util.memoized_property def sql_compiler(self): - return self.dialect.statement_compiler(self.dialect, None) + return self.dialect.statement_compiler( + self.dialect, None, schema_translate_map=self.schema_translate_map + ) @util.memoized_property def type_compiler(self): diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index 1d31f1ea5e..1084d30cb0 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -4270,18 +4270,95 @@ class DDLTest(fixtures.TestBase, AssertsCompiledSQL): schema_translate_map=schema_translate_map, ) + self.assert_compile( + s1.next_value(), + "", + schema_translate_map=schema_translate_map, + dialect="default_enhanced", + ) + self.assert_compile( schema.CreateSequence(s2), "CREATE SEQUENCE [SCHEMA_foo].s2 START WITH 1", schema_translate_map=schema_translate_map, ) + self.assert_compile( + s2.next_value(), + "", + schema_translate_map=schema_translate_map, + dialect="default_enhanced", + ) + self.assert_compile( schema.CreateSequence(s3), "CREATE SEQUENCE [SCHEMA_bar].s3 START WITH 1", schema_translate_map=schema_translate_map, ) + self.assert_compile( + s3.next_value(), + "", + schema_translate_map=schema_translate_map, + dialect="default_enhanced", + ) + + def test_schema_translate_map_sequence_server_default(self): + s1 = schema.Sequence("s1") + s2 = schema.Sequence("s2", schema="foo") + s3 = schema.Sequence("s3", schema="bar") + + schema_translate_map = {None: "z", "bar": None, "foo": "bat"} + + m = MetaData() + + t1 = Table( + "t1", + m, + Column( + "id", Integer, server_default=s1.next_value(), primary_key=True + ), + ) + t2 = Table( + "t2", + m, + Column( + "id", Integer, server_default=s2.next_value(), primary_key=True + ), + ) + t3 = Table( + "t3", + m, + Column( + "id", Integer, server_default=s3.next_value(), primary_key=True + ), + ) + + self.assert_compile( + schema.CreateTable(t1), + "CREATE TABLE [SCHEMA__none].t1 " + "(id INTEGER DEFAULT " + "NOT NULL, PRIMARY KEY (id))", + schema_translate_map=schema_translate_map, + dialect="default_enhanced", + ) + self.assert_compile( + schema.CreateTable(t2), + "CREATE TABLE [SCHEMA__none].t2 " + "(id INTEGER DEFAULT " + "NOT NULL, PRIMARY KEY (id))", + schema_translate_map=schema_translate_map, + dialect="default_enhanced", + ) + self.assert_compile( + schema.CreateTable(t3), + "CREATE TABLE [SCHEMA__none].t3 " + "(id INTEGER DEFAULT " + "NOT NULL, PRIMARY KEY (id))", + schema_translate_map=schema_translate_map, + dialect="default_enhanced", + ) + def test_fk_render(self): a = Table("a", MetaData(), Column("q", Integer)) b = Table("b", MetaData(), Column("p", Integer))