13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
14 # details. |
14 # details. |
15 # |
15 # |
16 # You should have received a copy of the GNU Lesser General Public License along |
16 # You should have received a copy of the GNU Lesser General Public License along |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 """ |
|
19 |
|
20 """ |
|
21 |
|
22 """unit tests for module cubicweb.server.sources.rql2sql""" |
18 """unit tests for module cubicweb.server.sources.rql2sql""" |
23 |
19 |
24 import sys |
20 import sys |
25 |
21 |
26 from logilab.common.testlib import TestCase, unittest_main, mock_object |
22 from logilab.common.testlib import TestCase, unittest_main, mock_object |
427 SELECT _X.cw_eid AS C0, _X.cw_name AS C1 |
423 SELECT _X.cw_eid AS C0, _X.cw_name AS C1 |
428 FROM cw_Tag AS _X) AS T1 |
424 FROM cw_Tag AS _X) AS T1 |
429 GROUP BY T1.C1'''), |
425 GROUP BY T1.C1'''), |
430 |
426 |
431 ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X data_name N, X data D, X data_format DF;', |
427 ('Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 1, N, DF WHERE X data_name N, X data D, X data_format DF;', |
432 '''SELECT (MAX(T1.C1) + MIN(LENGTH(T1.C0))), T1.C2 FROM (SELECT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3 |
428 '''SELECT (MAX(_X.cw_eid) + MIN(LENGTH(_X.cw_data))), _X.cw_data_name |
433 FROM cw_File AS _X |
429 FROM cw_File AS _X |
434 UNION ALL |
430 GROUP BY _X.cw_data_name,_X.cw_data_format |
435 SELECT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3 |
431 ORDER BY 1,2,_X.cw_data_format'''), |
436 FROM cw_Image AS _X) AS T1 |
|
437 GROUP BY T1.C2,T1.C3 |
|
438 ORDER BY 1,2,T1.C3'''), |
|
439 |
432 |
440 ('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R', |
433 ('DISTINCT Any S ORDERBY R WHERE A is Affaire, A sujet S, A ref R', |
441 '''SELECT T1.C0 FROM (SELECT DISTINCT _A.cw_sujet AS C0, _A.cw_ref AS C1 |
434 '''SELECT T1.C0 FROM (SELECT DISTINCT _A.cw_sujet AS C0, _A.cw_ref AS C1 |
442 FROM cw_Affaire AS _A |
435 FROM cw_Affaire AS _A |
443 ORDER BY 2) AS T1'''), |
436 ORDER BY 2) AS T1'''), |
444 |
437 |
445 ('DISTINCT Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 2, DF WHERE X data_name N, X data D, X data_format DF;', |
438 ('DISTINCT Any MAX(X)+MIN(LENGTH(D)), N GROUPBY N ORDERBY 2, DF WHERE X data_name N, X data D, X data_format DF;', |
446 '''SELECT T1.C0,T1.C1 FROM (SELECT DISTINCT (MAX(T1.C1) + MIN(LENGTH(T1.C0))) AS C0, T1.C2 AS C1, T1.C3 AS C2 FROM (SELECT DISTINCT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3 |
439 '''SELECT T1.C0,T1.C1 FROM (SELECT DISTINCT (MAX(_X.cw_eid) + MIN(LENGTH(_X.cw_data))) AS C0, _X.cw_data_name AS C1, _X.cw_data_format AS C2 |
447 FROM cw_File AS _X |
440 FROM cw_File AS _X |
448 UNION |
441 GROUP BY _X.cw_data_name,_X.cw_data_format |
449 SELECT DISTINCT _X.cw_data AS C0, _X.cw_eid AS C1, _X.cw_data_name AS C2, _X.cw_data_format AS C3 |
|
450 FROM cw_Image AS _X) AS T1 |
|
451 GROUP BY T1.C2,T1.C3 |
|
452 ORDER BY 2,3) AS T1 |
442 ORDER BY 2,3) AS T1 |
453 '''), |
443 '''), |
454 |
444 |
455 # ambiguity in EXISTS() -> should union the sub-query |
445 # ambiguity in EXISTS() -> should union the sub-query |
456 ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))', |
446 ('Any T WHERE T is Tag, NOT T name in ("t1", "t2"), EXISTS(T tags X, X is IN (CWUser, CWGroup))', |
709 |
699 |
710 ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser', |
700 ('Any S WHERE NOT(X in_state S, S name "somename"), X is CWUser', |
711 '''SELECT _S.cw_eid |
701 '''SELECT _S.cw_eid |
712 FROM cw_State AS _S |
702 FROM cw_State AS _S |
713 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename)'''), |
703 WHERE NOT EXISTS(SELECT 1 FROM cw_CWUser AS _X WHERE _X.cw_in_state=_S.cw_eid AND _S.cw_name=somename)'''), |
714 |
704 |
715 # XXXFIXME fail |
705 # XXXFIXME fail |
716 # ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute', |
706 # ('Any X,RT WHERE X relation_type RT?, NOT X is CWAttribute', |
717 # '''SELECT _X.cw_eid, _X.cw_relation_type |
707 # '''SELECT _X.cw_eid, _X.cw_relation_type |
718 # FROM cw_CWRelation AS _X'''), |
708 # FROM cw_CWRelation AS _X'''), |
719 ] |
709 ] |
1642 self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
1632 self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
1643 {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None), |
1633 {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None), |
1644 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set()) |
1634 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set()) |
1645 ) |
1635 ) |
1646 |
1636 |
|
1637 |
1647 if __name__ == '__main__': |
1638 if __name__ == '__main__': |
1648 unittest_main() |
1639 unittest_main() |