diff options
| -rw-r--r-- | doc/build/changelog/changelog_08.rst | 8 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 2 | ||||
| -rw-r--r-- | test/sql/test_insert.py | 20 |
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 |
