# HG changeset patch
# User Sylvain Thénault <sylvain.thenault@logilab.fr>
# Date 1270641097 -7200
#      Wed Apr 07 13:51:37 2010 +0200
# Node ID 9f9c98a219a538d77f718e3e45108611bc7e0ede
# Parent  60255eecf96cb50faad89082414f17b4b4323ad5
#759035: Automate addition of eid cachekey in RQL analysis

diff --git a/__init__.py b/__init__.py
--- a/__init__.py
+++ b/__init__.py
@@ -93,8 +93,8 @@
         """
         self._analyser_lock.acquire()
         try:
-            self._analyser.visit(rqlst, uid_func_mapping, kwargs,
-                                 debug)
+            return self._analyser.visit(rqlst, uid_func_mapping, kwargs,
+                                        debug)
         finally:
             self._analyser_lock.release()
 
diff --git a/analyze.py b/analyze.py
--- a/analyze.py
+++ b/analyze.py
@@ -340,9 +340,10 @@
             assert cst.type
             if cst.type == 'Substitute':
                 eid = self.kwargs[cst.value]
+                self.deambiguifiers.add(cst.value)
             else:
                 eid = cst.value
-            cst.uidtype = self.uid_func(eid)
+            cst.uidtype = self.uid_func(cst.eval(self.kwargs))
             types.add(cst.uidtype)
         return types
 
@@ -373,10 +374,12 @@
             self.uid_func_mapping = uid_func_mapping
             self.uid_func = uid_func_mapping.values()[0]
         self.kwargs = kwargs
+        self.deambiguifiers = set()
         self._visit(node)
         if uid_func_mapping is not None:
             self.uid_func_mapping = None
             self.uid_func = None
+        return self.deambiguifiers
 
     def visit_union(self, node):
         for select in node.children: