summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2020-08-07 17:22:14 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2020-08-07 17:22:14 +0000
commita25d122eae8bda79af9f596d2c51d4d1e2dfd30f (patch)
tree902fe81f2251dd9e0b30b1162afb01a47c231f06
parent7f52c10357cbc98e467f317128b3fea2018eaf7c (diff)
parented50a003e296ac6bfb998f2b401091d87874cb4c (diff)
downloadsqlalchemy-a25d122eae8bda79af9f596d2c51d4d1e2dfd30f.tar.gz
Merge "Pass schema_translate_map from DDLCompiler to SQLCompiler"
-rw-r--r--doc/build/changelog/unreleased_13/5500.rst10
-rw-r--r--lib/sqlalchemy/sql/compiler.py4
-rw-r--r--test/sql/test_compiler.py77
3 files changed, 90 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_13/5500.rst b/doc/build/changelog/unreleased_13/5500.rst
new file mode 100644
index 000000000..c93a86949
--- /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 b8984316c..8e273f67c 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 1d31f1ea5..1084d30cb 100644
--- a/test/sql/test_compiler.py
+++ b/test/sql/test_compiler.py
@@ -4271,17 +4271,94 @@ class DDLTest(fixtures.TestBase, AssertsCompiledSQL):
)
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))