8 |
8 |
9 """unit tests for module cubicweb.server.sources.rql2sql""" |
9 """unit tests for module cubicweb.server.sources.rql2sql""" |
10 |
10 |
11 import sys |
11 import sys |
12 |
12 |
13 from logilab.common.testlib import TestCase, unittest_main |
13 from logilab.common.testlib import TestCase, unittest_main, mock_object |
14 |
14 |
15 from rql import BadRQLQuery |
15 from rql import BadRQLQuery |
16 from indexer import get_indexer |
16 from indexer import get_indexer |
17 |
17 |
18 #from cubicweb.server.sources.native import remove_unused_solutions |
18 #from cubicweb.server.sources.native import remove_unused_solutions |
19 from cubicweb.server.sources.rql2sql import SQLGenerator |
19 from cubicweb.server.sources.rql2sql import SQLGenerator, remove_unused_solutions |
20 |
20 |
21 from rql.utils import register_function, FunctionDescr |
21 from rql.utils import register_function, FunctionDescr |
22 # add a dumb registered procedure |
22 # add a dumb registered procedure |
23 class stockproc(FunctionDescr): |
23 class stockproc(FunctionDescr): |
24 supported_backends = ('postgres', 'sqlite', 'mysql') |
24 supported_backends = ('postgres', 'sqlite', 'mysql') |
1601 '''SELECT COUNT(1) |
1601 '''SELECT COUNT(1) |
1602 FROM (SELECT 1) AS _T |
1602 FROM (SELECT 1) AS _T |
1603 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS _P WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS _P WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=1)''') |
1603 WHERE EXISTS(SELECT 1 FROM owned_by_relation AS rel_owned_by0, cw_Affaire AS _P WHERE rel_owned_by0.eid_from=_P.cw_eid AND rel_owned_by0.eid_to=1 UNION SELECT 1 FROM owned_by_relation AS rel_owned_by1, cw_Note AS _P WHERE rel_owned_by1.eid_from=_P.cw_eid AND rel_owned_by1.eid_to=1)''') |
1604 |
1604 |
1605 |
1605 |
1606 |
1606 class removeUnsusedSolutionsTC(TestCase): |
|
1607 def test_invariant_not_varying(self): |
|
1608 rqlst = mock_object(defined_vars={}) |
|
1609 rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={'optrelations':False}, _q_invariant=True) |
|
1610 rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={'optrelations':False}, _q_invariant=False) |
|
1611 self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
|
1612 {'A': 'FootGroup', 'B': 'FootTeam'}], {}, None), |
|
1613 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
|
1614 {'A': 'FootGroup', 'B': 'FootTeam'}], |
|
1615 {}, set('B')) |
|
1616 ) |
|
1617 |
|
1618 def test_invariant_varying(self): |
|
1619 rqlst = mock_object(defined_vars={}) |
|
1620 rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={'optrelations':False}, _q_invariant=True) |
|
1621 rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={'optrelations':False}, _q_invariant=False) |
|
1622 self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
|
1623 {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None), |
|
1624 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set()) |
|
1625 ) |
1607 |
1626 |
1608 if __name__ == '__main__': |
1627 if __name__ == '__main__': |
1609 unittest_main() |
1628 unittest_main() |