# HG changeset patch # User Sylvain Thénault # Date 1321477647 -3600 # Node ID 51929d531afff4427f10c42dcc5a25a521448e26 # Parent e8091b415ad8e7d17936afcce4ff03639d319e8b [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055 diff -r e8091b415ad8 -r 51929d531aff rset.py --- a/rset.py Thu Nov 10 23:18:56 2011 +0100 +++ b/rset.py Wed Nov 16 22:07:27 2011 +0100 @@ -695,7 +695,7 @@ continue if rootvar.name == rootmainvar.name: continue - if select is not rootselect: + if select is not rootselect and isinstance(rootvar, nodes.ColumnAlias): term = select.selection[root.subquery_selection_index(select, i)] var = _get_variable(term) if var is None: diff -r e8091b415ad8 -r 51929d531aff test/unittest_rset.py --- a/test/unittest_rset.py Thu Nov 10 23:18:56 2011 +0100 +++ b/test/unittest_rset.py Wed Nov 16 22:07:27 2011 +0100 @@ -71,6 +71,13 @@ result = list(attr_desc_iterator(select, col, 2)) self.assertEqual(result, []) + def test_subquery_callfunc_2(self): + rql = ('Any X,S,L WHERE X in_state S WITH X, L BEING (Any X,MAX(L) GROUPBY X WHERE X is CWUser, T wf_info_for X, T creation_date L)') + rqlst = parse(rql) + select, col = rqlst.locate_subquery(0, 'CWUser', None) + result = list(attr_desc_iterator(select, col, 0)) + self.assertEqual(result, [(1, 'in_state', 'subject')]) + class ResultSetTC(CubicWebTC): @@ -479,5 +486,6 @@ self.assertIsInstance(str(rset), basestring) self.assertEqual(len(str(rset).splitlines()), 1) + if __name__ == '__main__': unittest_main()