server/test/unittest_rql2sql.py
branchstable
changeset 6340 470d8e828fda
parent 6297 23c1e50ff97b
child 6493 019ab5eb37ea
equal deleted inserted replaced
6339:bdc3dc94d744 6340:470d8e828fda
  1094         def var_sols(var):
  1094         def var_sols(var):
  1095             s = set()
  1095             s = set()
  1096             for sol in delete.solutions:
  1096             for sol in delete.solutions:
  1097                 s.add(sol.get(var))
  1097                 s.add(sol.get(var))
  1098             return s
  1098             return s
  1099         self.assertEquals(var_sols('FROM_ENTITYOBJECT'), set(('CWAttribute', 'CWRelation')))
  1099         self.assertEqual(var_sols('FROM_ENTITYOBJECT'), set(('CWAttribute', 'CWRelation')))
  1100         self.assertEquals(var_sols('FROM_ENTITYOBJECT'), delete.defined_vars['FROM_ENTITYOBJECT'].stinfo['possibletypes'])
  1100         self.assertEqual(var_sols('FROM_ENTITYOBJECT'), delete.defined_vars['FROM_ENTITYOBJECT'].stinfo['possibletypes'])
  1101         self.assertEquals(var_sols('ISOBJECT'),
  1101         self.assertEqual(var_sols('ISOBJECT'),
  1102                           set(x.type for x in self.schema.entities() if not x.final))
  1102                           set(x.type for x in self.schema.entities() if not x.final))
  1103         self.assertEquals(var_sols('ISOBJECT'), delete.defined_vars['ISOBJECT'].stinfo['possibletypes'])
  1103         self.assertEqual(var_sols('ISOBJECT'), delete.defined_vars['ISOBJECT'].stinfo['possibletypes'])
  1104 
  1104 
       
  1105 
       
  1106 def strip(text):
       
  1107     return '\n'.join(l.strip() for l in text.strip().splitlines())
  1105 
  1108 
  1106 class PostgresSQLGeneratorTC(RQLGeneratorTC):
  1109 class PostgresSQLGeneratorTC(RQLGeneratorTC):
  1107     schema = schema
  1110     schema = schema
  1108     backend = 'postgres'
  1111     backend = 'postgres'
  1109 
  1112 
  1116         try:
  1119         try:
  1117             union = self._prepare(rql)
  1120             union = self._prepare(rql)
  1118             r, nargs, cbs = self.o.generate(union, args,
  1121             r, nargs, cbs = self.o.generate(union, args,
  1119                                             varmap=varmap)
  1122                                             varmap=varmap)
  1120             args.update(nargs)
  1123             args.update(nargs)
  1121             self.assertLinesEquals((r % args).strip(), self._norm_sql(sql), striplines=True)
  1124             self.assertMultiLineEqual(strip(r % args), self._norm_sql(sql))
  1122         except Exception, ex:
  1125         except Exception, ex:
  1123             if 'r' in locals():
  1126             if 'r' in locals():
  1124                 try:
  1127                 try:
  1125                     print (r%args).strip()
  1128                     print (r%args).strip()
  1126                 except KeyError:
  1129                 except KeyError:
  1198                     varmap={'F.data': '_TDF0.C0', 'D': '_TDF0.C0'})
  1201                     varmap={'F.data': '_TDF0.C0', 'D': '_TDF0.C0'})
  1199 
  1202 
  1200     def test_is_null_transform(self):
  1203     def test_is_null_transform(self):
  1201         union = self._prepare('Any X WHERE X login %(login)s')
  1204         union = self._prepare('Any X WHERE X login %(login)s')
  1202         r, args, cbs = self.o.generate(union, {'login': None})
  1205         r, args, cbs = self.o.generate(union, {'login': None})
  1203         self.assertLinesEquals((r % args).strip(),
  1206         self.assertMultiLineEqual((r % args).strip(),
  1204                                '''SELECT _X.cw_eid
  1207                                '''SELECT _X.cw_eid
  1205 FROM cw_CWUser AS _X
  1208 FROM cw_CWUser AS _X
  1206 WHERE _X.cw_login IS NULL''')
  1209 WHERE _X.cw_login IS NULL''')
  1207 
  1210 
  1208 
  1211 
  1452         cb = lambda x,y: None
  1455         cb = lambda x,y: None
  1453         self.o.attr_map['Affaire.ref'] = (cb, True)
  1456         self.o.attr_map['Affaire.ref'] = (cb, True)
  1454         try:
  1457         try:
  1455             union = self._prepare('Any R WHERE X ref R')
  1458             union = self._prepare('Any R WHERE X ref R')
  1456             r, nargs, cbs = self.o.generate(union, args={})
  1459             r, nargs, cbs = self.o.generate(union, args={})
  1457             self.assertLinesEquals(r.strip(), 'SELECT _X.cw_ref\nFROM cw_Affaire AS _X')
  1460             self.assertMultiLineEqual(r.strip(), 'SELECT _X.cw_ref\nFROM cw_Affaire AS _X')
  1458             self.assertEquals(cbs, {0: [cb]})
  1461             self.assertEqual(cbs, {0: [cb]})
  1459         finally:
  1462         finally:
  1460             self.o.attr_map.clear()
  1463             self.o.attr_map.clear()
  1461 
  1464 
  1462 
  1465 
  1463     def test_concat_string(self):
  1466     def test_concat_string(self):
  1710 class removeUnsusedSolutionsTC(TestCase):
  1713 class removeUnsusedSolutionsTC(TestCase):
  1711     def test_invariant_not_varying(self):
  1714     def test_invariant_not_varying(self):
  1712         rqlst = mock_object(defined_vars={})
  1715         rqlst = mock_object(defined_vars={})
  1713         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)
  1716         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)
  1714         rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False)
  1717         rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False)
  1715         self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1718         self.assertEqual(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1716                                                           {'A': 'FootGroup', 'B': 'FootTeam'}], {}, None),
  1719                                                           {'A': 'FootGroup', 'B': 'FootTeam'}], {}, None),
  1717                           ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1720                           ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1718                             {'A': 'FootGroup', 'B': 'FootTeam'}],
  1721                             {'A': 'FootGroup', 'B': 'FootTeam'}],
  1719                            {}, set('B'))
  1722                            {}, set('B'))
  1720                           )
  1723                           )
  1721 
  1724 
  1722     def test_invariant_varying(self):
  1725     def test_invariant_varying(self):
  1723         rqlst = mock_object(defined_vars={})
  1726         rqlst = mock_object(defined_vars={})
  1724         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)
  1727         rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True)
  1725         rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False)
  1728         rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False)
  1726         self.assertEquals(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1729         self.assertEqual(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'},
  1727                                                           {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None),
  1730                                                           {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None),
  1728                           ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set())
  1731                           ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set())
  1729                           )
  1732                           )
  1730 
  1733 
  1731 
  1734