Jeffrey Lichtman wrote:

4 - Make sure predicates that are pushed down into subqueries of a UnionNode are correctly "pulled" back up (if they are unscoped) or discarded (if they are scoped) for every permutation seen during optimization.

Predicates may have to be copied when pushed into the children of a UnionNode. When the predicates are pulled back up out of the UnionNode, all but one copy of each will have to be discarded.

Yes. The way I do this now to keep a pointer to the original, unscoped predicate and push newly created, "scoped" predicates (one for each child) down to the children. When it comes time to pull, I pull the unscoped predicate (which serves as the "all but one copy" that you mentioned) and discard the scoped ones.

Please watch out for whether this causes performance problems due to object creation and garbage collection. If such problems exist, it may be possible to cache copies of predicates for re-use.

Good point, thanks for mentioning this. The code right will rescope the predicate for each child for every permutation, which as you said could cause performance problems with object creation. I will look at this to see if I can cache the scoped predicates for re-use, so that we don't end up re-scoping the same predicate for the same children for every permutation.

Army

Reply via email to