server/sources/pyrorql.py
changeset 5174 78438ad513ca
parent 4913 083b4d454192
child 5323 329b4f6d18b4
equal deleted inserted replaced
5173:73760bbb66bd 5174:78438ad513ca
   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"""