1136 self.o = SQLGenerator(schema, dbms_helper) |
1136 self.o = SQLGenerator(schema, dbms_helper) |
1137 |
1137 |
1138 def _norm_sql(self, sql): |
1138 def _norm_sql(self, sql): |
1139 return sql.strip() |
1139 return sql.strip() |
1140 |
1140 |
1141 def _check(self, rql, sql, varmap=None): |
1141 def _check(self, rql, sql, varmap=None, args=None): |
|
1142 if args is None: |
|
1143 args = {'text': 'hip hop momo'} |
1142 try: |
1144 try: |
1143 union = self._prepare(rql) |
1145 union = self._prepare(rql) |
1144 r, args = self.o.generate(union, {'text': 'hip hop momo'}, |
1146 r, nargs = self.o.generate(union, args, |
1145 varmap=varmap) |
1147 varmap=varmap) |
|
1148 args.update(nargs) |
1146 self.assertLinesEquals((r % args).strip(), self._norm_sql(sql)) |
1149 self.assertLinesEquals((r % args).strip(), self._norm_sql(sql)) |
1147 except Exception, ex: |
1150 except Exception, ex: |
1148 print rql |
|
1149 if 'r' in locals(): |
1151 if 'r' in locals(): |
1150 print (r%args).strip() |
1152 try: |
|
1153 print (r%args).strip() |
|
1154 except KeyError: |
|
1155 print 'strange, missing substitution' |
|
1156 print r, nargs |
1151 print '!=' |
1157 print '!=' |
1152 print sql.strip() |
1158 print sql.strip() |
1153 raise |
1159 raise |
1154 |
1160 |
1155 def _parse(self, rqls): |
1161 def _parse(self, rqls): |
1205 self._check('Any X WHERE X in_basket B, B eid 12', |
1211 self._check('Any X WHERE X in_basket B, B eid 12', |
1206 '''SELECT rel_in_basket0.eid_from |
1212 '''SELECT rel_in_basket0.eid_from |
1207 FROM in_basket_relation AS rel_in_basket0 |
1213 FROM in_basket_relation AS rel_in_basket0 |
1208 WHERE rel_in_basket0.eid_to=12''') |
1214 WHERE rel_in_basket0.eid_to=12''') |
1209 |
1215 |
1210 def test_varmap(self): |
1216 def test_varmap1(self): |
1211 self._check('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"', |
1217 self._check('Any X,L WHERE X is CWUser, X in_group G, X login L, G name "users"', |
1212 '''SELECT T00.x, T00.l |
1218 '''SELECT T00.x, T00.l |
1213 FROM T00, cw_CWGroup AS G, in_group_relation AS rel_in_group0 |
1219 FROM T00, cw_CWGroup AS G, in_group_relation AS rel_in_group0 |
1214 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=G.cw_eid AND G.cw_name=users''', |
1220 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=G.cw_eid AND G.cw_name=users''', |
1215 varmap={'X': 'T00.x', 'X.login': 'T00.l'}) |
1221 varmap={'X': 'T00.x', 'X.login': 'T00.l'}) |
|
1222 |
|
1223 def test_varmap2(self): |
1216 self._check('Any X,L,GN WHERE X is CWUser, X in_group G, X login L, G name GN', |
1224 self._check('Any X,L,GN WHERE X is CWUser, X in_group G, X login L, G name GN', |
1217 '''SELECT T00.x, T00.l, G.cw_name |
1225 '''SELECT T00.x, T00.l, G.cw_name |
1218 FROM T00, cw_CWGroup AS G, in_group_relation AS rel_in_group0 |
1226 FROM T00, cw_CWGroup AS G, in_group_relation AS rel_in_group0 |
1219 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=G.cw_eid''', |
1227 WHERE rel_in_group0.eid_from=T00.x AND rel_in_group0.eid_to=G.cw_eid''', |
1220 varmap={'X': 'T00.x', 'X.login': 'T00.l'}) |
1228 varmap={'X': 'T00.x', 'X.login': 'T00.l'}) |
|
1229 |
|
1230 def test_varmap3(self): |
|
1231 self.set_debug(True) |
|
1232 self._check('Any %(x)s,D WHERE F data D, F is File', |
|
1233 'SELECT 728, _TDF0.C0\nFROM _TDF0', |
|
1234 args={'x': 728}, |
|
1235 varmap={'F.data': '_TDF0.C0', 'D': '_TDF0.C0'}) |
1221 |
1236 |
1222 def test_is_null_transform(self): |
1237 def test_is_null_transform(self): |
1223 union = self._prepare('Any X WHERE X login %(login)s') |
1238 union = self._prepare('Any X WHERE X login %(login)s') |
1224 r, args = self.o.generate(union, {'login': None}) |
1239 r, args = self.o.generate(union, {'login': None}) |
1225 self.assertLinesEquals((r % args).strip(), |
1240 self.assertLinesEquals((r % args).strip(), |