Bug 9537


6.7.2, 6.7.1, 6.7, 6.6.5, 6.6.4,,, 6.6.3, 6.6.2, 6.6.1, 6.6, 6.5.8,, 6.5.7, 6.5.6, 6.5.5, 6.5.4, 6.5.2, 6.5.1, 6.5, 6.3.1, 6.3, 6.2.x, 6.2, 6.1.6, 6.1.5, 6.1.x, 6.0.x,, 5.1.5, 5.1.x, 5.0.x, 4.x


Reject queries along path containing * return wrong result

When the message reject: is along a path containing a set-valued
instance variable, such as reject: {:i|i.a.*.b=5}, the result
returned is the set difference between the receiver and a select:
using the same predicate.  An element in the collection is not
returned if any of the elements in the nested nonsequenceable
collection (represented by *) satisfies the rejection predicate.


The workaround involves two steps.  First, perform a select along
the path using the "not" of the operator in the rejection predicate.
Then, to the result of that select add all elements in the
collection that have a nil anywhere along the path of the reject.

Last updated: