1233 super(PostgresSQLGeneratorTC, self).setUp() |
1233 super(PostgresSQLGeneratorTC, self).setUp() |
1234 |
1234 |
1235 def _norm_sql(self, sql): |
1235 def _norm_sql(self, sql): |
1236 return sql.strip() |
1236 return sql.strip() |
1237 |
1237 |
1238 def _check(self, rql, sql, varmap=None, args=None): |
1238 def _check(self, rql, sql, args=None): |
1239 if args is None: |
1239 if args is None: |
1240 args = {'text': 'hip hop momo', 'eid': 12345} |
1240 args = {'text': 'hip hop momo', 'eid': 12345} |
1241 try: |
1241 try: |
1242 union = self._prepare(rql) |
1242 union = self._prepare(rql) |
1243 r, nargs, cbs = self.o.generate(union, args, |
1243 r, nargs, cbs = self.o.generate(union, args) |
1244 varmap=varmap) |
|
1245 args.update(nargs) |
1244 args.update(nargs) |
1246 self.assertMultiLineEqual(strip(r % args), self._norm_sql(sql)) |
1245 self.assertMultiLineEqual(strip(r % args), self._norm_sql(sql)) |
1247 except Exception as ex: |
1246 except Exception as ex: |
1248 if 'r' in locals(): |
1247 if 'r' in locals(): |
1249 try: |
1248 try: |
1300 |
1299 |
1301 self._check('Any X WHERE X in_basket B, B eid 12', |
1300 self._check('Any X WHERE X in_basket B, B eid 12', |
1302 '''SELECT rel_in_basket0.eid_from |
1301 '''SELECT rel_in_basket0.eid_from |
1303 FROM in_basket_relation AS rel_in_basket0 |
1302 FROM in_basket_relation AS rel_in_basket0 |
1304 WHERE rel_in_basket0.eid_to=12''') |
1303 WHERE rel_in_basket0.eid_to=12''') |
1305 |
|
1306 def test_varmap1(self): |
|
1307 self._check('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"', |
|
1308 '''SELECT T00.x, T00.l |
|
1309 FROM T00, cw_CWGroup AS _G, in_group_relation AS rel_in_group0 |
|
1310 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=_G.cw_eid AND _G.cw_name=users''', |
|
1311 varmap={'X': 'T00.x', 'X.login': 'T00.l'}) |
|
1312 |
|
1313 def test_varmap2(self): |
|
1314 self._check('Any X,L,GN WHERE X is CWUser, X in_group G, X login L, G name GN', |
|
1315 '''SELECT T00.x, T00.l, _G.cw_name |
|
1316 FROM T00, cw_CWGroup AS _G, in_group_relation AS rel_in_group0 |
|
1317 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=_G.cw_eid''', |
|
1318 varmap={'X': 'T00.x', 'X.login': 'T00.l'}) |
|
1319 |
|
1320 def test_varmap3(self): |
|
1321 self._check('Any %(x)s,D WHERE F data D, F is File', |
|
1322 'SELECT 728, _TDF0.C0\nFROM _TDF0', |
|
1323 args={'x': 728}, |
|
1324 varmap={'F.data': '_TDF0.C0', 'D': '_TDF0.C0'}) |
|
1325 |
1304 |
1326 def test_is_null_transform(self): |
1305 def test_is_null_transform(self): |
1327 union = self._prepare('Any X WHERE X login %(login)s') |
1306 union = self._prepare('Any X WHERE X login %(login)s') |
1328 r, args, cbs = self.o.generate(union, {'login': None}) |
1307 r, args, cbs = self.o.generate(union, {'login': None}) |
1329 self.assertMultiLineEqual((r % args).strip(), |
1308 self.assertMultiLineEqual((r % args).strip(), |
2229 def test_invariant_not_varying(self): |
2208 def test_invariant_not_varying(self): |
2230 rqlst = mock_object(defined_vars={}) |
2209 rqlst = mock_object(defined_vars={}) |
2231 rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True) |
2210 rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True) |
2232 rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False) |
2211 rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False) |
2233 self.assertEqual(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
2212 self.assertEqual(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
2234 {'A': 'FootGroup', 'B': 'FootTeam'}], {}, None), |
2213 {'A': 'FootGroup', 'B': 'FootTeam'}], None), |
2235 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
2214 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
2236 {'A': 'FootGroup', 'B': 'FootTeam'}], |
2215 {'A': 'FootGroup', 'B': 'FootTeam'}], |
2237 {}, set('B')) |
2216 {}, set('B')) |
2238 ) |
2217 ) |
2239 |
2218 |
2240 def test_invariant_varying(self): |
2219 def test_invariant_varying(self): |
2241 rqlst = mock_object(defined_vars={}) |
2220 rqlst = mock_object(defined_vars={}) |
2242 rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True) |
2221 rqlst.defined_vars['A'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=True) |
2243 rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False) |
2222 rqlst.defined_vars['B'] = mock_object(scope=rqlst, stinfo={}, _q_invariant=False) |
2244 self.assertEqual(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
2223 self.assertEqual(remove_unused_solutions(rqlst, [{'A': 'RugbyGroup', 'B': 'RugbyTeam'}, |
2245 {'A': 'FootGroup', 'B': 'RugbyTeam'}], {}, None), |
2224 {'A': 'FootGroup', 'B': 'RugbyTeam'}], None), |
2246 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set()) |
2225 ([{'A': 'RugbyGroup', 'B': 'RugbyTeam'}], {}, set()) |
2247 ) |
2226 ) |
2248 |
2227 |
2249 |
2228 |
2250 if __name__ == '__main__': |
2229 if __name__ == '__main__': |