merge stable
authorAdrien Di Mascio <Adrien.DiMascio@logilab.fr>
Thu, 18 Mar 2010 17:16:17 +0100
branchstable
changeset 4942 8f4002f41b26
parent 4941 ec27aea9632b (current diff)
parent 4939 349af486f5ed (diff)
child 4946 2654cd5c87e0
merge
--- a/rset.py	Thu Mar 18 14:06:53 2010 +0100
+++ b/rset.py	Thu Mar 18 17:16:17 2010 +0100
@@ -286,12 +286,14 @@
             newselect = stmts.Select()
             newselect.limit = limit
             newselect.offset = offset
-            aliases = [nodes.VariableRef(newselect.get_variable(vref.name, i))
-                       for i, vref in enumerate(rqlst.selection)]
+            aliases = [nodes.VariableRef(newselect.get_variable(chr(65+i), i))
+                       for i in xrange(len(rqlst.children[0].selection))]
+            for vref in aliases:
+                newselect.append_selected(nodes.VariableRef(vref.variable))
             newselect.set_with([nodes.SubQuery(aliases, rqlst)], check=False)
             newunion = stmts.Union()
             newunion.append(newselect)
-            rql = rqlst.as_string(kwargs=self.args)
+            rql = newunion.as_string(kwargs=self.args)
             rqlst.parent = None
         return rql
 
--- a/test/unittest_rset.py	Thu Mar 18 14:06:53 2010 +0100
+++ b/test/unittest_rset.py	Thu Mar 18 17:16:17 2010 +0100
@@ -371,6 +371,18 @@
         rset = self.execute(u'Any X WHERE X has_text %(text)s', {'text' : 'foo'})
         self.assertEquals(rset.searched_text(), 'foo')
 
+    def test_union_limited_rql(self):
+        rset = self.execute('(Any X,N WHERE X is Bookmark, X title N)'
+                            ' UNION '
+                            '(Any X,N WHERE X is CWGroup, X name N)')
+        rset.limit(2, 10, inplace=True)
+        self.assertEquals(rset.limited_rql(),
+                          'Any A,B LIMIT 2 OFFSET 10 '
+                          'WITH A,B BEING ('
+                          '(Any X,N WHERE X is Bookmark, X title N) '
+                          'UNION '
+                          '(Any X,N WHERE X is CWGroup, X name N)'
+                          ')')
 
 if __name__ == '__main__':
     unittest_main()