You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2005/06/20 10:57:56 UTC
svn commit: r191426 -
/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
Author: mreutegg
Date: Mon Jun 20 01:57:55 2005
New Revision: 191426
URL: http://svn.apache.org/viewcvs?rev=191426&view=rev
Log:
JCR-139: Query for name literal without namespace fails
- coerce string literal to name as soon as it appears as a valid name
- changed coercing behaviour to only work on operations which are not ranges (eq, ne)
Modified:
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java?rev=191426&r1=191425&r2=191426&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java Mon Jun 20 01:57:55 2005
@@ -49,6 +49,7 @@
import org.apache.lucene.search.Query;
import org.apache.lucene.search.RangeQuery;
import org.apache.lucene.search.TermQuery;
+import org.apache.xerces.util.XMLChar;
import javax.jcr.NamespaceException;
import javax.jcr.PropertyType;
@@ -518,12 +519,14 @@
stringValues[0] = LongField.longToString(node.getLongValue());
break;
case QueryConstants.TYPE_STRING:
- if (node.getOperation() == QueryConstants.OPERATION_LIKE
- || node.getOperation() == QueryConstants.OPERATION_NULL
- || node.getOperation() == QueryConstants.OPERATION_NOT_NULL) {
- stringValues[0] = node.getStringValue();
- } else {
+ if (node.getOperation() == QueryConstants.OPERATION_EQ_GENERAL
+ || node.getOperation() == QueryConstants.OPERATION_EQ_VALUE
+ || node.getOperation() == QueryConstants.OPERATION_NE_GENERAL
+ || node.getOperation() == QueryConstants.OPERATION_NE_VALUE) {
+ // only use coercing on non-range operations
stringValues = getStringValues(node.getProperty(), node.getStringValue());
+ } else {
+ stringValues[0] = node.getStringValue();
}
break;
case QueryConstants.TYPE_POSITION:
@@ -781,19 +784,22 @@
} catch (Exception e) {
// not a path
}
- } else if (literal.indexOf(':') > -1) {
+ } else if (XMLChar.isValidName(literal)) {
// might be a name
try {
values.add(nsMappings.translatePropertyName(literal, session.getNamespaceResolver()));
log.debug("Coerced " + literal + " into NAME.");
+ // also add literal as string value as is
+ values.add(literal);
} catch (Exception e) {
// not a name
- // is it a date?
- Calendar c = ISO8601.parse(literal);
- if (c != null) {
- values.add(DateField.timeToString(c.getTimeInMillis()));
- log.debug("Coerced " + literal + " into DATE.");
- }
+ }
+ } else if (literal.indexOf(':') > -1) {
+ // is it a date?
+ Calendar c = ISO8601.parse(literal);
+ if (c != null) {
+ values.add(DateField.timeToString(c.getTimeInMillis()));
+ log.debug("Coerced " + literal + " into DATE.");
}
} else {
// long or double are possible at this point