rqlrewrite.py
branchstable
changeset 7555 c3bf459268d7
parent 7535 d5725a89dac9
child 7843 3b51806da60b
--- a/rqlrewrite.py	Wed Jun 22 18:24:56 2011 +0200
+++ b/rqlrewrite.py	Fri Jun 24 14:02:29 2011 +0200
@@ -467,6 +467,7 @@
         original query, return that relation node
         """
         rschema = self.schema.rschema(sniprel.r_type)
+        stmt = self.current_statement()
         for vi in self.varinfos:
             try:
                 if target == 'object':
@@ -482,6 +483,9 @@
             except KeyError:
                 # may be raised by vi['xhs_rels'][sniprel.r_type]
                 return None
+            # don't share if relation's statement is not the current statement
+            if orel.stmt is not stmt:
+                return None
             # can't share neged relation or relations with different outer join
             if (orel.neged(strict=True) or sniprel.neged(strict=True)
                 or (orel.optional and orel.optional != sniprel.optional)):
@@ -498,9 +502,10 @@
     def _use_orig_term(self, snippet_varname, term):
         key = (self.current_expr, self.varmap, snippet_varname)
         if key in self.rewritten:
-            insertedvar = self.select.defined_vars.pop(self.rewritten[key])
+            stmt = self.current_statement()
+            insertedvar = stmt.defined_vars.pop(self.rewritten[key])
             for inserted_vref in insertedvar.references():
-                inserted_vref.parent.replace(inserted_vref, term.copy(self.select))
+                inserted_vref.parent.replace(inserted_vref, term.copy(stmt))
         self.rewritten[key] = term.name
 
     def _get_varname_or_term(self, vname):