server/test/unittest_rql2sql.py
branchstable
changeset 3852 03121ca1f85e
parent 3815 50b87f759b5d
child 3890 d7a270f50f54
child 3987 f85ef29f6214
equal deleted inserted replaced
3850:75023c2c34ee 3852:03121ca1f85e
     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()