From: Ramsey L. G. <rg...@ma...> - 2009-08-13 02:11:45
|
On Jul 28, 2009, at 12:09 PM, Chuck Hill wrote: > > On Jul 28, 2009, at 5:29 AM, Ramsey Lee Gurley wrote: > >> Hi all, >> >> The docs for ERXToManyQualifier seem to indicate that the >> evaluation of the qualifier should act as a contains all, or a >> contains at least x number of objects in an array, but the behavior >> of in memory filtering appears to act as a contains any. Looking >> at the source for evaluateWithObject confirms this, and I'm >> wondering if it is the docs that are misleading or the behavior of >> the method? > > > Not sure if this answers your question, but the in-memory behavior > should match the database one. > > Chuck I'm not certain it can *exactly* ... A to-many relationship would not have duplicates, right? I'm wondering how to handle duplicates on in memory arrays. For instance, does (1, 1, 2, 3, 4) match (1, 2, 2, 3, 4) ? The code below would return true and disregard duplicates (er.. it should ... I haven't tested it). Perhaps it would be better to match duplicate counts? Or is it better to simply disregard them? public boolean evaluateWithObject(Object object) { boolean result = false; if ( ( object != null ) && ( ( object instanceof NSKeyValueCoding ) == true ) ) { Object obj = ((NSKeyValueCoding)object).valueForKey(this.key()); if (obj instanceof NSArray) { NSArray objArray = (NSArray)obj; int objArrayCount = objArray.count(); if (objArrayCount > 0) { if(_minCount == 0) { result = ERXArrayUtilities.arrayContainsArray(objArray, elements()); } else if(objArrayCount < _minCount || elements().count() < _minCount) { result = false; } else { int i = 0; Enumeration<?> e = elements().objectEnumerator(); while(e.hasMoreElements()) { Object o = e.nextElement(); if(objArray.containsObject(o)) { if(++i >= _minCount) { result = true; break; } } } } } } } return result; } |