summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/compiler.py
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2018-06-24 11:57:21 -0400
committerGerrit Code Review <gerrit@ci.zzzcomputing.com>2018-06-24 11:57:21 -0400
commit647382b08d64a8b918715670eae7899a5d300325 (patch)
treef4e3b307b92c8852c1c9897ccc68c0ea1f434cf7 /lib/sqlalchemy/sql/compiler.py
parentc352257070e17baada280befd2beae15ee26f4d0 (diff)
parent3619edcb8aa3ceef2a44925b85315fc0e90c5982 (diff)
downloadsqlalchemy-647382b08d64a8b918715670eae7899a5d300325.tar.gz
Merge "render WITH clause after INSERT for INSERT..SELECT on Oracle, MySQL"
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r--lib/sqlalchemy/sql/compiler.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index a442c65fd..0b98dc51c 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -2105,7 +2105,12 @@ class SQLCompiler(Compiled):
returning_clause = None
if insert_stmt.select is not None:
- text += " %s" % self.process(self._insert_from_select, **kw)
+ select_text = self.process(self._insert_from_select, **kw)
+
+ if self.ctes and toplevel and self.dialect.cte_follows_insert:
+ text += " %s%s" % (self._render_cte_clause(), select_text)
+ else:
+ text += " %s" % select_text
elif not crud_params and supports_default_values:
text += " DEFAULT VALUES"
elif insert_stmt._has_multi_parameters:
@@ -2130,7 +2135,7 @@ class SQLCompiler(Compiled):
if returning_clause and not self.returning_precedes_values:
text += " " + returning_clause
- if self.ctes and toplevel:
+ if self.ctes and toplevel and not self.dialect.cte_follows_insert:
text = self._render_cte_clause() + text
self.stack.pop(-1)