Bug: Sort on a column of type 'short' throws an exception, closes #835.

This commit is contained in:
kimchy 2011-04-06 02:25:56 +03:00
parent 4721f9aa69
commit 35be46df71
3 changed files with 47 additions and 0 deletions

View File

@ -26,6 +26,7 @@ import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentBuilderString; import org.elasticsearch.common.xcontent.XContentBuilderString;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.facet.Facets; import org.elasticsearch.search.facet.Facets;
import org.elasticsearch.search.internal.InternalSearchResponse; import org.elasticsearch.search.internal.InternalSearchResponse;
@ -295,4 +296,16 @@ public class SearchResponse implements ActionResponse, ToXContent {
} }
out.writeVLong(tookInMillis); out.writeVLong(tookInMillis);
} }
@Override public String toString() {
try {
XContentBuilder builder = XContentFactory.jsonBuilder().prettyPrint();
builder.startObject();
toXContent(builder, EMPTY_PARAMS);
builder.endObject();
return builder.string();
} catch (IOException e) {
return "{ \"error\" : \"" + e.getMessage() + "\"}";
}
}
} }

View File

@ -577,6 +577,10 @@ public final class XContentBuilder {
field(name, ((Integer) value).intValue()); field(name, ((Integer) value).intValue());
} else if (type == Long.class) { } else if (type == Long.class) {
field(name, ((Long) value).longValue()); field(name, ((Long) value).longValue());
} else if (type == Short.class) {
field(name, ((Short) value).shortValue());
} else if (type == Byte.class) {
field(name, ((Byte) value).byteValue());
} else if (type == Boolean.class) { } else if (type == Boolean.class) {
field(name, ((Boolean) value).booleanValue()); field(name, ((Boolean) value).booleanValue());
} else if (type == Date.class) { } else if (type == Date.class) {
@ -624,6 +628,10 @@ public final class XContentBuilder {
field(name, ((Integer) value).intValue()); field(name, ((Integer) value).intValue());
} else if (type == Long.class) { } else if (type == Long.class) {
field(name, ((Long) value).longValue()); field(name, ((Long) value).longValue());
} else if (type == Short.class) {
field(name, ((Short) value).shortValue());
} else if (type == Byte.class) {
field(name, ((Byte) value).byteValue());
} else if (type == Boolean.class) { } else if (type == Boolean.class) {
field(name, ((Boolean) value).booleanValue()); field(name, ((Boolean) value).booleanValue());
} else if (type == Date.class) { } else if (type == Date.class) {
@ -668,6 +676,10 @@ public final class XContentBuilder {
value(((Integer) value).intValue()); value(((Integer) value).intValue());
} else if (type == Long.class) { } else if (type == Long.class) {
value(((Long) value).longValue()); value(((Long) value).longValue());
} else if (type == Short.class) {
value(((Short) value).shortValue());
} else if (type == Byte.class) {
value(((Byte) value).byteValue());
} else if (type == Boolean.class) { } else if (type == Boolean.class) {
value((Boolean) value); value((Boolean) value);
} else if (type == byte[].class) { } else if (type == byte[].class) {

View File

@ -189,6 +189,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(searchResponse.hits().getAt(i).sortValues()[0].toString(), equalTo(new String(new char[]{(char) (97 + (9 - i)), (char) (97 + (9 - i))}))); assertThat(searchResponse.hits().getAt(i).sortValues()[0].toString(), equalTo(new String(new char[]{(char) (97 + (9 - i)), (char) (97 + (9 - i))})));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
// BYTE // BYTE
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
@ -217,6 +219,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).byteValue(), equalTo((byte) (9 - i))); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).byteValue(), equalTo((byte) (9 - i)));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
// SHORT // SHORT
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
@ -245,6 +249,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).shortValue(), equalTo((short) (9 - i))); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).shortValue(), equalTo((short) (9 - i)));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
// INTEGER // INTEGER
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
@ -260,6 +266,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).intValue(), equalTo((int) i)); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).intValue(), equalTo((int) i));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
.setQuery(matchAllQuery()) .setQuery(matchAllQuery())
.setSize(10) .setSize(10)
@ -273,6 +281,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).intValue(), equalTo((int) (9 - i))); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).intValue(), equalTo((int) (9 - i)));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
// LONG // LONG
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
@ -288,6 +298,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).longValue(), equalTo((long) i)); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).longValue(), equalTo((long) i));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
.setQuery(matchAllQuery()) .setQuery(matchAllQuery())
.setSize(10) .setSize(10)
@ -301,6 +313,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).longValue(), equalTo((long) (9 - i))); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).longValue(), equalTo((long) (9 - i)));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
// FLOAT // FLOAT
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
@ -316,6 +330,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * i, 0.000001d)); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * i, 0.000001d));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
.setQuery(matchAllQuery()) .setQuery(matchAllQuery())
.setSize(10) .setSize(10)
@ -329,6 +345,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * (9 - i), 0.000001d)); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * (9 - i), 0.000001d));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
// DOUBLE // DOUBLE
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
@ -344,6 +362,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * i, 0.000001d)); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * i, 0.000001d));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
searchResponse = client.prepareSearch() searchResponse = client.prepareSearch()
.setQuery(matchAllQuery()) .setQuery(matchAllQuery())
.setSize(10) .setSize(10)
@ -356,6 +376,8 @@ public class SimpleSortTests extends AbstractNodesTests {
assertThat(searchResponse.hits().getAt(i).id(), equalTo(Integer.toString(9 - i))); assertThat(searchResponse.hits().getAt(i).id(), equalTo(Integer.toString(9 - i)));
assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * (9 - i), 0.000001d)); assertThat(((Number) searchResponse.hits().getAt(i).sortValues()[0]).doubleValue(), closeTo(0.1d * (9 - i), 0.000001d));
} }
assertThat(searchResponse.toString(), not(containsString("error")));
} }
@Test public void testDocumentsWithNullValue() throws Exception { @Test public void testDocumentsWithNullValue() throws Exception {