From: Mike S. <ms...@us...> - 2006-12-03 10:59:37
|
Update of /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv8462/Sources/er/extensions Modified Files: ERXInOrQualifierSupport.java Log Message: support nested or statements + short circuit visitKeyValue Index: ERXInOrQualifierSupport.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXInOrQualifierSupport.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ERXInOrQualifierSupport.java 3 Dec 2006 10:46:52 -0000 1.2 --- ERXInOrQualifierSupport.java 3 Dec 2006 10:59:34 -0000 1.3 *************** *** 15,27 **** /** ! * ERXInOrQualifierSupport replaces the stock _OrQualifierSupport and turns ! * qualifying EOOrQualifiers into IN-set SQL statements instead of enormous ! * strings of OR's. * <p> ! * To register this as the generation support for EOOrQualifiers, register ! * with: * <p> * EOQualifierSQLGeneration.Support.setSupportForClass(new ERXInOrQualifierSupport(), EOOrQualifier._CLASS); ! * * @author mschrag */ --- 15,25 ---- /** ! * ERXInOrQualifierSupport replaces the stock _OrQualifierSupport and turns qualifying EOOrQualifiers into IN-set SQL ! * statements instead of enormous strings of OR's. * <p> ! * To register this as the generation support for EOOrQualifiers, register with: * <p> * EOQualifierSQLGeneration.Support.setSupportForClass(new ERXInOrQualifierSupport(), EOOrQualifier._CLASS); ! * * @author mschrag */ *************** *** 51,58 **** private String _key; private NSMutableArray _values; - private boolean _firstVisit; public OrIsInVisitor() { - _firstVisit = true; _canBeRepresentedAsInSet = true; _values = new NSMutableArray(); --- 49,54 ---- *************** *** 72,89 **** public void visitKeyValueQualifier(EOKeyValueQualifier qualifier) { ! if (qualifier.selector() == EOQualifier.QualifierOperatorEqual) { ! _firstVisit = false; ! String key = qualifier.key(); ! if (_key != null && !_key.equals(key)) { ! _canBeRepresentedAsInSet = false; } else { ! _key = key; ! _values.addObject(qualifier.value()); } } - else { - _canBeRepresentedAsInSet = false; - } } --- 68,86 ---- public void visitKeyValueQualifier(EOKeyValueQualifier qualifier) { ! if (_canBeRepresentedAsInSet) { ! if (qualifier.selector() == EOQualifier.QualifierOperatorEqual) { ! String key = qualifier.key(); ! if (_key != null && !_key.equals(key)) { ! _canBeRepresentedAsInSet = false; ! } ! else { ! _key = key; ! _values.addObject(qualifier.value()); ! } } else { ! _canBeRepresentedAsInSet = false; } } } *************** *** 101,110 **** public void visitOrQualifier(EOOrQualifier qualifier) { ! if (_firstVisit) { ! _firstVisit = false; ! } ! else { ! _canBeRepresentedAsInSet = false; ! } } --- 98,104 ---- public void visitOrQualifier(EOOrQualifier qualifier) { ! // MS: nested or statements are ok as long as it meets all ! // the same criteria, so: ! // (a = 5 or (a = 6 or a = 7) or a = 8) is a in (5,6,7,8) } |