--- a/server/session.py Tue Sep 11 21:51:54 2012 +0200
+++ b/server/session.py Tue Sep 11 22:32:01 2012 +0200
@@ -1107,71 +1107,6 @@
self._threaddata._rewriter = RQLRewriter(self)
return self._threaddata._rewriter
- def build_description(self, rqlst, args, result):
- """build a description for a given result"""
- if len(rqlst.children) == 1 and len(rqlst.children[0].solutions) == 1:
- # easy, all lines are identical
- selected = rqlst.children[0].selection
- solution = rqlst.children[0].solutions[0]
- description = _make_description(selected, args, solution)
- return RepeatList(len(result), tuple(description))
- # hard, delegate the work :o)
- return self.manual_build_descr(rqlst, args, result)
-
- def manual_build_descr(self, rqlst, args, result):
- """build a description for a given result by analysing each row
-
- XXX could probably be done more efficiently during execution of query
- """
- # not so easy, looks for variable which changes from one solution
- # to another
- unstables = rqlst.get_variable_indices()
- basedescr = []
- todetermine = []
- for i in xrange(len(rqlst.children[0].selection)):
- ttype = selection_idx_type(i, rqlst, args)
- if ttype is None or ttype == 'Any':
- ttype = None
- isfinal = True
- else:
- isfinal = ttype in BASE_TYPES
- if ttype is None or i in unstables:
- basedescr.append(None)
- todetermine.append( (i, isfinal) )
- else:
- basedescr.append(ttype)
- if not todetermine:
- return RepeatList(len(result), tuple(basedescr))
- return self._build_descr(result, basedescr, todetermine)
-
- def _build_descr(self, result, basedescription, todetermine):
- description = []
- etype_from_eid = self.describe
- todel = []
- for i, row in enumerate(result):
- row_descr = basedescription[:]
- for index, isfinal in todetermine:
- value = row[index]
- if value is None:
- # None value inserted by an outer join, no type
- row_descr[index] = None
- continue
- if isfinal:
- row_descr[index] = etype_from_pyobj(value)
- else:
- try:
- row_descr[index] = etype_from_eid(value)[0]
- except UnknownEid:
- self.error('wrong eid %s in repository, you should '
- 'db-check the database' % value)
- todel.append(i)
- break
- else:
- description.append(tuple(row_descr))
- for i in reversed(todel):
- del result[i]
- return description
-
# deprecated ###############################################################
@deprecated('[3.13] use getattr(session.rtype_eids_rdef(rtype, eidfrom, eidto), prop)')
--- a/server/test/unittest_session.py Tue Sep 11 21:51:54 2012 +0200
+++ b/server/test/unittest_session.py Tue Sep 11 22:32:01 2012 +0200
@@ -1,4 +1,4 @@
-# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of CubicWeb.
@@ -63,27 +63,6 @@
self.assertEqual(session.disabled_hook_categories, set())
self.assertEqual(session.enabled_hook_categories, set())
- def test_build_descr1(self):
- rset = self.execute('(Any U,L WHERE U login L) UNION (Any G,N WHERE G name N, G is CWGroup)')
- orig_length = len(rset)
- rset.rows[0][0] = 9999999
- description = self.session.build_description(rset.syntax_tree(), None, rset.rows)
- self.assertEqual(len(description), orig_length - 1)
- self.assertEqual(len(rset.rows), orig_length - 1)
- self.assertFalse(rset.rows[0][0] == 9999999)
-
- def test_build_descr2(self):
- rset = self.execute('Any X,Y WITH X,Y BEING ((Any G,NULL WHERE G is CWGroup) UNION (Any U,G WHERE U in_group G))')
- for x, y in rset.description:
- if y is not None:
- self.assertEqual(y, 'CWGroup')
-
- def test_build_descr3(self):
- rset = self.execute('(Any G,NULL WHERE G is CWGroup) UNION (Any U,G WHERE U in_group G)')
- for x, y in rset.description:
- if y is not None:
- self.assertEqual(y, 'CWGroup')
-
if __name__ == '__main__':
unittest_main()