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 |