diff -r 0aae5216f99e -r 3e133b29a1a4 rqlrewrite.py --- a/rqlrewrite.py Tue May 25 12:21:17 2010 +0200 +++ b/rqlrewrite.py Wed May 26 10:28:48 2010 +0200 @@ -155,7 +155,7 @@ snippets: (varmap, list of rql expression) with varmap a *tuple* (select var, snippet var) """ - self.select = self.insert_scope = select + self.select = select self.solutions = solutions self.kwargs = kwargs self.u_varname = None @@ -163,6 +163,7 @@ self.exists_snippet = {} self.pending_keys = [] self.existingvars = existingvars + self._insert_scope = None # we have to annotate the rqlst before inserting snippets, even though # we'll have to redo it latter self.annotate(select) @@ -249,15 +250,19 @@ def _insert_snippet(self, varmap, parent, new): if new is not None: + if self._insert_scope is None: + insert_scope = self.varinfo.get('stinfo', {}).get('scope', self.select) + else: + insert_scope = self._insert_scope if self.varinfo.get('stinfo', {}).get('optrelations'): assert parent is None - self.insert_scope = self.snippet_subquery(varmap, new) + self._insert_scope = self.snippet_subquery(varmap, new) self.insert_pending() - self.insert_scope = self.select + self._insert_scope = None return new = n.Exists(new) if parent is None: - self.insert_scope.add_restriction(new) + insert_scope.add_restriction(new) else: grandpa = parent.parent or_ = n.Or(parent, new) @@ -274,9 +279,9 @@ self._cleanup_inserted(new) raise else: - self.insert_scope = new + self._insert_scope = new self.insert_pending() - self.insert_scope = self.select + self._insert_scope = None return new self.insert_pending()