47 'Any C,P where C is Company, C employs P' : [(1, 'employs', 'subject')], |
47 'Any C,P where C is Company, C employs P' : [(1, 'employs', 'subject')], |
48 'Any C,P where C is Company, P employed_by P' : [], |
48 'Any C,P where C is Company, P employed_by P' : [], |
49 'Any C where C is Company, C employs P' : [], |
49 'Any C where C is Company, C employs P' : [], |
50 } |
50 } |
51 for rql, relations in queries.items(): |
51 for rql, relations in queries.items(): |
52 result = list(attr_desc_iterator(parse(rql).children[0])) |
52 result = list(attr_desc_iterator(parse(rql).children[0], 0, 0)) |
53 self.assertEqual((rql, result), (rql, relations)) |
53 self.assertEqual((rql, result), (rql, relations)) |
54 |
54 |
55 def test_relations_description_indexed(self): |
55 def test_relations_description_indexed(self): |
56 """tests relations_description() function""" |
56 """tests relations_description() function""" |
57 queries = { |
57 queries = { |
58 'Any C,U,P,L,M where C is Company, C employs P, U is CWUser, U login L, U mail M' : |
58 'Any C,U,P,L,M where C is Company, C employs P, U is CWUser, U login L, U mail M' : |
59 {0: [(2,'employs', 'subject')], 1: [(3,'login', 'subject'), (4,'mail', 'subject')]}, |
59 {0: [(2,'employs', 'subject')], 1: [(3,'login', 'subject'), (4,'mail', 'subject')]}, |
60 } |
60 } |
61 for rql, results in queries.items(): |
61 for rql, results in queries.items(): |
62 for var_index, relations in results.items(): |
62 for idx, relations in results.items(): |
63 result = list(attr_desc_iterator(parse(rql).children[0], var_index)) |
63 result = list(attr_desc_iterator(parse(rql).children[0], idx, idx)) |
64 self.assertEqual(result, relations) |
64 self.assertEqual(result, relations) |
65 |
65 |
66 |
66 |
67 |
67 |
68 class ResultSetTC(CubicWebTC): |
68 class ResultSetTC(CubicWebTC): |
326 rset = self.execute('Any B,U,L WHERE B bookmarked_by U?, U login L') |
326 rset = self.execute('Any B,U,L WHERE B bookmarked_by U?, U login L') |
327 entity, rtype = rset.related_entity(0, 2) |
327 entity, rtype = rset.related_entity(0, 2) |
328 self.assertEqual(entity, None) |
328 self.assertEqual(entity, None) |
329 self.assertEqual(rtype, None) |
329 self.assertEqual(rtype, None) |
330 |
330 |
331 def test_related_entity_union_subquery(self): |
331 def test_related_entity_union_subquery_1(self): |
332 e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path') |
332 e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path') |
333 rset = self.execute('Any X,N ORDERBY N WITH X,N BEING ' |
333 rset = self.execute('Any X,N ORDERBY N WITH X,N BEING ' |
334 '((Any X,N WHERE X is CWGroup, X name N)' |
334 '((Any X,N WHERE X is CWGroup, X name N)' |
335 ' UNION ' |
335 ' UNION ' |
336 ' (Any X,N WHERE X is Bookmark, X title N))') |
336 ' (Any X,N WHERE X is Bookmark, X title N))') |
337 entity, rtype = rset.related_entity(0, 1) |
337 entity, rtype = rset.related_entity(0, 1) |
338 self.assertEqual(entity.eid, e.eid) |
338 self.assertEqual(entity.eid, e.eid) |
339 self.assertEqual(rtype, 'title') |
339 self.assertEqual(rtype, 'title') |
|
340 self.assertEqual(entity.title, 'aaaa') |
340 entity, rtype = rset.related_entity(1, 1) |
341 entity, rtype = rset.related_entity(1, 1) |
341 self.assertEqual(entity.__regid__, 'CWGroup') |
342 self.assertEqual(entity.__regid__, 'CWGroup') |
342 self.assertEqual(rtype, 'name') |
343 self.assertEqual(rtype, 'name') |
343 # |
344 self.assertEqual(entity.name, 'guests') |
|
345 |
|
346 def test_related_entity_union_subquery_2(self): |
|
347 e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path') |
344 rset = self.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING ' |
348 rset = self.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING ' |
345 '((Any X,N WHERE X is CWGroup, X name N)' |
349 '((Any X,N WHERE X is CWGroup, X name N)' |
346 ' UNION ' |
350 ' UNION ' |
347 ' (Any X,N WHERE X is Bookmark, X title N))') |
351 ' (Any X,N WHERE X is Bookmark, X title N))') |
348 entity, rtype = rset.related_entity(0, 1) |
352 entity, rtype = rset.related_entity(0, 1) |
349 self.assertEqual(entity.eid, e.eid) |
353 self.assertEqual(entity.eid, e.eid) |
350 self.assertEqual(rtype, 'title') |
354 self.assertEqual(rtype, 'title') |
351 # |
355 self.assertEqual(entity.title, 'aaaa') |
|
356 |
|
357 def test_related_entity_union_subquery_3(self): |
|
358 e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path') |
352 rset = self.execute('Any X,N ORDERBY N WITH N,X BEING ' |
359 rset = self.execute('Any X,N ORDERBY N WITH N,X BEING ' |
353 '((Any N,X WHERE X is CWGroup, X name N)' |
360 '((Any N,X WHERE X is CWGroup, X name N)' |
354 ' UNION ' |
361 ' UNION ' |
355 ' (Any N,X WHERE X is Bookmark, X title N))') |
362 ' (Any N,X WHERE X is Bookmark, X title N))') |
356 entity, rtype = rset.related_entity(0, 1) |
363 entity, rtype = rset.related_entity(0, 1) |
357 self.assertEqual(entity.eid, e.eid) |
364 self.assertEqual(entity.eid, e.eid) |
358 self.assertEqual(rtype, 'title') |
365 self.assertEqual(rtype, 'title') |
|
366 self.assertEqual(entity.title, 'aaaa') |
|
367 |
|
368 def test_related_entity_union_subquery_4(self): |
|
369 e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path') |
|
370 rset = self.execute('Any X,X, N ORDERBY N WITH X,N BEING ' |
|
371 '((Any X,N WHERE X is CWGroup, X name N)' |
|
372 ' UNION ' |
|
373 ' (Any X,N WHERE X is Bookmark, X title N))') |
|
374 entity, rtype = rset.related_entity(0, 2) |
|
375 self.assertEqual(entity.eid, e.eid) |
|
376 self.assertEqual(rtype, 'title') |
|
377 self.assertEqual(entity.title, 'aaaa') |
359 |
378 |
360 def test_related_entity_trap_subquery(self): |
379 def test_related_entity_trap_subquery(self): |
361 req = self.request() |
380 req = self.request() |
362 req.create_entity('Bookmark', title=u'test bookmark', path=u'') |
381 req.create_entity('Bookmark', title=u'test bookmark', path=u'') |
363 self.execute('SET B bookmarked_by U WHERE U login "admin"') |
382 self.execute('SET B bookmarked_by U WHERE U login "admin"') |