]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed bug where sending a composite attribute into :meth:`.Query.order_by`
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 10 Jun 2013 17:50:06 +0000 (13:50 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 10 Jun 2013 17:50:06 +0000 (13:50 -0400)
would produce a parenthesized expression not accepted by some databases.
[ticket:2754]

doc/build/changelog/changelog_08.rst
doc/build/changelog/changelog_09.rst
lib/sqlalchemy/orm/descriptor_props.py
test/orm/test_composites.py

index bedb5da024f3a7bb689f1c3b84cb7e54b0d65cf1..ffd5bd4e4d09905b906fbbf09da94a2e0f575603 100644 (file)
@@ -6,6 +6,13 @@
 .. changelog::
     :version: 0.8.2
 
+    .. change::
+        :tags: bug, orm
+        :tickets: 2754
+
+        Fixed bug where sending a composite attribute into :meth:`.Query.order_by`
+        would produce a parenthesized expression not accepted by some databases.
+
     .. change::
         :tags: bug, orm
         :tickets: 2755
index 1f14b33ffc4ace12093b158f70812d32c57a2041..b7d25c07a124f0f6b56d1598fb92a6b7c5e6f3f2 100644 (file)
@@ -6,6 +6,13 @@
 .. changelog::
     :version: 0.9.0
 
+    .. change::
+        :tags: bug, orm
+        :tickets: 2754
+
+        Fixed bug where sending a composite attribute into :meth:`.Query.order_by`
+        would produce a parenthesized expression not accepted by some databases.
+        Also in 0.8.2.
 
     .. change::
         :tags: bug, orm
index c565cb7152aea39fefa09e100def013f68251c34..97ca6d2eb0b6f265d2f0f929116ef77be488fefa 100644 (file)
@@ -320,7 +320,7 @@ class CompositeProperty(DescriptorProperty):
         """
 
         def __clause_element__(self):
-            return expression.ClauseList(*self._comparable_elements)
+            return expression.ClauseList(group=False, *self._comparable_elements)
 
         __hash__ = None
 
index 379abfa1377017940380d8a0b29746726955f241..5e7b91f3e7eb17c688b7b7640ff8b995bed3f0df 100644 (file)
@@ -712,7 +712,9 @@ class ConfigurationTest(fixtures.MappedTest):
         })
         self._test_roundtrip()
 
-class ComparatorTest(fixtures.MappedTest):
+class ComparatorTest(fixtures.MappedTest, testing.AssertsCompiledSQL):
+    __dialect__ = 'default'
+
     @classmethod
     def define_tables(cls, metadata):
         Table('edge', metadata,
@@ -836,4 +838,28 @@ class ComparatorTest(fixtures.MappedTest):
 
         assert edge_1 in near_edges and edge_2 in near_edges
 
+    def test_order_by(self):
+        self._fixture(False)
+        Edge = self.classes.Edge
+        s = Session()
+        self.assert_compile(
+            s.query(Edge).order_by(Edge.start, Edge.end),
+            "SELECT edge.id AS edge_id, edge.x1 AS edge_x1, "
+            "edge.y1 AS edge_y1, edge.x2 AS edge_x2, edge.y2 AS edge_y2 "
+            "FROM edge ORDER BY edge.x1, edge.y1, edge.x2, edge.y2"
+        )
+
+    def test_order_by_aliased(self):
+        self._fixture(False)
+        Edge = self.classes.Edge
+        s = Session()
+        ea = aliased(Edge)
+        self.assert_compile(
+            s.query(ea).order_by(ea.start, ea.end),
+            "SELECT edge_1.id AS edge_1_id, edge_1.x1 AS edge_1_x1, "
+            "edge_1.y1 AS edge_1_y1, edge_1.x2 AS edge_1_x2, "
+            "edge_1.y2 AS edge_1_y2 "
+            "FROM edge AS edge_1 ORDER BY edge_1.x1, edge_1.y1, "
+            "edge_1.x2, edge_1.y2"
+        )