You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2012/11/18 17:29:03 UTC
svn commit: r1410917 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/response/ core/src/java/org/apache/solr/schema/
core/src/test-files/solr/collection1/conf/
core/src/test/org/apache/solr/response/
Author: rmuir
Date: Sun Nov 18 16:29:02 2012
New Revision: 1410917
URL: http://svn.apache.org/viewvc?rev=1410917&view=rev
Log:
SOLR-3959: escape the internal comma separator of poly fields
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema12.xml
lucene/dev/trunk/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sun Nov 18 16:29:02 2012
@@ -207,6 +207,8 @@ Bug Fixes
(used when cache=false), spatial queries, and frange queires.
(Eirik Lygre, yonik)
+* SOLR-3959: Ensure the internal comma separator of poly fields is escaped
+ for CSVResponseWriter. (Areek Zillur via Robert Muir)
Other Changes
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java Sun Nov 18 16:29:02 2012
@@ -202,7 +202,6 @@ class CSVWriter extends TextResponseWrit
// be escaped.
strat.setUnicodeEscapeInterpretation(true);
}
-
printer = new CSVPrinter(writer, strategy);
@@ -261,7 +260,6 @@ class CSVWriter extends TextResponseWrit
if (!returnFields.wantsField(field)) {
continue;
}
-
if (field.equals("score")) {
CSVField csvField = new CSVField();
csvField.name = "score";
@@ -284,6 +282,11 @@ class CSVWriter extends TextResponseWrit
sep = params.get("f." + field + '.' + CSV_SEPARATOR);
encapsulator = params.get("f." + field + '.' + CSV_ENCAPSULATOR);
escape = params.get("f." + field + '.' + CSV_ESCAPE);
+
+ // if polyfield and no escape is provided, add "\\" escape by default
+ if (sf.isPolyField()) {
+ escape = (escape==null)?"\\":escape;
+ }
CSVSharedBufPrinter csvPrinter = csvPrinterMV;
if (sep != null || encapsulator != null || escape != null) {
@@ -310,7 +313,6 @@ class CSVWriter extends TextResponseWrit
csvPrinter = new CSVSharedBufPrinter(mvWriter, strat);
}
-
CSVField csvField = new CSVField();
csvField.name = field;
csvField.sf = sf;
@@ -407,7 +409,19 @@ class CSVWriter extends TextResponseWrit
Collection values = (Collection)val;
val = values.iterator().next();
}
- writeVal(csvField.name, val);
+ // if field is polyfield, use the multi-valued printer to apply appropriate escaping
+ if (csvField.sf != null && csvField.sf.isPolyField()) {
+ mvWriter.reset();
+ csvField.mvPrinter.reset();
+ CSVPrinter tmp = printer;
+ printer = csvField.mvPrinter;
+ writeVal(csvField.name, val);
+ printer = tmp;
+ mvWriter.freeze();
+ printer.print(mvWriter.getFrozenBuf(), 0, mvWriter.getFrozenSize(), true);
+ } else {
+ writeVal(csvField.name, val);
+ }
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java Sun Nov 18 16:29:02 2012
@@ -250,7 +250,7 @@ public class CurrencyField extends Field
@Override
public void write(TextResponseWriter writer, String name, StorableField field) throws IOException {
- writer.writeStr(name, field.stringValue(), false);
+ writer.writeStr(name, field.stringValue(), true);
}
public ExchangeRateProvider getProvider() {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java Sun Nov 18 16:29:02 2012
@@ -241,7 +241,7 @@ public class LatLonType extends Abstract
@Override
public void write(TextResponseWriter writer, String name, StorableField f) throws IOException {
- writer.writeStr(name, f.stringValue(), false);
+ writer.writeStr(name, f.stringValue(), true);
}
@Override
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java Sun Nov 18 16:29:02 2012
@@ -121,7 +121,7 @@ public class PointType extends Coordinat
@Override
public void write(TextResponseWriter writer, String name, StorableField f) throws IOException {
- writer.writeStr(name, f.stringValue(), false);
+ writer.writeStr(name, f.stringValue(), true);
}
@Override
Modified: lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema12.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema12.xml?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema12.xml (original)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/schema12.xml Sun Nov 18 16:29:02 2012
@@ -428,6 +428,7 @@
<!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
+ <fieldType name="currency" class="solr.CurrencyField" currencyConfig="currency.xml" multiValued="false" />
</types>
@@ -524,6 +525,8 @@
<field name="point_hash" type="geohash" indexed="true" stored="true" multiValued="false"/>
<field name="store" type="location" indexed="true" stored="true"/>
+ <!-- Test currency field -->
+ <field name="amount_c" type="currency" indexed="true" stored="true" multiValued="false"/>
<!-- to test uniq fields -->
<field name="uniq" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="uniq2" type="string" indexed="true" stored="true" multiValued="true"/>
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java?rev=1410917&r1=1410916&r2=1410917&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/response/TestCSVResponseWriter.java Sun Nov 18 16:29:02 2012
@@ -39,6 +39,8 @@ public class TestCSVResponseWriter exten
assertU(adoc("id","1", "foo_i","-1", "foo_s","hi", "foo_l","12345678987654321", "foo_b","false", "foo_f","1.414","foo_d","-1.0E300","foo_dt","2000-01-02T03:04:05Z"));
assertU(adoc("id","2", "v_ss","hi", "v_ss","there", "v2_ss","nice", "v2_ss","output", "shouldbeunstored","foo"));
assertU(adoc("id","3", "shouldbeunstored","foo"));
+ assertU(adoc("id","4", "amount_c", "1.50,EUR"));
+ assertU(adoc("id","5", "store", "12.434,-134.1"));
assertU(commit());
}
@@ -69,6 +71,13 @@ public class TestCSVResponseWriter exten
assertEquals("2,hi|there,nice:output\n"
, h.query(req("q","id:2", "wt","csv", "csv.header","false", "csv.mv.separator","|", "f.v2_ss.csv.separator",":", "fl","id,v_ss,v2_ss")));
+ // test csv field for polyfield (currency) SOLR-3959
+ assertEquals("4,\"1.50\\,EUR\"\n"
+ , h.query(req("q","id:4", "wt","csv", "csv.header","false", "fl","id,amount_c")));
+
+ // test csv field for polyfield (latlon) SOLR-3959
+ assertEquals("5,\"12.434\\,-134.1\"\n"
+ , h.query(req("q","id:5", "wt","csv", "csv.header","false", "fl","id,store")) );
// test retrieving fields from index
String result = h.query(req("q","*:*", "wt","csv", "csv.header","true", "fl","*,score"));
for (String field : "id,foo_s,foo_i,foo_l,foo_b,foo_f,foo_d,foo_dt,v_ss,v2_ss,score".split(",")) {
@@ -100,7 +109,7 @@ public class TestCSVResponseWriter exten
, h.query(req("q","id:[1 TO 2]", "wt","csv", "csv.header","false", "fl","id,v_ss,foo_s")));
// test SOLR-2970 not returning non-stored fields by default. Compare sorted list
- assertEquals(sortHeader("v_ss,foo_b,v2_ss,foo_f,foo_i,foo_d,foo_s,foo_dt,id,foo_l\n")
+ assertEquals(sortHeader("amount_c,store,v_ss,foo_b,v2_ss,foo_f,foo_i,foo_d,foo_s,foo_dt,id,foo_l\n")
, sortHeader(h.query(req("q","id:3", "wt","csv", "csv.header","true", "fl","*", "rows","0"))));