You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2012/09/25 03:24:37 UTC
svn commit: r1389675 - in /lucene/dev/branches/branch_4x: ./ solr/
solr/CHANGES.txt solr/core/
solr/core/src/java/org/apache/solr/schema/CurrencyField.java
solr/core/src/test/org/apache/solr/schema/CurrencyFieldTest.java
Author: janhoy
Date: Tue Sep 25 01:24:36 2012
New Revision: 1389675
URL: http://svn.apache.org/viewvc?rev=1389675&view=rev
Log:
SOLR-3878: NPE in CurrencyValue.parse() while issuing wildcard range query on a CurrencyField
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTest.java
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1389675&r1=1389674&r2=1389675&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Tue Sep 25 01:24:36 2012
@@ -340,6 +340,8 @@ Bug Fixes
* SOLR-3875: Fixed index boosts on multi-valued fields when docBoost is used
(hossman)
+* SOLR-3878: Exception when using open-ended range query with CurrencyField (janhoy)
+
Other Changes
----------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java?rev=1389675&r1=1389674&r2=1389675&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java Tue Sep 25 01:24:36 2012
@@ -225,7 +225,7 @@ public class CurrencyField extends Field
final CurrencyValue p1 = CurrencyValue.parse(part1, defaultCurrency);
final CurrencyValue p2 = CurrencyValue.parse(part2, defaultCurrency);
- if (!p1.getCurrencyCode().equals(p2.getCurrencyCode())) {
+ if (p1 != null && p2 != null && !p1.getCurrencyCode().equals(p2.getCurrencyCode())) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
"Cannot parse range query " + part1 + " to " + part2 +
": range queries only supported when upper and lower bound have same currency.");
@@ -235,11 +235,12 @@ public class CurrencyField extends Field
}
public Query getRangeQuery(QParser parser, SchemaField field, final CurrencyValue p1, final CurrencyValue p2, final boolean minInclusive, final boolean maxInclusive) {
- String currencyCode = p1.getCurrencyCode();
+ String currencyCode = (p1 != null) ? p1.getCurrencyCode() :
+ (p2 != null) ? p2.getCurrencyCode() : defaultCurrency;
final CurrencyValueSource vs = new CurrencyValueSource(field, currencyCode, parser);
return new SolrConstantScoreQuery(new ValueSourceRangeFilter(vs,
- p1.getAmount() + "", p2.getAmount() + "", minInclusive, maxInclusive));
+ p1 == null ? null : p1.getAmount() + "" , p2 == null ? null : p2.getAmount() + "", minInclusive, maxInclusive));
}
@Override
@@ -661,6 +662,9 @@ class CurrencyValue {
* @return The parsed CurrencyValue.
*/
public static CurrencyValue parse(String externalVal, String defaultCurrency) {
+ if (externalVal == null) {
+ return null;
+ }
String amount = externalVal;
String code = defaultCurrency;
@@ -670,6 +674,10 @@ class CurrencyValue {
code = amountAndCode[1];
}
+ if (amount.equals("*")) {
+ return null;
+ }
+
Currency currency = java.util.Currency.getInstance(code);
if (currency == null) {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTest.java?rev=1389675&r1=1389674&r2=1389675&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTest.java Tue Sep 25 01:24:36 2012
@@ -140,7 +140,32 @@ public class CurrencyFieldTest extends S
assertQ(req("fl", "*,score", "q",
"amount:[24.99,EUR TO 25.01,EUR]"),
"//*[@numFound='1']");
- }
+
+ // Open ended ranges without currency
+ assertQ(req("fl", "*,score", "q",
+ "amount:[* TO *]"),
+ "//*[@numFound='10']");
+
+ // Open ended ranges with currency
+ assertQ(req("fl", "*,score", "q",
+ "amount:[*,EUR TO *,EUR]"),
+ "//*[@numFound='10']");
+
+ // Open ended start range without currency
+ assertQ(req("fl", "*,score", "q",
+ "amount:[* TO 5,USD]"),
+ "//*[@numFound='5']");
+
+ // Open ended start range with currency (currency for the * won't matter)
+ assertQ(req("fl", "*,score", "q",
+ "amount:[*,USD TO 5,USD]"),
+ "//*[@numFound='5']");
+
+ // Open ended end range
+ assertQ(req("fl", "*,score", "q",
+ "amount:[3 TO *]"),
+ "//*[@numFound='8']");
+}
@Test
public void testCurrencyPointQuery() throws Exception {