]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Pass schema_translate_map from DDLCompiler to SQLCompiler
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 7 Aug 2020 15:24:29 +0000 (11:24 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 7 Aug 2020 15:24:29 +0000 (11:24 -0400)
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

doc/build/changelog/unreleased_13/5500.rst [new file with mode: 0644]
lib/sqlalchemy/sql/compiler.py
test/sql/test_compiler.py

diff --git a/doc/build/changelog/unreleased_13/5500.rst b/doc/build/changelog/unreleased_13/5500.rst
new file mode 100644 (file)
index 0000000..c93a869
--- /dev/null
@@ -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.
index b8984316c65bb92e34ee220988ec34e3982fe336..8e273f67c47fdbadafee42052a3de3719dcd4824 100644 (file)
@@ -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):
index 1d31f1ea5ef9c51232bd424c93e43f3184cfe1c7..1084d30cb0fc02a922348af1fab9fcdb3e5b727d 100644 (file)
@@ -4270,18 +4270,95 @@ class DDLTest(fixtures.TestBase, AssertsCompiledSQL):
             schema_translate_map=schema_translate_map,
         )
 
+        self.assert_compile(
+            s1.next_value(),
+            "<next sequence value: [SCHEMA__none].s1>",
+            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(),
+            "<next sequence value: [SCHEMA_foo].s2>",
+            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(),
+            "<next sequence value: [SCHEMA_bar].s3>",
+            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 <next sequence value: [SCHEMA__none].s1> "
+            "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 <next sequence value: [SCHEMA_foo].s2> "
+            "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 <next sequence value: [SCHEMA_bar].s3> "
+            "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))