284 # this is a ConnectionWrapper instance |
284 # this is a ConnectionWrapper instance |
285 msg = session._("can't connect to source %s, some data may be missing") |
285 msg = session._("can't connect to source %s, some data may be missing") |
286 session.set_shared_data('sources_error', msg % self.uri) |
286 session.set_shared_data('sources_error', msg % self.uri) |
287 return [] |
287 return [] |
288 try: |
288 try: |
289 rql, cachekey = RQL2RQL(self).generate(session, union, args) |
289 rql = RQL2RQL(self).generate(session, union, args) |
290 except UnknownEid, ex: |
290 except UnknownEid, ex: |
291 if server.DEBUG: |
291 if server.DEBUG: |
292 print ' unknown eid', ex, 'no results' |
292 print ' unknown eid', ex, 'no results' |
293 return [] |
293 return [] |
294 if server.DEBUG & server.DBG_RQL: |
294 if server.DEBUG & server.DBG_RQL: |
295 print ' translated rql', rql |
295 print ' translated rql', rql |
296 try: |
296 try: |
297 rset = cu.execute(rql, args, cachekey) |
297 rset = cu.execute(rql, args) |
298 except Exception, ex: |
298 except Exception, ex: |
299 self.exception(str(ex)) |
299 self.exception(str(ex)) |
300 msg = session._("error while querying source %s, some data may be missing") |
300 msg = session._("error while querying source %s, some data may be missing") |
301 session.set_shared_data('sources_error', msg % self.uri) |
301 session.set_shared_data('sources_error', msg % self.uri) |
302 return [] |
302 return [] |
394 return res |
394 return res |
395 |
395 |
396 def generate(self, session, rqlst, args): |
396 def generate(self, session, rqlst, args): |
397 self._session = session |
397 self._session = session |
398 self.kwargs = args |
398 self.kwargs = args |
399 self.cachekey = [] |
|
400 self.need_translation = False |
399 self.need_translation = False |
401 return self.visit_union(rqlst), self.cachekey |
400 return self.visit_union(rqlst) |
402 |
401 |
403 def visit_union(self, node): |
402 def visit_union(self, node): |
404 s = self._accept_children(node) |
403 s = self._accept_children(node) |
405 if len(s) > 1: |
404 if len(s) > 1: |
406 return ' UNION '.join('(%s)' % q for q in s) |
405 return ' UNION '.join('(%s)' % q for q in s) |
545 if node.type == 'Substitute': |
544 if node.type == 'Substitute': |
546 key = node.value |
545 key = node.value |
547 # ensure we have not yet translated the value... |
546 # ensure we have not yet translated the value... |
548 if not key in self._const_var: |
547 if not key in self._const_var: |
549 self.kwargs[key] = self.eid2extid(self.kwargs[key]) |
548 self.kwargs[key] = self.eid2extid(self.kwargs[key]) |
550 self.cachekey.append(key) |
|
551 self._const_var[key] = None |
549 self._const_var[key] = None |
552 return node.as_string() |
550 return node.as_string() |
553 |
551 |
554 def visit_variableref(self, node): |
552 def visit_variableref(self, node): |
555 """get the sql name for a variable reference""" |
553 """get the sql name for a variable reference""" |