server/test/unittest_rql2sql.py
branchstable
changeset 2071 6ebada01a4a1
parent 1977 606923dff11b
child 2199 bd0a0f219751
equal deleted inserted replaced
2070:d98f5be5e371 2071:6ebada01a4a1
  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(),