You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2014/03/29 03:39:14 UTC
svn commit: r1582937 - in /lucene/dev/branches/lucene_solr_4_7: ./
dev-tools/ dev-tools/idea/solr/core/src/test/ solr/ solr/contrib/
solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ solr/core/
solr/core/src/java/org/apache/solr/schema/ sol...
Author: sarowe
Date: Sat Mar 29 02:39:14 2014
New Revision: 1582937
URL: http://svn.apache.org/r1582937
Log:
SOLR-5920: Distributed sort on DateField, BoolField and BCD{Int,Long,Str}Field returns string cast exception (merged branch_4x r1582933)
Modified:
lucene/dev/branches/lucene_solr_4_7/ (props changed)
lucene/dev/branches/lucene_solr_4_7/dev-tools/ (props changed)
lucene/dev/branches/lucene_solr_4_7/dev-tools/idea/solr/core/src/test/solr-core-tests.iml
lucene/dev/branches/lucene_solr_4_7/solr/ (props changed)
lucene/dev/branches/lucene_solr_4_7/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/lucene_solr_4_7/solr/common-build.xml (contents, props changed)
lucene/dev/branches/lucene_solr_4_7/solr/contrib/ (props changed)
lucene/dev/branches/lucene_solr_4_7/solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ICUCollationField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/ (props changed)
lucene/dev/branches/lucene_solr_4_7/solr/core/build.xml
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BCDIntField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BoolField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/CollationField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/DateField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/FieldType.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/StrField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TextField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TrieDateField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml
lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/CursorPagingTest.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/schema/SortableBinaryField.java
lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/search/CursorMarkTest.java
Modified: lucene/dev/branches/lucene_solr_4_7/dev-tools/idea/solr/core/src/test/solr-core-tests.iml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/dev-tools/idea/solr/core/src/test/solr-core-tests.iml?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/dev-tools/idea/solr/core/src/test/solr-core-tests.iml (original)
+++ lucene/dev/branches/lucene_solr_4_7/dev-tools/idea/solr/core/src/test/solr-core-tests.iml Sat Mar 29 02:39:14 2014
@@ -15,6 +15,7 @@
<orderEntry type="library" scope="TEST" name="Solrj library" level="project" />
<orderEntry type="library" scope="TEST" name="Solr example library" level="project" />
<orderEntry type="library" scope="TEST" name="Solr test framework library" level="project" />
+ <orderEntry type="library" scope="TEST" name="ICU library" level="project" />
<orderEntry type="module" scope="TEST" module-name="lucene-test-framework" />
<orderEntry type="module" scope="TEST" module-name="solr-test-framework" />
<orderEntry type="module" scope="TEST" module-name="solr-core-test-files" />
@@ -29,5 +30,7 @@
<orderEntry type="module" scope="TEST" module-name="misc" />
<orderEntry type="module" scope="TEST" module-name="join" />
<orderEntry type="module" scope="TEST" module-name="expressions" />
+ <orderEntry type="module" scope="TEST" module-name="analysis-icu" />
+ <orderEntry type="module" scope="TEST" module-name="analysis-extras" />
</component>
</module>
Modified: lucene/dev/branches/lucene_solr_4_7/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/CHANGES.txt?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/CHANGES.txt Sat Mar 29 02:39:14 2014
@@ -121,6 +121,9 @@ Bug Fixes
* SOLR-5906: Collection create API ignores property.instanceDir parameter.
(Varun Thacker, shalin)
+* SOLR-5920: Distributed sort on DateField, BoolField and BCD{Int,Long,Str}Field
+ returns string cast exception (Eric Bus, AJ Lemke, hossman, Steve Rowe)
+
Other Changes
---------------------
Modified: lucene/dev/branches/lucene_solr_4_7/solr/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/common-build.xml?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/common-build.xml (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/common-build.xml Sat Mar 29 02:39:14 2014
@@ -454,6 +454,12 @@
</macrodef>
<!-- Solr contrib targets -->
+ <target name="-compile-analysis-extras">
+ <ant dir="${common-solr.dir}/contrib/analysis-extras" target="compile" inheritAll="false">
+ <propertyset refid="uptodate.and.compiled.properties"/>
+ </ant>
+ </target>
+
<target name="compile-contrib" description="Compile contrib modules">
<contrib-crawl target="compile-core"/>
</target>
Modified: lucene/dev/branches/lucene_solr_4_7/solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ICUCollationField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ICUCollationField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ICUCollationField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/contrib/analysis-extras/src/java/org/apache/solr/schema/ICUCollationField.java Sat Mar 29 02:39:14 2014
@@ -43,7 +43,6 @@ import org.apache.lucene.util.Version;
import org.apache.lucene.analysis.util.ResourceLoader;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.util.Base64;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
@@ -307,20 +306,11 @@ public class ICUCollationField extends F
@Override
public Object marshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- final BytesRef val = (BytesRef)value;
- return Base64.byteArrayToBase64(val.bytes, val.offset, val.length);
+ return marshalBase64SortValue(value);
}
@Override
public Object unmarshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- final String val = (String)value;
- final byte[] bytes = Base64.base64ToByteArray(val);
- return new BytesRef(bytes);
+ return unmarshalBase64SortValue(value);
}
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/build.xml?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/build.xml (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/build.xml Sat Mar 29 02:39:14 2014
@@ -32,9 +32,14 @@
<target name="compile-core" depends="compile-solrj,common-solr.compile-core"/>
+ <target name="compile-test" depends="jar-analyzers-icu,-compile-analysis-extras,common-solr.compile-test"/>
+
<path id="test.classpath">
<path refid="solr.test.base.classpath"/>
<fileset dir="${test.lib.dir}" includes="*.jar"/>
+ <pathelement location="${analyzers-icu.jar}"/>
+ <pathelement location="${common-solr.dir}/build/contrib/solr-analysis-extras/classes/java"/>
+ <fileset dir="${common-solr.dir}/contrib/analysis-extras/lib" includes="icu4j*.jar"/>
</path>
<!-- specialized to ONLY depend on solrj -->
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BCDIntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BCDIntField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BCDIntField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BCDIntField.java Sat Mar 29 02:39:14 2014
@@ -65,6 +65,16 @@ public class BCDIntField extends Primiti
public void write(TextResponseWriter writer, String name, IndexableField f) throws IOException {
writer.writeInt(name,toExternal(f));
}
+
+ @Override
+ public Object marshalSortValue(Object value) {
+ return marshalStringSortValue(value);
+ }
+
+ @Override
+ public Object unmarshalSortValue(Object value) {
+ return unmarshalStringSortValue(value);
+ }
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BoolField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BoolField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BoolField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/BoolField.java Sat Mar 29 02:39:14 2014
@@ -150,6 +150,16 @@ public class BoolField extends Primitive
public void write(TextResponseWriter writer, String name, IndexableField f) throws IOException {
writer.writeBool(name, f.stringValue().charAt(0) == 'T');
}
+
+ @Override
+ public Object marshalSortValue(Object value) {
+ return marshalStringSortValue(value);
+ }
+
+ @Override
+ public Object unmarshalSortValue(Object value) {
+ return unmarshalStringSortValue(value);
+ }
}
// TODO - this can be much more efficient - use OpenBitSet or Bits
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/CollationField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/CollationField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/CollationField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/CollationField.java Sat Mar 29 02:39:14 2014
@@ -47,7 +47,6 @@ import org.apache.lucene.util.Version;
import org.apache.lucene.analysis.util.ResourceLoader;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.util.Base64;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
@@ -282,20 +281,11 @@ public class CollationField extends Fiel
@Override
public Object marshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- final BytesRef val = (BytesRef)value;
- return Base64.byteArrayToBase64(val.bytes, val.offset, val.length);
+ return marshalBase64SortValue(value);
}
@Override
public Object unmarshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- final String val = (String)value;
- final byte[] bytes = Base64.base64ToByteArray(val);
- return new BytesRef(bytes);
+ return unmarshalBase64SortValue(value);
}
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/DateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/DateField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/DateField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/DateField.java Sat Mar 29 02:39:14 2014
@@ -245,6 +245,16 @@ public class DateField extends Primitive
}
@Override
+ public Object marshalSortValue(Object value) {
+ return marshalStringSortValue(value);
+ }
+
+ @Override
+ public Object unmarshalSortValue(Object value) {
+ return unmarshalStringSortValue(value);
+ }
+
+ @Override
public void write(TextResponseWriter writer, String name, IndexableField f) throws IOException {
writer.writeDate(name, toExternal(f));
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/FieldType.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/FieldType.java Sat Mar 29 02:39:14 2014
@@ -48,6 +48,7 @@ import org.apache.solr.analysis.SolrAnal
import org.apache.solr.analysis.TokenizerChain;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.Base64;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.response.TextResponseWriter;
@@ -968,4 +969,52 @@ public abstract class FieldType extends
public Object unmarshalSortValue(Object value) {
return value;
}
+
+ /**
+ * Marshals a string-based field value.
+ */
+ protected static Object marshalStringSortValue(Object value) {
+ if (null == value) {
+ return null;
+ }
+ CharsRef spare = new CharsRef();
+ UnicodeUtil.UTF8toUTF16((BytesRef)value, spare);
+ return spare.toString();
+ }
+
+ /**
+ * Unmarshals a string-based field value.
+ */
+ protected static Object unmarshalStringSortValue(Object value) {
+ if (null == value) {
+ return null;
+ }
+ BytesRef spare = new BytesRef();
+ String stringVal = (String)value;
+ UnicodeUtil.UTF16toUTF8(stringVal, 0, stringVal.length(), spare);
+ return spare;
+ }
+
+ /**
+ * Marshals a binary field value.
+ */
+ protected static Object marshalBase64SortValue(Object value) {
+ if (null == value) {
+ return null;
+ }
+ final BytesRef val = (BytesRef)value;
+ return Base64.byteArrayToBase64(val.bytes, val.offset, val.length);
+ }
+
+ /**
+ * Unmarshals a binary field value.
+ */
+ protected static Object unmarshalBase64SortValue(Object value) {
+ if (null == value) {
+ return null;
+ }
+ final String val = (String)value;
+ final byte[] bytes = Base64.base64ToByteArray(val);
+ return new BytesRef(bytes);
+ }
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/StrField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/StrField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/StrField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/StrField.java Sat Mar 29 02:39:14 2014
@@ -29,8 +29,6 @@ import org.apache.lucene.document.Sorted
import org.apache.lucene.queries.function.ValueSource;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
-import org.apache.lucene.util.UnicodeUtil;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
@@ -86,23 +84,12 @@ public class StrField extends PrimitiveF
@Override
public Object marshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- CharsRef spare = new CharsRef();
- UnicodeUtil.UTF8toUTF16((BytesRef)value, spare);
- return spare.toString();
+ return marshalStringSortValue(value);
}
@Override
public Object unmarshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- BytesRef spare = new BytesRef();
- String stringVal = (String)value;
- UnicodeUtil.UTF16toUTF8(stringVal, 0, stringVal.length(), spare);
- return spare;
+ return unmarshalStringSortValue(value);
}
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TextField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TextField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TextField.java Sat Mar 29 02:39:14 2014
@@ -23,10 +23,8 @@ import org.apache.lucene.index.Indexable
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.QueryBuilder;
-import org.apache.lucene.util.UnicodeUtil;
import org.apache.solr.common.SolrException;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
@@ -175,22 +173,11 @@ public class TextField extends FieldType
@Override
public Object marshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- CharsRef spare = new CharsRef();
- UnicodeUtil.UTF8toUTF16((BytesRef)value, spare);
- return spare.toString();
+ return marshalStringSortValue(value);
}
@Override
public Object unmarshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- BytesRef spare = new BytesRef();
- String stringVal = (String)value;
- UnicodeUtil.UTF16toUTF8(stringVal, 0, stringVal.length(), spare);
- return spare;
+ return unmarshalStringSortValue(value);
}
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TrieDateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TrieDateField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TrieDateField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/java/org/apache/solr/schema/TrieDateField.java Sat Mar 29 02:39:14 2014
@@ -81,6 +81,16 @@ public class TrieDateField extends DateF
}
@Override
+ public Object marshalSortValue(Object value) {
+ return value;
+ }
+
+ @Override
+ public Object unmarshalSortValue(Object value) {
+ return value;
+ }
+
+ @Override
public ValueSource getValueSource(SchemaField field, QParser parser) {
return wrappedField.getValueSource(field, parser);
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml Sat Mar 29 02:39:14 2014
@@ -71,6 +71,94 @@ NOTE: Tests expect every field in this s
<field name="double_dv_last" type="double_dv_last" />
<field name="double_dv_first" type="double_dv_first" />
+ <field name="date" type="date" />
+ <field name="date_last" type="date_last" />
+ <field name="date_first" type="date_first" />
+ <field name="date_dv" type="date_dv" />
+ <field name="date_dv_last" type="date_dv_last" />
+ <field name="date_dv_first" type="date_dv_first" />
+
+ <field name="uuid" type="uuid" />
+ <field name="uuid_last" type="uuid_last" />
+ <field name="uuid_first" type="uuid_first" />
+ <field name="uuid_dv" type="uuid_dv" />
+ <field name="uuid_dv_last" type="uuid_dv_last" />
+ <field name="uuid_dv_first" type="uuid_dv_first" />
+
+ <field name="currency" type="currency" />
+ <field name="currency_last" type="currency_last" />
+ <field name="currency_first" type="currency_first" />
+
+ <field name="collation_en_primary" type="collation_en_primary" />
+ <field name="collation_en_primary_last" type="collation_en_primary_last" />
+ <field name="collation_en_primary_first" type="collation_en_primary_first" />
+ <field name="collation_en_primary_dv" type="collation_en_primary_dv" />
+ <field name="collation_en_primary_dv_last" type="collation_en_primary_dv_last" />
+ <field name="collation_en_primary_dv_first" type="collation_en_primary_dv_first" />
+
+ <field name="icu_collation_en_primary" type="icu_collation_en_primary" />
+ <field name="icu_collation_en_primary_last" type="icu_collation_en_primary_last" />
+ <field name="icu_collation_en_primary_first" type="icu_collation_en_primary_first" />
+ <field name="icu_collation_en_primary_dv" type="icu_collation_en_primary_dv" />
+ <field name="icu_collation_en_primary_dv_last" type="icu_collation_en_primary_dv_last" />
+ <field name="icu_collation_en_primary_dv_first" type="icu_collation_en_primary_dv_first" />
+
+ <field name="bool" type="bool" />
+ <field name="bool_last" type="bool_last" />
+ <field name="bool_first" type="bool_first" />
+
+ <field name="enum" type="enum" />
+ <field name="enum_last" type="enum_last" />
+ <field name="enum_first" type="enum_first" />
+ <!-- EnumField incorrectly disallows missing DocValues - see SOLR-5927 -->
+ <!-- <field name="enum_dv" type="enum_dv" /> -->
+ <!-- <field name="enum_dv_last" type="enum_dv_last" /> -->
+ <!-- <field name="enum_dv_first" type="enum_dv_first" /> -->
+
+ <field name="bcd_int" type="bcd_int" />
+ <field name="bcd_int_last" type="bcd_int_last" />
+ <field name="bcd_int_first" type="bcd_int_first" />
+
+ <field name="bcd_long" type="bcd_long" />
+ <field name="bcd_long_last" type="bcd_long_last" />
+ <field name="bcd_long_first" type="bcd_long_first" />
+
+ <field name="bcd_str" type="bcd_str" />
+ <field name="bcd_str_last" type="bcd_str_last" />
+ <field name="bcd_str_first" type="bcd_str_first" />
+
+ <!-- IntField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <field name="legacy_int" type="legacy_int" />
+
+ <field name="legacy_sortable_int" type="legacy_sortable_int" />
+ <field name="legacy_sortable_int_last" type="legacy_sortable_int_last" />
+ <field name="legacy_sortable_int_first" type="legacy_sortable_int_first" />
+
+ <!-- LongField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <field name="legacy_long" type="legacy_long" />
+
+ <field name="legacy_sortable_long" type="legacy_sortable_long" />
+ <field name="legacy_sortable_long_last" type="legacy_sortable_long_last" />
+ <field name="legacy_sortable_long_first" type="legacy_sortable_long_first" />
+
+ <!-- FloatField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <field name="legacy_float" type="legacy_float" />
+
+ <field name="legacy_sortable_float" type="legacy_sortable_float" />
+ <field name="legacy_sortable_float_last" type="legacy_sortable_float_last" />
+ <field name="legacy_sortable_float_first" type="legacy_sortable_float_first" />
+
+ <!-- DoubleField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <field name="legacy_double" type="legacy_double" />
+
+ <field name="legacy_sortable_double" type="legacy_sortable_double" />
+ <field name="legacy_sortable_double_last" type="legacy_sortable_double_last" />
+ <field name="legacy_sortable_double_first" type="legacy_sortable_double_first" />
+
+ <field name="legacy_date" type="legacy_date" />
+ <field name="legacy_date_last" type="legacy_date_last" />
+ <field name="legacy_date_first" type="legacy_date_first" />
+
<!-- ensure function sorts don't mistakenly get interpreted as field sorts
https://issues.apache.org/jira/browse/SOLR-5354?focusedCommentId=13835891&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13835891
-->
@@ -82,6 +170,16 @@ NOTE: Tests expect every field in this s
<copyField source="str" dest="str_dv" />
<copyField source="str" dest="str_dv_last" />
<copyField source="str" dest="str_dv_first" />
+ <copyField source="str" dest="collation_en_primary_last" />
+ <copyField source="str" dest="collation_en_primary_first" />
+ <copyField source="str" dest="collation_en_primary_dv" />
+ <copyField source="str" dest="collation_en_primary_dv_last" />
+ <copyField source="str" dest="collation_en_primary_dv_first" />
+ <copyField source="str" dest="icu_collation_en_primary_last" />
+ <copyField source="str" dest="icu_collation_en_primary_first" />
+ <copyField source="str" dest="icu_collation_en_primary_dv" />
+ <copyField source="str" dest="icu_collation_en_primary_dv_last" />
+ <copyField source="str" dest="icu_collation_en_primary_dv_first" />
<copyField source="bin" dest="bin_last" />
<copyField source="bin" dest="bin_first" />
@@ -94,24 +192,76 @@ NOTE: Tests expect every field in this s
<copyField source="int" dest="int_dv" />
<copyField source="int" dest="int_dv_last" />
<copyField source="int" dest="int_dv_first" />
+ <copyField source="int" dest="bcd_int" />
+ <copyField source="int" dest="bcd_int_last" />
+ <copyField source="int" dest="bcd_int_first" />
+ <copyField source="int" dest="bcd_str" />
+ <copyField source="int" dest="bcd_str_last" />
+ <copyField source="int" dest="bcd_str_first" />
+ <copyField source="int" dest="legacy_int" />
+ <copyField source="int" dest="legacy_sortable_int" />
+ <copyField source="int" dest="legacy_sortable_int_last" />
+ <copyField source="int" dest="legacy_sortable_int_first" />
<copyField source="long" dest="long_last" />
<copyField source="long" dest="long_first" />
<copyField source="long" dest="long_dv" />
<copyField source="long" dest="long_dv_last" />
<copyField source="long" dest="long_dv_first" />
+ <copyField source="long" dest="bcd_long" />
+ <copyField source="long" dest="bcd_long_last" />
+ <copyField source="long" dest="bcd_long_first" />
+ <copyField source="long" dest="legacy_long" />
+ <copyField source="long" dest="legacy_sortable_long" />
+ <copyField source="long" dest="legacy_sortable_long_last" />
+ <copyField source="long" dest="legacy_sortable_long_first" />
<copyField source="float" dest="float_last" />
<copyField source="float" dest="float_first" />
<copyField source="float" dest="float_dv" />
<copyField source="float" dest="float_dv_last" />
<copyField source="float" dest="float_dv_first" />
+ <copyField source="float" dest="legacy_float" />
+ <copyField source="float" dest="legacy_sortable_float" />
+ <copyField source="float" dest="legacy_sortable_float_last" />
+ <copyField source="float" dest="legacy_sortable_float_first" />
<copyField source="double" dest="double_last" />
<copyField source="double" dest="double_first" />
<copyField source="double" dest="double_dv" />
<copyField source="double" dest="double_dv_last" />
<copyField source="double" dest="double_dv_first" />
+ <copyField source="double" dest="legacy_double" />
+ <copyField source="double" dest="legacy_sortable_double" />
+ <copyField source="double" dest="legacy_sortable_double_last" />
+ <copyField source="double" dest="legacy_sortable_double_first" />
+
+ <copyField source="date" dest="date_last" />
+ <copyField source="date" dest="date_first" />
+ <copyField source="date" dest="date_dv" />
+ <copyField source="date" dest="date_dv_last" />
+ <copyField source="date" dest="date_dv_first" />
+ <copyField source="date" dest="legacy_date_last" />
+ <copyField source="date" dest="legacy_date_first" />
+
+ <copyField source="uuid" dest="uuid_last" />
+ <copyField source="uuid" dest="uuid_first" />
+ <copyField source="uuid" dest="uuid_dv" />
+ <copyField source="uuid" dest="uuid_dv_last" />
+ <copyField source="uuid" dest="uuid_dv_first" />
+
+ <copyField source="currency" dest="currency_last" />
+ <copyField source="currency" dest="currency_first" />
+
+ <copyField source="bool" dest="bool_last" />
+ <copyField source="bool" dest="bool_first" />
+
+ <copyField source="enum" dest="enum_last" />
+ <copyField source="enum" dest="enum_first" />
+ <!-- EnumField incorrectly disallows missing DocValues - see SOLR-5927 -->
+ <!-- <copyField source="enum" dest="enum_dv" /> -->
+ <!-- <copyField source="enum" dest="enum_dv_last" /> -->
+ <!-- <copyField source="enum" dest="enum_dv_first" /> -->
<types>
@@ -157,6 +307,94 @@ NOTE: Tests expect every field in this s
<fieldtype name="double_dv_last" class="solr.TrieDoubleField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
<fieldtype name="double_dv_first" class="solr.TrieDoubleField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
+ <fieldtype name="date" class="solr.TrieDateField" stored="true" indexed="true" />
+ <fieldtype name="date_last" class="solr.TrieDateField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="date_first" class="solr.TrieDateField" stored="true" indexed="true" sortMissingFirst="true"/>
+ <fieldtype name="date_dv" class="solr.TrieDateField" stored="true" indexed="false" docValues="true"/>
+ <fieldtype name="date_dv_last" class="solr.TrieDateField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
+ <fieldtype name="date_dv_first" class="solr.TrieDateField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
+
+ <fieldtype name="uuid" class="solr.UUIDField" stored="true" indexed="true" />
+ <fieldtype name="uuid_last" class="solr.UUIDField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="uuid_first" class="solr.UUIDField" stored="true" indexed="true" sortMissingFirst="true"/>
+ <fieldtype name="uuid_dv" class="solr.UUIDField" stored="true" indexed="false" docValues="true"/>
+ <fieldtype name="uuid_dv_last" class="solr.UUIDField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
+ <fieldtype name="uuid_dv_first" class="solr.UUIDField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
+
+ <fieldtype name="currency" class="solr.CurrencyField" stored="true" indexed="true" foo="bar" providerClass="solr.MockExchangeRateProvider"/>
+ <fieldtype name="currency_last" class="solr.CurrencyField" stored="true" indexed="true" foo="bar" providerClass="solr.MockExchangeRateProvider" sortMissingLast="true"/>
+ <fieldtype name="currency_first" class="solr.CurrencyField" stored="true" indexed="true" foo="bar" providerClass="solr.MockExchangeRateProvider" sortMissingFirst="true"/>
+
+ <fieldtype name="collation_en_primary" class="solr.CollationField" language="en" strength="primary" stored="true" indexed="true" />
+ <fieldtype name="collation_en_primary_last" class="solr.CollationField" language="en" strength="primary" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="collation_en_primary_first" class="solr.CollationField" language="en" strength="primary" stored="true" indexed="true" sortMissingFirst="true"/>
+ <fieldtype name="collation_en_primary_dv" class="solr.CollationField" language="en" strength="primary" stored="true" indexed="false" docValues="true"/>
+ <fieldtype name="collation_en_primary_dv_last" class="solr.CollationField" language="en" strength="primary" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
+ <fieldtype name="collation_en_primary_dv_first" class="solr.CollationField" language="en" strength="primary" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
+
+ <fieldtype name="icu_collation_en_primary" class="solr.ICUCollationField" locale="en" strength="primary" stored="true" indexed="true" />
+ <fieldtype name="icu_collation_en_primary_last" class="solr.ICUCollationField" locale="en" strength="primary" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="icu_collation_en_primary_first" class="solr.ICUCollationField" locale="en" strength="primary" stored="true" indexed="true" sortMissingFirst="true"/>
+ <fieldtype name="icu_collation_en_primary_dv" class="solr.ICUCollationField" locale="en" strength="primary" stored="true" indexed="false" docValues="true"/>
+ <fieldtype name="icu_collation_en_primary_dv_last" class="solr.ICUCollationField" locale="en" strength="primary" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
+ <fieldtype name="icu_collation_en_primary_dv_first" class="solr.ICUCollationField" locale="en" strength="primary" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
+
+ <!-- BoolField does not support DocValues - see SOLR-5933 -->
+ <fieldtype name="bool" class="solr.BoolField" stored="true" indexed="true" />
+ <fieldtype name="bool_last" class="solr.BoolField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="bool_first" class="solr.BoolField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <fieldType name="enum" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="severity"/>
+ <fieldType name="enum_last" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="severity" sortMissingLast="true"/>
+ <fieldType name="enum_first" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="severity" sortMissingFirst="true"/>
+ <!-- EnumField incorrectly disallows missing DocValues - see SOLR-5927 -->
+ <!-- <fieldType name="enum_dv" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="severity" docValues="true"/> -->
+ <!-- <fieldType name="enum_dv_last" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="severity" docValues="true" sortMissingLast="true"/> -->
+ <!-- <fieldType name="enum_dv_first" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="severity" docValues="true" sortMissingFirst="true"/> -->
+
+ <fieldtype name="bcd_int" class="solr.BCDIntField" stored="true" indexed="true" />
+ <fieldtype name="bcd_int_last" class="solr.BCDIntField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="bcd_int_first" class="solr.BCDIntField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <fieldtype name="bcd_long" class="solr.BCDLongField" stored="true" indexed="true" />
+ <fieldtype name="bcd_long_last" class="solr.BCDLongField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="bcd_long_first" class="solr.BCDLongField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <fieldtype name="bcd_str" class="solr.BCDStrField" stored="true" indexed="true" />
+ <fieldtype name="bcd_str_last" class="solr.BCDStrField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="bcd_str_first" class="solr.BCDStrField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <!-- IntField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <fieldtype name="legacy_int" class="solr.IntField" stored="true" indexed="true" />
+
+ <fieldtype name="legacy_sortable_int" class="solr.SortableIntField" stored="true" indexed="true" />
+ <fieldtype name="legacy_sortable_int_last" class="solr.SortableIntField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="legacy_sortable_int_first" class="solr.SortableIntField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <!-- LongField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <fieldtype name="legacy_long" class="solr.LongField" stored="true" indexed="true" />
+
+ <fieldtype name="legacy_sortable_long" class="solr.SortableLongField" stored="true" indexed="true" />
+ <fieldtype name="legacy_sortable_long_last" class="solr.SortableLongField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="legacy_sortable_long_first" class="solr.SortableLongField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <!-- FloatField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <fieldtype name="legacy_float" class="solr.FloatField" stored="true" indexed="true" />
+
+ <fieldtype name="legacy_sortable_float" class="solr.SortableFloatField" stored="true" indexed="true" />
+ <fieldtype name="legacy_sortable_float_last" class="solr.SortableFloatField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="legacy_sortable_float_first" class="solr.SortableFloatField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <!-- DoubleField doesn't support sortMissingFirst or sortMissingLast variants -->
+ <fieldtype name="legacy_double" class="solr.DoubleField" stored="true" indexed="true" />
+
+ <fieldtype name="legacy_sortable_double" class="solr.SortableDoubleField" stored="true" indexed="true" />
+ <fieldtype name="legacy_sortable_double_last" class="solr.SortableDoubleField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="legacy_sortable_double_first" class="solr.SortableDoubleField" stored="true" indexed="true" sortMissingFirst="true"/>
+
+ <fieldtype name="legacy_date" class="solr.DateField" stored="true" indexed="true" />
+ <fieldtype name="legacy_date_last" class="solr.DateField" stored="true" indexed="true" sortMissingLast="true"/>
+ <fieldtype name="legacy_date_first" class="solr.DateField" stored="true" indexed="true" sortMissingFirst="true"/>
</types>
</schema>
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/CursorPagingTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/CursorPagingTest.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/CursorPagingTest.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/CursorPagingTest.java Sat Mar 29 02:39:14 2014
@@ -32,18 +32,21 @@ import static org.apache.solr.common.par
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.schema.DateField;
import org.apache.solr.search.CursorMark; //jdoc
import org.noggit.ObjectBuilder;
+import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
-import java.nio.ByteBuffer;
+import java.util.UUID;
import org.junit.BeforeClass;
import org.junit.After;
@@ -58,6 +61,9 @@ public class CursorPagingTest extends So
public final static String TEST_SOLRCONFIG_NAME = "solrconfig-deeppaging.xml";
/** schema.xml file name, shared with other cursor related tests */
public final static String TEST_SCHEMAXML_NAME = "schema-sorts.xml";
+ /** values from enumConfig.xml */
+ public static final String[] SEVERITY_ENUM_VALUES =
+ { "Not Available", "Low", "Medium", "High", "Critical" };
@BeforeClass
public static void beforeTests() throws Exception {
@@ -678,7 +684,7 @@ public class CursorPagingTest extends So
String cursorMark = CURSOR_MARK_START;
int docsOnThisPage = Integer.MAX_VALUE;
while (0 < docsOnThisPage) {
- String json = assertJQ(req(params,
+ String json = assertJQ(req(params,
CURSOR_MARK_PARAM, cursorMark));
Map rsp = (Map) ObjectBuilder.fromJSON(json);
assertTrue("response doesn't contain " + CURSOR_MARK_NEXT + ": " + json,
@@ -895,7 +901,6 @@ public class CursorPagingTest extends So
if (useField()) {
doc.addField("str", skewed(randomUsableUnicodeString(),
_TestUtil.randomSimpleString(random(),1,1)));
-
}
if (useField()) {
int numBytes = (Integer) skewed(_TestUtil.nextInt(random(), 20, 50), 2);
@@ -903,6 +908,23 @@ public class CursorPagingTest extends So
random().nextBytes(randBytes);
doc.addField("bin", ByteBuffer.wrap(randBytes));
}
+ if (useField()) {
+ doc.addField("date", skewed(randomDate(),
+ dateWithRandomSecondOn2010_10_31_at_10_31()));
+ }
+ if (useField()) {
+ doc.addField("uuid", UUID.randomUUID().toString());
+ }
+ if (useField()) {
+ doc.addField("currency", skewed("" + (random().nextInt() / 100.) + "," + randomCurrency(),
+ "" + _TestUtil.nextInt(random(), 250, 320) + ",USD"));
+ }
+ if (useField()) {
+ doc.addField("bool", random().nextBoolean() ? "t" : "f");
+ }
+ if (useField()) {
+ doc.addField("enum", randomEnumValue());
+ }
return doc;
}
@@ -941,6 +963,25 @@ public class CursorPagingTest extends So
return result;
}
+ private static String randomDate() {
+ return DateField.formatExternal(new Date(random().nextLong()));
+ }
+
+ private static String dateWithRandomSecondOn2010_10_31_at_10_31() {
+ return String.format("2010-10-31T10:31:%02d.000Z",
+ _TestUtil.nextInt(random(), 0, 59));
+ }
+
+ private static final String[] currencies = { "USD", "EUR", "NOK" };
+
+ public static String randomCurrency() {
+ return currencies[random().nextInt(currencies.length)];
+ }
+
+ private static String randomEnumValue() {
+ return SEVERITY_ENUM_VALUES[random().nextInt(SEVERITY_ENUM_VALUES.length)];
+ }
+
/**
* Given a list of fieldNames, builds up a random sort string which is guaranteed to
* have at least 3 clauses, ending with the "id" field for tie breaking
@@ -958,15 +999,16 @@ public class CursorPagingTest extends So
String field = shuffledNames.get(i);
// wrap in a function sometimes
- if ( (!"score".equals(field))
+ if ( (!"score".equals(field) && !field.contains("bcd"))
&&
(0 == _TestUtil.nextInt(random(), 0, 7)) ) {
// specific function doesn't matter, just proving that we can handle the concept.
// but we do have to be careful with non numeric fields
- if (field.startsWith("str") || field.startsWith("bin")) {
- field = "if(exists(" + field + "),47,83)";
- } else {
+ if (field.contains("float") || field.contains("double")
+ || field.contains("int") || field.contains("long")) {
field = "abs(" + field + ")";
+ } else {
+ field = "if(exists(" + field + "),47,83)";
}
}
result.append(field).append(random().nextBoolean() ? " asc, " : " desc, ");
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/schema/SortableBinaryField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/schema/SortableBinaryField.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/schema/SortableBinaryField.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/schema/SortableBinaryField.java Sat Mar 29 02:39:14 2014
@@ -25,7 +25,6 @@ import org.apache.lucene.search.FieldCom
import org.apache.lucene.search.FieldComparatorSource;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BytesRef;
-import org.apache.solr.common.util.Base64;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -82,20 +81,11 @@ public class SortableBinaryField extends
@Override
public Object marshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- final BytesRef val = (BytesRef)value;
- return Base64.byteArrayToBase64(val.bytes, val.offset, val.length);
+ return marshalBase64SortValue(value);
}
@Override
public Object unmarshalSortValue(Object value) {
- if (null == value) {
- return null;
- }
- final String val = (String)value;
- final byte[] bytes = Base64.base64ToByteArray(val);
- return new BytesRef(bytes);
+ return unmarshalBase64SortValue(value);
}
}
Modified: lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/search/CursorMarkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/search/CursorMarkTest.java?rev=1582937&r1=1582936&r2=1582937&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/search/CursorMarkTest.java (original)
+++ lucene/dev/branches/lucene_solr_4_7/solr/core/src/test/org/apache/solr/search/CursorMarkTest.java Sat Mar 29 02:39:14 2014
@@ -17,10 +17,15 @@
package org.apache.solr.search;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.tokenattributes.TermToBytesRefAttribute;
+import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util._TestUtil;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.schema.DateField;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.request.SolrQueryRequest;
@@ -28,11 +33,14 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.CursorPagingTest;
import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_START;
+import java.io.IOException;
import java.util.Arrays;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Collection;
import java.util.Collections;
+import java.util.UUID;
import org.junit.BeforeClass;
@@ -51,7 +59,7 @@ public class CursorMarkTest extends Solr
initCore(CursorPagingTest.TEST_SOLRCONFIG_NAME, CursorPagingTest.TEST_SCHEMAXML_NAME);
}
- public void testNextCursorMark() {
+ public void testNextCursorMark() throws IOException {
final Collection<String> allFieldNames = getAllFieldNames();
final SolrQueryRequest req = req();
final IndexSchema schema = req.getSchema();
@@ -113,7 +121,7 @@ public class CursorMarkTest extends Solr
}
- public void testGarbageParsing() {
+ public void testGarbageParsing() throws IOException {
final SolrQueryRequest req = req();
final IndexSchema schema = req.getSchema();
final SortSpec ss = QueryParsing.parseSortSpec("str asc, float desc, id asc", req);
@@ -160,7 +168,7 @@ public class CursorMarkTest extends Solr
}
}
- public void testRoundTripParsing() {
+ public void testRoundTripParsing() throws IOException {
// for any valid SortSpec, and any legal values, we should be able to round
// trip serialize the totem and get the same values back.
@@ -196,7 +204,7 @@ public class CursorMarkTest extends Solr
}
}
- private static Object[] buildRandomSortObjects(SortSpec ss) {
+ private static Object[] buildRandomSortObjects(SortSpec ss) throws IOException {
List<SchemaField> fields = ss.getSchemaFields();
assertNotNull(fields);
Object[] results = new Object[fields.size()];
@@ -225,14 +233,64 @@ public class CursorMarkTest extends Solr
byte[] randBytes = new byte[_TestUtil.nextInt(random(), 1, 50)];
random().nextBytes(randBytes);
val = new BytesRef(randBytes);
- } else if (fieldName.startsWith("int")) {
- val = (Integer) random().nextInt();
- } else if (fieldName.startsWith("long")) {
- val = (Long) random().nextLong();
- } else if (fieldName.startsWith("float")) {
- val = (Float) random().nextFloat() * random().nextInt(); break;
- } else if (fieldName.startsWith("double")) {
- val = (Double) random().nextDouble() * random().nextInt(); break;
+ } else if (fieldName.startsWith("bcd")) {
+ if (fieldName.startsWith("bcd_long")) { // BCDLongField
+ val = Long.toString(random().nextLong());
+ val = sf.getType().toInternal((String)val);
+ val = sf.getType().unmarshalSortValue(val);
+ } else { // BCDIntField & BCDStrField
+ val = Integer.toString(random().nextInt());
+ val = sf.getType().toInternal((String)val);
+ val = sf.getType().unmarshalSortValue(val);
+ }
+ } else if (fieldName.contains("int")) {
+ val = random().nextInt(); // TrieIntField
+ if (fieldName.startsWith("legacy")) { // IntField
+ val = Integer.toString((Integer)val);
+ if (fieldName.startsWith("legacy_sortable")) { // SortableIntField
+ val = sf.getType().unmarshalSortValue(val);
+ }
+ }
+ } else if (fieldName.contains("long")) {
+ val = random().nextLong(); // TrieLongField
+ if (fieldName.startsWith("legacy")) { // LongField
+ val = Long.toString((Long)val);
+ if (fieldName.startsWith("legacy_sortable")) { // SortableLongField
+ val = sf.getType().unmarshalSortValue(val);
+ }
+ }
+ } else if (fieldName.contains("float")) {
+ val = random().nextFloat() * random().nextInt(); // TrieFloatField
+ if (fieldName.startsWith("legacy")) { // FloatField
+ val = Float.toString((Float)val);
+ if (fieldName.startsWith("legacy_sortable")) { // SortableFloatField
+ val = sf.getType().unmarshalSortValue(val);
+ }
+ }
+ } else if (fieldName.contains("double")) {
+ val = random().nextDouble() * random().nextInt(); // TrieDoubleField
+ if (fieldName.startsWith("legacy")) { // DoubleField
+ val = Double.toString((Double)val);
+ if (fieldName.startsWith("legacy_sortable")) { // SortableDoubleField
+ val = sf.getType().unmarshalSortValue(val);
+ }
+ }
+ } else if (fieldName.contains("date")) {
+ val = random().nextLong(); // TrieDateField
+ if (fieldName.startsWith("legacy_date")) { // DateField
+ val = ((DateField)sf.getType()).toInternal(new Date((Long)val));
+ val = sf.getType().unmarshalSortValue(val);
+ }
+ } else if (fieldName.startsWith("currency")) {
+ val = random().nextDouble();
+ } else if (fieldName.startsWith("uuid")) {
+ val = sf.getType().unmarshalSortValue(UUID.randomUUID().toString());
+ } else if (fieldName.startsWith("bool")) {
+ val = sf.getType().unmarshalSortValue(random().nextBoolean() ? "t" : "f");
+ } else if (fieldName.startsWith("enum")) {
+ val = random().nextInt(CursorPagingTest.SEVERITY_ENUM_VALUES.length);
+ } else if (fieldName.contains("collation")) {
+ val = getRandomCollation(sf);
} else {
fail("fell through the rabbit hole, new field in schema? = " + fieldName);
}
@@ -243,6 +301,28 @@ public class CursorMarkTest extends Solr
}
return results;
}
+
+ private static Object getRandomCollation(SchemaField sf) throws IOException {
+ Object val = null;
+ Analyzer analyzer = sf.getType().getAnalyzer();
+ String term = _TestUtil.randomRealisticUnicodeString(random());
+ TokenStream ts = analyzer.tokenStream("fake", term);
+ IOException priorException = null;
+ try {
+ TermToBytesRefAttribute termAtt = ts.addAttribute(TermToBytesRefAttribute.class);
+ val = termAtt.getBytesRef();
+ ts.reset();
+ assertTrue(ts.incrementToken());
+ termAtt.fillBytesRef();
+ assertFalse(ts.incrementToken());
+ ts.end();
+ } catch (IOException e) {
+ priorException = e;
+ } finally {
+ IOUtils.closeWhileHandlingException(priorException, ts);
+ }
+ return val;
+ }
/**
* a list of the fields in the schema - excluding _version_