summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/changelog_08.rst8
-rw-r--r--lib/sqlalchemy/sql/selectable.py2
-rw-r--r--test/sql/test_insert.py20
3 files changed, 28 insertions, 2 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst
index 6b3c83107..25accc8aa 100644
--- a/doc/build/changelog/changelog_08.rst
+++ b/doc/build/changelog/changelog_08.rst
@@ -12,6 +12,14 @@
:version: 0.8.7
.. change::
+ :tags: bug, sql
+ :versions: 0.9.5, 1.0.0
+ :tickets: 3044
+
+ Fixed bug in INSERT..FROM SELECT construct where selecting from a
+ UNION would wrap the union in an anonymous (e.g. unlabled) subquery.
+
+ .. change::
:tags: bug, postgresql
:versions: 0.9.5, 1.0.0
:tickets: 3053
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py
index 72e4a930d..8c58c7c22 100644
--- a/lib/sqlalchemy/sql/selectable.py
+++ b/lib/sqlalchemy/sql/selectable.py
@@ -44,7 +44,7 @@ def _interpret_as_select(element):
element = _interpret_as_from(element)
if isinstance(element, Alias):
element = element.original
- if not isinstance(element, Select):
+ if not isinstance(element, SelectBase):
element = element.select()
return element
diff --git a/test/sql/test_insert.py b/test/sql/test_insert.py
index 8a5c7cd83..d9f7b1629 100644
--- a/test/sql/test_insert.py
+++ b/test/sql/test_insert.py
@@ -196,7 +196,25 @@ class InsertTest(_InsertTestBase, fixtures.TablesTest, AssertsCompiledSQL):
checkparams={}
)
-
+ def test_insert_from_select_union(self):
+ mytable = self.tables.mytable
+
+ name = 'name'
+ description = 'desc'
+ sel = select(
+ [name, mytable.c.description],
+ ).union(
+ select([name, description])
+ )
+ ins = mytable.insert().\
+ from_select(
+ [mytable.c.name, mytable.c.description], sel)
+ self.assert_compile(
+ ins,
+ "INSERT INTO mytable (name, description) "
+ "SELECT name, mytable.description FROM mytable "
+ "UNION SELECT name, desc"
+ )
def test_insert_from_select_col_values(self):
table1 = self.tables.mytable
table2 = self.tables.myothertable