diff --git a/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXPrefixQualifierTraversal.java b/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXPrefixQualifierTraversal.java index e892d3a3c44..62d2e3ffcb0 100644 --- a/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXPrefixQualifierTraversal.java +++ b/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXPrefixQualifierTraversal.java @@ -11,6 +11,7 @@ import com.webobjects.foundation.NSRange; import er.extensions.eof.ERXKey; +import er.extensions.eof.qualifiers.ERXExistsQualifier; /** * Takes a qualifier, traverses every subqualifier, and prepends every keypath @@ -110,6 +111,13 @@ protected boolean traverseTrueQualifier(ERXTrueQualifier q) { return true; } + @Override + protected boolean traverseExistsQualifier(ERXExistsQualifier q) { + String newBaseKeyPath = q.baseKeyPath() != null ? _prefix + q.baseKeyPath() : _prefix.substring(0, _prefix.length() - 1); + _qualifiers.add(new ERXExistsQualifier(q.subqualifier(), newBaseKeyPath, q.usesInQualInstead())); + return true; + } + @Override public synchronized void traverse(EOQualifierEvaluation q, boolean postOrder) { if (!postOrder) { diff --git a/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXQualifierTraversal.java b/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXQualifierTraversal.java index 25e60bb143e..8d32a2a3b6d 100644 --- a/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXQualifierTraversal.java +++ b/Frameworks/Core/ERExtensions/Sources/er/extensions/qualifiers/ERXQualifierTraversal.java @@ -17,6 +17,8 @@ import com.webobjects.eocontrol.EOOrQualifier; import com.webobjects.eocontrol.EOQualifierEvaluation; +import er.extensions.eof.qualifiers.ERXExistsQualifier; + /** * Traverse a network of qualifiers until a traversal method returns false. * Subclass and implement the methods you need. @@ -125,6 +127,17 @@ protected boolean traverseFalseQualifier(ERXFalseQualifier q) { return true; } + /** + * Should traverse exists qualifier? + * + * @param q + * the qualifier to process + * @return should traverse exists qualifier + */ + protected boolean traverseExistsQualifier(ERXExistsQualifier q) { + return true; + } + /** * Traverses the supplied qualifier * @@ -199,6 +212,9 @@ else if (q instanceof ERXTrueQualifier) { else if (q instanceof ERXFalseQualifier) { result = traverseFalseQualifier((ERXFalseQualifier) q) ? Boolean.TRUE : Boolean.FALSE; } + else if (q instanceof ERXExistsQualifier) { + result = traverseExistsQualifier((ERXExistsQualifier) q) ? Boolean.TRUE : Boolean.FALSE; + } else { result = traverseUnknownQualifier(q) ? Boolean.TRUE : Boolean.FALSE; }