summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/index/query
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/query')
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/BaseTermQueryBuilder.java20
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java6
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java25
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/MissingQueryBuilder.java4
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java17
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/NotQueryBuilder.java10
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java20
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryBuilders.java8
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryFilterBuilder.java10
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryFilterParser.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java22
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java96
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/RangeQueryParser.java9
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java36
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java14
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java21
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java24
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java22
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java16
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java36
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanNearQueryParser.java11
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java24
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java34
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanOrQueryParser.java7
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java24
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryParser.java1
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java14
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java2
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/TypeQueryBuilder.java17
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java20
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java35
32 files changed, 239 insertions, 370 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/query/BaseTermQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/BaseTermQueryBuilder.java
index 64441845dd..06666b7412 100644
--- a/core/src/main/java/org/elasticsearch/index/query/BaseTermQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/BaseTermQueryBuilder.java
@@ -20,6 +20,7 @@
package org.elasticsearch.index.query;
import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -105,6 +106,12 @@ public abstract class BaseTermQueryBuilder<QB extends BaseTermQueryBuilder<QB>>
* @param value The value of the term
*/
public BaseTermQueryBuilder(String fieldName, Object value) {
+ if (Strings.isEmpty(fieldName)) {
+ throw new IllegalArgumentException("field name is null or empty");
+ }
+ if (value == null) {
+ throw new IllegalArgumentException("value cannot be null");
+ }
this.fieldName = fieldName;
this.value = convertToBytesRefIfString(value);
}
@@ -132,19 +139,6 @@ public abstract class BaseTermQueryBuilder<QB extends BaseTermQueryBuilder<QB>>
builder.endObject();
}
- /** Returns a {@link QueryValidationException} if fieldName is null or empty, or if value is null. */
- @Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (fieldName == null || fieldName.isEmpty()) {
- validationException = addValidationError("field name cannot be null or empty.", validationException);
- }
- if (value == null) {
- validationException = addValidationError("value cannot be null.", validationException);
- }
- return validationException;
- }
-
@Override
protected final int doHashCode() {
return Objects.hash(fieldName, value);
diff --git a/core/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java
index c9fb296fc4..b85db4b66b 100644
--- a/core/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java
@@ -143,12 +143,6 @@ public class IdsQueryBuilder extends AbstractQueryBuilder<IdsQueryBuilder> {
}
@Override
- public QueryValidationException validate() {
- // all fields can be empty or null
- return null;
- }
-
- @Override
protected IdsQueryBuilder doReadFrom(StreamInput in) throws IOException {
IdsQueryBuilder idsQueryBuilder = new IdsQueryBuilder(in.readStringArray());
idsQueryBuilder.addIds(in.readStringArray());
diff --git a/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java
index 3057df0be0..b4c7b53a99 100644
--- a/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java
@@ -45,6 +45,12 @@ public class IndicesQueryBuilder extends AbstractQueryBuilder<IndicesQueryBuilde
static final IndicesQueryBuilder PROTOTYPE = new IndicesQueryBuilder(EmptyQueryBuilder.PROTOTYPE, "index");
public IndicesQueryBuilder(QueryBuilder innerQuery, String... indices) {
+ if (innerQuery == null) {
+ throw new IllegalArgumentException("inner query cannot be null");
+ }
+ if (indices == null || indices.length == 0) {
+ throw new IllegalArgumentException("list of indices cannot be null or empty");
+ }
this.innerQuery = Objects.requireNonNull(innerQuery);
this.indices = indices;
}
@@ -61,7 +67,10 @@ public class IndicesQueryBuilder extends AbstractQueryBuilder<IndicesQueryBuilde
* Sets the query to use when it executes on an index that does not match the indices provided.
*/
public IndicesQueryBuilder noMatchQuery(QueryBuilder noMatchQuery) {
- this.noMatchQuery = (noMatchQuery != null) ? noMatchQuery : defaultNoMatchQuery();
+ if (noMatchQuery == null) {
+ throw new IllegalArgumentException("noMatch query cannot be null");
+ }
+ this.noMatchQuery = noMatchQuery;
return this;
}
@@ -115,20 +124,6 @@ public class IndicesQueryBuilder extends AbstractQueryBuilder<IndicesQueryBuilde
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (this.innerQuery == null) {
- validationException = addValidationError("inner query cannot be null", validationException);
- }
- if (this.indices == null || this.indices.length == 0) {
- validationException = addValidationError("list of indices cannot be null or empty", validationException);
- }
- validationException = validateInnerQuery(innerQuery, validationException);
- validationException = validateInnerQuery(noMatchQuery, validationException);
- return validationException;
- }
-
- @Override
protected IndicesQueryBuilder doReadFrom(StreamInput in) throws IOException {
IndicesQueryBuilder indicesQueryBuilder = new IndicesQueryBuilder(in.readQuery(), in.readStringArray());
indicesQueryBuilder.noMatchQuery = in.readQuery();
diff --git a/core/src/main/java/org/elasticsearch/index/query/MissingQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/MissingQueryBuilder.java
index 031204b4e8..c3d0ab7c5b 100644
--- a/core/src/main/java/org/elasticsearch/index/query/MissingQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/MissingQueryBuilder.java
@@ -50,9 +50,9 @@ public class MissingQueryBuilder extends AbstractQueryBuilder<MissingQueryBuilde
private final String fieldPattern;
- private boolean nullValue = DEFAULT_NULL_VALUE;
+ private final boolean nullValue;
- private boolean existence = DEFAULT_EXISTENCE_VALUE;
+ private final boolean existence;
static final MissingQueryBuilder PROTOTYPE = new MissingQueryBuilder("field", DEFAULT_NULL_VALUE, DEFAULT_EXISTENCE_VALUE);
diff --git a/core/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java
index fae2a575f8..05161c7fec 100644
--- a/core/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java
@@ -58,7 +58,7 @@ public class MultiMatchQueryBuilder extends AbstractQueryBuilder<MultiMatchQuery
public static final MatchQuery.ZeroTermsQuery DEFAULT_ZERO_TERMS_QUERY = MatchQuery.DEFAULT_ZERO_TERMS_QUERY;
private final Object value;
- private Map<String, Float> fieldsBoosts = new TreeMap<>();
+ private final Map<String, Float> fieldsBoosts;
private MultiMatchQueryBuilder.Type type = DEFAULT_TYPE;
private Operator operator = DEFAULT_OPERATOR;
private String analyzer;
@@ -162,7 +162,7 @@ public class MultiMatchQueryBuilder extends AbstractQueryBuilder<MultiMatchQuery
out.writeVInt(this.ordinal());
}
}
-
+
/**
* Returns the type (for testing)
*/
@@ -177,7 +177,11 @@ public class MultiMatchQueryBuilder extends AbstractQueryBuilder<MultiMatchQuery
if (value == null) {
throw new IllegalArgumentException("[" + NAME + "] requires query value");
}
+ if (fields == null) {
+ throw new IllegalArgumentException("[" + NAME + "] requires fields at initalization time");
+ }
this.value = value;
+ this.fieldsBoosts = new TreeMap<>();
for (String field : fields) {
field(field);
}
@@ -567,15 +571,6 @@ public class MultiMatchQueryBuilder extends AbstractQueryBuilder<MultiMatchQuery
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (fieldsBoosts.isEmpty()) {
- validationException = addValidationError("no fields specified for multi_match query.", validationException);
- }
- return validationException;
- }
-
- @Override
protected MultiMatchQueryBuilder doReadFrom(StreamInput in) throws IOException {
MultiMatchQueryBuilder multiMatchQuery = new MultiMatchQueryBuilder(in.readGenericValue());
int size = in.readVInt();
diff --git a/core/src/main/java/org/elasticsearch/index/query/NotQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/NotQueryBuilder.java
index a26ebb78a0..72b70a7d12 100644
--- a/core/src/main/java/org/elasticsearch/index/query/NotQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/NotQueryBuilder.java
@@ -37,9 +37,12 @@ public class NotQueryBuilder extends AbstractQueryBuilder<NotQueryBuilder> {
private final QueryBuilder filter;
- static final NotQueryBuilder PROTOTYPE = new NotQueryBuilder(null);
+ static final NotQueryBuilder PROTOTYPE = new NotQueryBuilder(EmptyQueryBuilder.PROTOTYPE);
public NotQueryBuilder(QueryBuilder filter) {
+ if (filter == null) {
+ throw new IllegalArgumentException("inner filter cannot be null");
+ }
this.filter = filter;
}
@@ -69,11 +72,6 @@ public class NotQueryBuilder extends AbstractQueryBuilder<NotQueryBuilder> {
}
@Override
- public QueryValidationException validate() {
- return validateInnerQuery(filter, null);
- }
-
- @Override
protected int doHashCode() {
return Objects.hash(filter);
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java
index a49580cb3f..f5ca136026 100644
--- a/core/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java
@@ -47,7 +47,7 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
private String rewrite;
- static final PrefixQueryBuilder PROTOTYPE = new PrefixQueryBuilder(null, null);
+ static final PrefixQueryBuilder PROTOTYPE = new PrefixQueryBuilder("field", "value");
/**
* A Query that matches documents containing terms with a specified prefix.
@@ -56,6 +56,12 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
* @param value The prefix query
*/
public PrefixQueryBuilder(String fieldName, String value) {
+ if (Strings.isEmpty(fieldName)) {
+ throw new IllegalArgumentException("field name is null or empty");
+ }
+ if (value == null) {
+ throw new IllegalArgumentException("value cannot be null.");
+ }
this.fieldName = fieldName;
this.value = value;
}
@@ -116,18 +122,6 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (Strings.isEmpty(this.fieldName)) {
- validationException = addValidationError("field name cannot be null or empty.", validationException);
- }
- if (this.value == null) {
- validationException = addValidationError("query text cannot be null", validationException);
- }
- return validationException;
- }
-
- @Override
protected PrefixQueryBuilder doReadFrom(StreamInput in) throws IOException {
PrefixQueryBuilder prefixQueryBuilder = new PrefixQueryBuilder(in.readString(), in.readString());
prefixQueryBuilder.rewrite = in.readOptionalString();
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryBuilders.java b/core/src/main/java/org/elasticsearch/index/query/QueryBuilders.java
index 6a46833aab..831b00f6d3 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryBuilders.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryBuilders.java
@@ -313,16 +313,16 @@ public abstract class QueryBuilders {
return new SpanFirstQueryBuilder(match, end);
}
- public static SpanNearQueryBuilder spanNearQuery(int slop) {
- return new SpanNearQueryBuilder(slop);
+ public static SpanNearQueryBuilder spanNearQuery(SpanQueryBuilder initialClause, int slop) {
+ return new SpanNearQueryBuilder(initialClause, slop);
}
public static SpanNotQueryBuilder spanNotQuery(SpanQueryBuilder include, SpanQueryBuilder exclude) {
return new SpanNotQueryBuilder(include, exclude);
}
- public static SpanOrQueryBuilder spanOrQuery() {
- return new SpanOrQueryBuilder();
+ public static SpanOrQueryBuilder spanOrQuery(SpanQueryBuilder initialClause) {
+ return new SpanOrQueryBuilder(initialClause);
}
/** Creates a new {@code span_within} builder.
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryFilterBuilder.java b/core/src/main/java/org/elasticsearch/index/query/QueryFilterBuilder.java
index 2b918c8e01..4ca9e1598e 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryFilterBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryFilterBuilder.java
@@ -41,7 +41,7 @@ public class QueryFilterBuilder extends AbstractQueryBuilder<QueryFilterBuilder>
private final QueryBuilder queryBuilder;
- static final QueryFilterBuilder PROTOTYPE = new QueryFilterBuilder(null);
+ static final QueryFilterBuilder PROTOTYPE = new QueryFilterBuilder(EmptyQueryBuilder.PROTOTYPE);
/**
* A filter that simply wraps a query.
@@ -49,6 +49,9 @@ public class QueryFilterBuilder extends AbstractQueryBuilder<QueryFilterBuilder>
* @param queryBuilder The query to wrap as a filter
*/
public QueryFilterBuilder(QueryBuilder queryBuilder) {
+ if (queryBuilder == null) {
+ throw new IllegalArgumentException("inner query cannot be null");
+ }
this.queryBuilder = queryBuilder;
}
@@ -81,11 +84,6 @@ public class QueryFilterBuilder extends AbstractQueryBuilder<QueryFilterBuilder>
}
@Override
- public QueryValidationException validate() {
- return validateInnerQuery(queryBuilder, null);
- }
-
- @Override
protected int doHashCode() {
return Objects.hash(queryBuilder);
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryFilterParser.java b/core/src/main/java/org/elasticsearch/index/query/QueryFilterParser.java
index 0b38776f2f..db375b64b5 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryFilterParser.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryFilterParser.java
@@ -19,8 +19,6 @@
package org.elasticsearch.index.query;
-import org.elasticsearch.common.inject.Inject;
-
import java.io.IOException;
/**
diff --git a/core/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java
index fb13083b46..5c0f679bfc 100644
--- a/core/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java
@@ -67,10 +67,10 @@ public class QueryStringQueryBuilder extends AbstractQueryBuilder<QueryStringQue
public static final Operator DEFAULT_OPERATOR = Operator.OR;
public static final Locale DEFAULT_LOCALE = Locale.ROOT;
- static final QueryStringQueryBuilder PROTOTYPE = new QueryStringQueryBuilder(null);
-
+ static final QueryStringQueryBuilder PROTOTYPE = new QueryStringQueryBuilder("");
+
private final String queryString;
-
+
private String defaultField;
/**
* Fields to query against. If left empty will query default field,
@@ -104,7 +104,7 @@ public class QueryStringQueryBuilder extends AbstractQueryBuilder<QueryStringQue
private Fuzziness fuzziness = DEFAULT_FUZZINESS;
private int fuzzyPrefixLength = DEFAULT_FUZZY_PREFIX_LENGTH;
-
+
private int fuzzyMaxExpansions = DEFAULT_FUZZY_MAX_EXPANSIONS;
private String rewrite;
@@ -127,8 +127,11 @@ public class QueryStringQueryBuilder extends AbstractQueryBuilder<QueryStringQue
/** To limit effort spent determinizing regexp queries. */
private int maxDeterminizedStates = DEFAULT_MAX_DETERMINED_STATES;
-
+
public QueryStringQueryBuilder(String queryString) {
+ if (queryString == null) {
+ throw new IllegalArgumentException("query text missing");
+ }
this.queryString = queryString;
}
@@ -530,15 +533,6 @@ public class QueryStringQueryBuilder extends AbstractQueryBuilder<QueryStringQue
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (queryString == null) {
- validationException = addValidationError("query text missing", null);
- }
- return validationException;
- }
-
- @Override
protected QueryStringQueryBuilder doReadFrom(StreamInput in) throws IOException {
QueryStringQueryBuilder queryStringQueryBuilder = new QueryStringQueryBuilder(in.readString());
queryStringQueryBuilder.defaultField = in.readOptionalString();
diff --git a/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java
index 0db4152714..1c8b57c387 100644
--- a/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/RangeQueryBuilder.java
@@ -22,9 +22,11 @@ package org.elasticsearch.index.query;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermRangeQuery;
import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.joda.DateMathParser;
+import org.elasticsearch.common.joda.FormatDateTimeFormatter;
import org.elasticsearch.common.joda.Joda;
import org.elasticsearch.common.lucene.BytesRefs;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -52,15 +54,15 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
private Object to;
- private String timeZone;
+ private DateTimeZone timeZone;
private boolean includeLower = DEFAULT_INCLUDE_LOWER;
private boolean includeUpper = DEFAULT_INCLUDE_UPPER;
- private String format;
+ private FormatDateTimeFormatter format;
- static final RangeQueryBuilder PROTOTYPE = new RangeQueryBuilder(null);
+ static final RangeQueryBuilder PROTOTYPE = new RangeQueryBuilder("field");
/**
* A Query that matches documents within an range of terms.
@@ -68,6 +70,9 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
* @param fieldName The field name
*/
public RangeQueryBuilder(String fieldName) {
+ if (Strings.isEmpty(fieldName)) {
+ throw new IllegalArgumentException("field name is null or empty");
+ }
this.fieldName = fieldName;
}
@@ -191,8 +196,11 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
/**
* In case of date field, we can adjust the from/to fields using a timezone
*/
- public RangeQueryBuilder timeZone(String timezone) {
- this.timeZone = timezone;
+ public RangeQueryBuilder timeZone(String timeZone) {
+ if (timeZone == null) {
+ throw new IllegalArgumentException("timezone cannot be null");
+ }
+ this.timeZone = DateTimeZone.forID(timeZone);
return this;
}
@@ -200,14 +208,17 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
* In case of date field, gets the from/to fields timezone adjustment
*/
public String timeZone() {
- return this.timeZone;
+ return this.timeZone == null ? null : this.timeZone.getID();
}
/**
* In case of format field, we can parse the from/to fields using this time format
*/
public RangeQueryBuilder format(String format) {
- this.format = format;
+ if (format == null) {
+ throw new IllegalArgumentException("format cannot be null");
+ }
+ this.format = Joda.forPattern(format);
return this;
}
@@ -215,7 +226,7 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
* Gets the format field to parse the from/to fields
*/
public String format() {
- return this.format;
+ return this.format == null ? null : this.format.format();
}
@Override
@@ -227,10 +238,10 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
builder.field("include_lower", includeLower);
builder.field("include_upper", includeUpper);
if (timeZone != null) {
- builder.field("time_zone", timeZone);
+ builder.field("time_zone", timeZone.getID());
}
if (format != null) {
- builder.field("format", format);
+ builder.field("format", format.format());
}
printBoostAndQueryName(builder);
builder.endObject();
@@ -250,13 +261,9 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
if (mapper instanceof DateFieldMapper.DateFieldType) {
DateMathParser forcedDateParser = null;
if (this.format != null) {
- forcedDateParser = new DateMathParser(Joda.forPattern(this.format));
+ forcedDateParser = new DateMathParser(this.format);
}
- DateTimeZone dateTimeZone = null;
- if (this.timeZone != null) {
- dateTimeZone = DateTimeZone.forID(this.timeZone);
- }
- query = ((DateFieldMapper.DateFieldType) mapper).rangeQuery(from, to, includeLower, includeUpper, dateTimeZone, forcedDateParser);
+ query = ((DateFieldMapper.DateFieldType) mapper).rangeQuery(from, to, includeLower, includeUpper, timeZone, forcedDateParser);
} else {
if (timeZone != null) {
throw new QueryShardException(context, "[range] time_zone can not be applied to non date field ["
@@ -279,39 +286,20 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (this.fieldName == null || this.fieldName.isEmpty()) {
- validationException = addValidationError("field name cannot be null or empty.", validationException);
- }
- if (this.timeZone != null) {
- try {
- DateTimeZone.forID(this.timeZone);
- } catch (Exception e) {
- validationException = addValidationError("error parsing timezone." + e.getMessage(),
- validationException);
- }
- }
- if (this.format != null) {
- try {
- Joda.forPattern(this.format);
- } catch (Exception e) {
- validationException = addValidationError("error parsing format." + e.getMessage(),
- validationException);
- }
- }
- return validationException;
- }
-
- @Override
protected RangeQueryBuilder doReadFrom(StreamInput in) throws IOException {
RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder(in.readString());
rangeQueryBuilder.from = in.readGenericValue();
rangeQueryBuilder.to = in.readGenericValue();
rangeQueryBuilder.includeLower = in.readBoolean();
rangeQueryBuilder.includeUpper = in.readBoolean();
- rangeQueryBuilder.timeZone = in.readOptionalString();
- rangeQueryBuilder.format = in.readOptionalString();
+ String timeZoneId = in.readOptionalString();
+ if (timeZoneId != null) {
+ rangeQueryBuilder.timeZone = DateTimeZone.forID(timeZoneId);
+ }
+ String formatString = in.readOptionalString();
+ if (formatString != null) {
+ rangeQueryBuilder.format = Joda.forPattern(formatString);
+ }
return rangeQueryBuilder;
}
@@ -322,23 +310,35 @@ public class RangeQueryBuilder extends AbstractQueryBuilder<RangeQueryBuilder> i
out.writeGenericValue(this.to);
out.writeBoolean(this.includeLower);
out.writeBoolean(this.includeUpper);
- out.writeOptionalString(this.timeZone);
- out.writeOptionalString(this.format);
+ String timeZoneId = null;
+ if (this.timeZone != null) {
+ timeZoneId = this.timeZone.getID();
+ }
+ out.writeOptionalString(timeZoneId);
+ String formatString = null;
+ if (this.format != null) {
+ formatString = this.format.format();
+ }
+ out.writeOptionalString(formatString);
}
@Override
protected int doHashCode() {
- return Objects.hash(fieldName, from, to, timeZone, includeLower, includeUpper, format);
+ String timeZoneId = timeZone == null ? null : timeZone.getID();
+ String formatString = format == null ? null : format.format();
+ return Objects.hash(fieldName, from, to, timeZoneId, includeLower, includeUpper, formatString);
}
@Override
protected boolean doEquals(RangeQueryBuilder other) {
+ String timeZoneId = timeZone == null ? null : timeZone.getID();
+ String formatString = format == null ? null : format.format();
return Objects.equals(fieldName, other.fieldName) &&
Objects.equals(from, other.from) &&
Objects.equals(to, other.to) &&
- Objects.equals(timeZone, other.timeZone) &&
+ Objects.equals(timeZoneId, other.timeZone()) &&
Objects.equals(includeLower, other.includeLower) &&
Objects.equals(includeUpper, other.includeUpper) &&
- Objects.equals(format, other.format);
+ Objects.equals(formatString, other.format());
}
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/RangeQueryParser.java b/core/src/main/java/org/elasticsearch/index/query/RangeQueryParser.java
index b9a3783b4f..1dcd98f8cb 100644
--- a/core/src/main/java/org/elasticsearch/index/query/RangeQueryParser.java
+++ b/core/src/main/java/org/elasticsearch/index/query/RangeQueryParser.java
@@ -20,7 +20,6 @@
package org.elasticsearch.index.query;
import org.elasticsearch.common.ParseField;
-import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.xcontent.XContentParser;
import java.io.IOException;
@@ -114,10 +113,14 @@ public class RangeQueryParser extends BaseQueryParser<RangeQueryBuilder> {
rangeQuery.to(to);
rangeQuery.includeLower(includeLower);
rangeQuery.includeUpper(includeUpper);
- rangeQuery.timeZone(timeZone);
+ if (timeZone != null) {
+ rangeQuery.timeZone(timeZone);
+ }
rangeQuery.boost(boost);
rangeQuery.queryName(queryName);
- rangeQuery.format(format);
+ if (format != null) {
+ rangeQuery.format(format);
+ }
return rangeQuery;
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java
index 6399089b34..f596bf84d5 100644
--- a/core/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java
@@ -47,24 +47,30 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
public static final int DEFAULT_MAX_DETERMINIZED_STATES = Operations.DEFAULT_MAX_DETERMINIZED_STATES;
private final String fieldName;
-
+
private final String value;
-
+
private int flagsValue = DEFAULT_FLAGS_VALUE;
-
+
private int maxDeterminizedStates = DEFAULT_MAX_DETERMINIZED_STATES;
-
+
private String rewrite;
-
- static final RegexpQueryBuilder PROTOTYPE = new RegexpQueryBuilder(null, null);
+
+ static final RegexpQueryBuilder PROTOTYPE = new RegexpQueryBuilder("field", "value");
/**
* Constructs a new regex query.
- *
+ *
* @param fieldName The name of the field
* @param value The regular expression
*/
public RegexpQueryBuilder(String fieldName, String value) {
+ if (Strings.isEmpty(fieldName)) {
+ throw new IllegalArgumentException("field name is null or empty");
+ }
+ if (value == null) {
+ throw new IllegalArgumentException("value cannot be null.");
+ }
this.fieldName = fieldName;
this.value = value;
}
@@ -114,7 +120,7 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
this.maxDeterminizedStates = value;
return this;
}
-
+
public int maxDeterminizedStates() {
return this.maxDeterminizedStates;
}
@@ -123,7 +129,7 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
this.rewrite = rewrite;
return this;
}
-
+
public String rewrite() {
return this.rewrite;
}
@@ -168,18 +174,6 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (Strings.isEmpty(this.fieldName)) {
- validationException = addValidationError("field name cannot be null or empty.", validationException);
- }
- if (this.value == null) {
- validationException = addValidationError("query text cannot be null", validationException);
- }
- return validationException;
- }
-
- @Override
public RegexpQueryBuilder doReadFrom(StreamInput in) throws IOException {
RegexpQueryBuilder regexpQueryBuilder = new RegexpQueryBuilder(in.readString(), in.readString());
regexpQueryBuilder.flagsValue = in.readVInt();
diff --git a/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
index 519f065b91..45ab7454d6 100644
--- a/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/ScriptQueryBuilder.java
@@ -39,11 +39,14 @@ public class ScriptQueryBuilder extends AbstractQueryBuilder<ScriptQueryBuilder>
public static final String NAME = "script";
- static final ScriptQueryBuilder PROTOTYPE = new ScriptQueryBuilder(null);
+ static final ScriptQueryBuilder PROTOTYPE = new ScriptQueryBuilder(new Script(""));
private final Script script;
public ScriptQueryBuilder(Script script) {
+ if (script == null) {
+ throw new IllegalArgumentException("script cannot be null");
+ }
this.script = script;
}
@@ -69,15 +72,6 @@ public class ScriptQueryBuilder extends AbstractQueryBuilder<ScriptQueryBuilder>
return new ScriptQuery(script, context.scriptService(), context.lookup());
}
- @Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (this.script == null) {
- validationException = addValidationError("script cannot be null", validationException);
- }
- return validationException;
- }
-
static class ScriptQuery extends Query {
private final Script script;
diff --git a/core/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java
index 4f90097a14..3f8cc5d7e2 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java
@@ -63,7 +63,7 @@ public class SimpleQueryStringBuilder extends AbstractQueryBuilder<SimpleQuerySt
/** Name for (de-)serialization. */
public static final String NAME = "simple_query_string";
- static final SimpleQueryStringBuilder PROTOTYPE = new SimpleQueryStringBuilder(null);
+ static final SimpleQueryStringBuilder PROTOTYPE = new SimpleQueryStringBuilder("");
/** Query text to parse. */
private final String queryText;
@@ -90,6 +90,9 @@ public class SimpleQueryStringBuilder extends AbstractQueryBuilder<SimpleQuerySt
/** Construct a new simple query with this query string. */
public SimpleQueryStringBuilder(String queryText) {
+ if (queryText == null) {
+ throw new IllegalArgumentException("query text missing");
+ }
this.queryText = queryText;
}
@@ -245,22 +248,6 @@ public class SimpleQueryStringBuilder extends AbstractQueryBuilder<SimpleQuerySt
return minimumShouldMatch;
}
- /**
- * {@inheritDoc}
- *
- * Checks that mandatory queryText is neither null nor empty.
- * */
- @Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- // Query text is required
- if (queryText == null) {
- validationException = addValidationError("query text missing", validationException);
- }
-
- return validationException;
- }
-
@Override
protected Query doToQuery(QueryShardContext context) throws IOException {
// field names in builder can have wildcards etc, need to resolve them here
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java
index 81aa01c859..485ffff9f9 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanContainingQueryBuilder.java
@@ -37,13 +37,19 @@ public class SpanContainingQueryBuilder extends AbstractQueryBuilder<SpanContain
public static final String NAME = "span_containing";
private final SpanQueryBuilder big;
private final SpanQueryBuilder little;
- static final SpanContainingQueryBuilder PROTOTYPE = new SpanContainingQueryBuilder(null, null);
+ static final SpanContainingQueryBuilder PROTOTYPE = new SpanContainingQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, SpanTermQueryBuilder.PROTOTYPE);
/**
* @param big the big clause, it must enclose {@code little} for a match.
* @param little the little clause, it must be contained within {@code big} for a match.
*/
public SpanContainingQueryBuilder(SpanQueryBuilder big, SpanQueryBuilder little) {
+ if (big == null) {
+ throw new IllegalArgumentException("inner clause [big] cannot be null.");
+ }
+ if (little == null) {
+ throw new IllegalArgumentException("inner clause [little] cannot be null.");
+ }
this.little = little;
this.big = big;
}
@@ -83,22 +89,6 @@ public class SpanContainingQueryBuilder extends AbstractQueryBuilder<SpanContain
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (big == null) {
- validationException = addValidationError("inner clause [big] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(big, validationException);
- }
- if (little == null) {
- validationException = addValidationError("inner clause [little] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(little, validationException);
- }
- return validationException;
- }
-
- @Override
protected SpanContainingQueryBuilder doReadFrom(StreamInput in) throws IOException {
SpanQueryBuilder big = (SpanQueryBuilder)in.readQuery();
SpanQueryBuilder little = (SpanQueryBuilder)in.readQuery();
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java
index a7c4572fb1..b4dcd3006e 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanFirstQueryBuilder.java
@@ -37,7 +37,7 @@ public class SpanFirstQueryBuilder extends AbstractQueryBuilder<SpanFirstQueryBu
private final int end;
- static final SpanFirstQueryBuilder PROTOTYPE = new SpanFirstQueryBuilder(null, -1);
+ static final SpanFirstQueryBuilder PROTOTYPE = new SpanFirstQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, 0);
/**
* Query that matches spans queries defined in <code>matchBuilder</code>
@@ -47,6 +47,12 @@ public class SpanFirstQueryBuilder extends AbstractQueryBuilder<SpanFirstQueryBu
* @throws IllegalArgumentException for negative <code>end</code> positions
*/
public SpanFirstQueryBuilder(SpanQueryBuilder matchBuilder, int end) {
+ if (matchBuilder == null) {
+ throw new IllegalArgumentException("inner span query cannot be null");
+ }
+ if (end < 0) {
+ throw new IllegalArgumentException("parameter [end] needs to be positive.");
+ }
this.matchBuilder = matchBuilder;
this.end = end;
}
@@ -83,20 +89,6 @@ public class SpanFirstQueryBuilder extends AbstractQueryBuilder<SpanFirstQueryBu
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (matchBuilder == null) {
- validationException = addValidationError("inner clause [match] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(matchBuilder, validationException);
- }
- if (end < 0) {
- validationException = addValidationError("parameter [end] needs to be positive.", validationException);
- }
- return validationException;
- }
-
- @Override
protected SpanFirstQueryBuilder doReadFrom(StreamInput in) throws IOException {
SpanQueryBuilder matchBuilder = (SpanQueryBuilder)in.readQuery();
int end = in.readInt();
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java
index a31b17e7c5..eac2e6a0a7 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilder.java
@@ -36,9 +36,12 @@ public class SpanMultiTermQueryBuilder extends AbstractQueryBuilder<SpanMultiTer
public static final String NAME = "span_multi";
private final MultiTermQueryBuilder multiTermQueryBuilder;
- static final SpanMultiTermQueryBuilder PROTOTYPE = new SpanMultiTermQueryBuilder(null);
+ static final SpanMultiTermQueryBuilder PROTOTYPE = new SpanMultiTermQueryBuilder(RangeQueryBuilder.PROTOTYPE);
public SpanMultiTermQueryBuilder(MultiTermQueryBuilder multiTermQueryBuilder) {
+ if (multiTermQueryBuilder == null) {
+ throw new IllegalArgumentException("inner multi term query cannot be null");
+ }
this.multiTermQueryBuilder = multiTermQueryBuilder;
}
@@ -67,17 +70,6 @@ public class SpanMultiTermQueryBuilder extends AbstractQueryBuilder<SpanMultiTer
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (multiTermQueryBuilder == null) {
- validationException = addValidationError("inner clause ["+ SpanMultiTermQueryParser.MATCH_NAME +"] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(multiTermQueryBuilder, validationException);
- }
- return validationException;
- }
-
- @Override
protected SpanMultiTermQueryBuilder doReadFrom(StreamInput in) throws IOException {
MultiTermQueryBuilder multiTermBuilder = (MultiTermQueryBuilder)in.readQuery();
return new SpanMultiTermQueryBuilder(multiTermBuilder);
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java
index e00cc32e68..b933cede24 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryBuilder.java
@@ -54,12 +54,17 @@ public class SpanNearQueryBuilder extends AbstractQueryBuilder<SpanNearQueryBuil
private boolean collectPayloads = DEFAULT_COLLECT_PAYLOADS;
- static final SpanNearQueryBuilder PROTOTYPE = new SpanNearQueryBuilder(0);
+ static final SpanNearQueryBuilder PROTOTYPE = new SpanNearQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, 0);
/**
+ * @param initialClause an initial span query clause
* @param slop controls the maximum number of intervening unmatched positions permitted
*/
- public SpanNearQueryBuilder(int slop) {
+ public SpanNearQueryBuilder(SpanQueryBuilder initialClause, int slop) {
+ if (initialClause == null) {
+ throw new IllegalArgumentException("query must include at least one clause");
+ }
+ this.clauses.add(initialClause);
this.slop = slop;
}
@@ -71,6 +76,9 @@ public class SpanNearQueryBuilder extends AbstractQueryBuilder<SpanNearQueryBuil
}
public SpanNearQueryBuilder clause(SpanQueryBuilder clause) {
+ if (clause == null) {
+ throw new IllegalArgumentException("query clauses cannot be null");
+ }
clauses.add(clause);
return this;
}
@@ -141,27 +149,11 @@ public class SpanNearQueryBuilder extends AbstractQueryBuilder<SpanNearQueryBuil
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (clauses.isEmpty()) {
- validationException = addValidationError("query must include [clauses]", validationException);
- }
- for (SpanQueryBuilder innerClause : clauses) {
- if (innerClause == null) {
- validationException = addValidationError("[clauses] contains null element", validationException);
- } else {
- validationException = validateInnerQuery(innerClause, validationException);
- }
- }
- return validationException;
- }
-
- @Override
protected SpanNearQueryBuilder doReadFrom(StreamInput in) throws IOException {
- SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder(in.readVInt());
List<QueryBuilder> clauses = readQueries(in);
- for (QueryBuilder subClause : clauses) {
- queryBuilder.clauses.add((SpanQueryBuilder)subClause);
+ SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder((SpanQueryBuilder)clauses.get(0), in.readVInt());
+ for (int i = 1; i < clauses.size(); i++) {
+ queryBuilder.clauses.add((SpanQueryBuilder)clauses.get(i));
}
queryBuilder.collectPayloads = in.readBoolean();
queryBuilder.inOrder = in.readBoolean();
@@ -171,8 +163,8 @@ public class SpanNearQueryBuilder extends AbstractQueryBuilder<SpanNearQueryBuil
@Override
protected void doWriteTo(StreamOutput out) throws IOException {
- out.writeVInt(slop);
writeQueries(out, clauses);
+ out.writeVInt(slop);
out.writeBoolean(collectPayloads);
out.writeBoolean(inOrder);
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryParser.java b/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryParser.java
index f522a6cacf..1d6c61f364 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryParser.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanNearQueryParser.java
@@ -20,7 +20,6 @@
package org.elasticsearch.index.query;
import org.elasticsearch.common.Strings;
-import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.xcontent.XContentParser;
import java.io.IOException;
@@ -85,13 +84,17 @@ public class SpanNearQueryParser extends BaseQueryParser<SpanNearQueryBuilder> {
}
}
+ if (clauses.isEmpty()) {
+ throw new QueryParsingException(parseContext, "span_near must include [clauses]");
+ }
+
if (slop == null) {
throw new QueryParsingException(parseContext, "span_near must include [slop]");
}
- SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder(slop);
- for (SpanQueryBuilder subQuery : clauses) {
- queryBuilder.clause(subQuery);
+ SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder(clauses.get(0), slop);
+ for (int i = 1; i < clauses.size(); i++) {
+ queryBuilder.clause(clauses.get(i));
}
queryBuilder.inOrder(inOrder);
queryBuilder.collectPayloads(collectPayloads);
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java
index 3af88e315c..ffe3cecf41 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanNotQueryBuilder.java
@@ -46,7 +46,7 @@ public class SpanNotQueryBuilder extends AbstractQueryBuilder<SpanNotQueryBuilde
private int post = DEFAULT_POST;
- static final SpanNotQueryBuilder PROTOTYPE = new SpanNotQueryBuilder(null, null);
+ static final SpanNotQueryBuilder PROTOTYPE = new SpanNotQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, SpanTermQueryBuilder.PROTOTYPE);
/**
* Construct a span query matching spans from <code>include</code> which
@@ -55,6 +55,12 @@ public class SpanNotQueryBuilder extends AbstractQueryBuilder<SpanNotQueryBuilde
* @param exclude the span query whose matches must not overlap
*/
public SpanNotQueryBuilder(SpanQueryBuilder include, SpanQueryBuilder exclude) {
+ if (include == null) {
+ throw new IllegalArgumentException("inner clause [include] cannot be null.");
+ }
+ if (exclude == null) {
+ throw new IllegalArgumentException("inner clause [exclude] cannot be null.");
+ }
this.include = include;
this.exclude = exclude;
}
@@ -141,22 +147,6 @@ public class SpanNotQueryBuilder extends AbstractQueryBuilder<SpanNotQueryBuilde
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (include == null) {
- validationException = addValidationError("inner clause [include] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(include, validationException);
- }
- if (exclude == null) {
- validationException = addValidationError("inner clause [exclude] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(exclude, validationException);
- }
- return validationException;
- }
-
- @Override
protected SpanNotQueryBuilder doReadFrom(StreamInput in) throws IOException {
SpanQueryBuilder include = (SpanQueryBuilder)in.readQuery();
SpanQueryBuilder exclude = (SpanQueryBuilder)in.readQuery();
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java
index 8e9b7ae88e..a46bef4e52 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryBuilder.java
@@ -40,9 +40,19 @@ public class SpanOrQueryBuilder extends AbstractQueryBuilder<SpanOrQueryBuilder>
private final List<SpanQueryBuilder> clauses = new ArrayList<>();
- static final SpanOrQueryBuilder PROTOTYPE = new SpanOrQueryBuilder();
+ static final SpanOrQueryBuilder PROTOTYPE = new SpanOrQueryBuilder(SpanTermQueryBuilder.PROTOTYPE);
+
+ public SpanOrQueryBuilder(SpanQueryBuilder initialClause) {
+ if (initialClause == null) {
+ throw new IllegalArgumentException("query must include at least one clause");
+ }
+ clauses.add(initialClause);
+ }
public SpanOrQueryBuilder clause(SpanQueryBuilder clause) {
+ if (clause == null) {
+ throw new IllegalArgumentException("inner bool query clause cannot be null");
+ }
clauses.add(clause);
return this;
}
@@ -78,27 +88,11 @@ public class SpanOrQueryBuilder extends AbstractQueryBuilder<SpanOrQueryBuilder>
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (clauses.isEmpty()) {
- validationException = addValidationError("query must include [clauses]", validationException);
- }
- for (SpanQueryBuilder innerClause : clauses) {
- if (innerClause == null) {
- validationException = addValidationError("[clauses] contains null element", validationException);
- } else {
- validationException = validateInnerQuery(innerClause, validationException);
- }
- }
- return validationException;
- }
-
- @Override
protected SpanOrQueryBuilder doReadFrom(StreamInput in) throws IOException {
- SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder();
List<QueryBuilder> clauses = readQueries(in);
- for (QueryBuilder subClause : clauses) {
- queryBuilder.clauses.add((SpanQueryBuilder)subClause);
+ SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder((SpanQueryBuilder)clauses.get(0));
+ for (int i = 1; i < clauses.size(); i++) {
+ queryBuilder.clauses.add((SpanQueryBuilder)clauses.get(i));
}
return queryBuilder;
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryParser.java b/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryParser.java
index c424f66fbc..59918f198e 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryParser.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanOrQueryParser.java
@@ -72,13 +72,14 @@ public class SpanOrQueryParser extends BaseQueryParser<SpanOrQueryBuilder> {
}
}
}
+
if (clauses.isEmpty()) {
throw new QueryParsingException(parseContext, "spanOr must include [clauses]");
}
- SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder();
- for (SpanQueryBuilder clause : clauses) {
- queryBuilder.clause(clause);
+ SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder(clauses.get(0));
+ for (int i = 1; i < clauses.size(); i++) {
+ queryBuilder.clause(clauses.get(i));
}
queryBuilder.boost(boost);
queryBuilder.queryName(queryName);
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java
index 24cd8167b3..fc41dc4ba0 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanTermQueryBuilder.java
@@ -35,7 +35,7 @@ import java.io.IOException;
public class SpanTermQueryBuilder extends BaseTermQueryBuilder<SpanTermQueryBuilder> implements SpanQueryBuilder<SpanTermQueryBuilder> {
public static final String NAME = "span_term";
- static final SpanTermQueryBuilder PROTOTYPE = new SpanTermQueryBuilder(null, null);
+ static final SpanTermQueryBuilder PROTOTYPE = new SpanTermQueryBuilder("name", "value");
/** @see BaseTermQueryBuilder#BaseTermQueryBuilder(String, String) */
public SpanTermQueryBuilder(String name, String value) {
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java
index 83c77168f9..c3a11c8f32 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryBuilder.java
@@ -37,7 +37,7 @@ public class SpanWithinQueryBuilder extends AbstractQueryBuilder<SpanWithinQuery
public static final String NAME = "span_within";
private final SpanQueryBuilder big;
private final SpanQueryBuilder little;
- static final SpanWithinQueryBuilder PROTOTYPE = new SpanWithinQueryBuilder(null, null);
+ static final SpanWithinQueryBuilder PROTOTYPE = new SpanWithinQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, SpanTermQueryBuilder.PROTOTYPE);
/**
* Query that returns spans from <code>little</code> that are contained in a spans from <code>big</code>.
@@ -45,6 +45,12 @@ public class SpanWithinQueryBuilder extends AbstractQueryBuilder<SpanWithinQuery
* @param little the little clause, it must be contained within {@code big} for a match.
*/
public SpanWithinQueryBuilder(SpanQueryBuilder big, SpanQueryBuilder little) {
+ if (big == null) {
+ throw new IllegalArgumentException("inner clause [big] cannot be null.");
+ }
+ if (little == null) {
+ throw new IllegalArgumentException("inner clause [little] cannot be null.");
+ }
this.little = little;
this.big = big;
}
@@ -88,22 +94,6 @@ public class SpanWithinQueryBuilder extends AbstractQueryBuilder<SpanWithinQuery
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (big == null) {
- validationException = addValidationError("inner clause [big] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(big, validationException);
- }
- if (little == null) {
- validationException = addValidationError("inner clause [little] cannot be null.", validationException);
- } else {
- validationException = validateInnerQuery(little, validationException);
- }
- return validationException;
- }
-
- @Override
protected SpanWithinQueryBuilder doReadFrom(StreamInput in) throws IOException {
SpanQueryBuilder big = (SpanQueryBuilder)in.readQuery();
SpanQueryBuilder little = (SpanQueryBuilder)in.readQuery();
diff --git a/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryParser.java b/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryParser.java
index 1645db5832..f3ea799144 100644
--- a/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryParser.java
+++ b/core/src/main/java/org/elasticsearch/index/query/SpanWithinQueryParser.java
@@ -20,7 +20,6 @@
package org.elasticsearch.index.query;
import org.elasticsearch.common.Strings;
-import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.xcontent.XContentParser;
import java.io.IOException;
diff --git a/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
index 5c912de534..d63f160542 100644
--- a/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/TemplateQueryBuilder.java
@@ -44,13 +44,16 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil
/** Template to fill. */
private final Template template;
- static final TemplateQueryBuilder PROTOTYPE = new TemplateQueryBuilder(null);
+ static final TemplateQueryBuilder PROTOTYPE = new TemplateQueryBuilder(new Template("proto"));
/**
* @param template
* the template to use for that query.
* */
public TemplateQueryBuilder(Template template) {
+ if (template == null) {
+ throw new IllegalArgumentException("query template cannot be null");
+ }
this.template = template;
}
@@ -113,15 +116,6 @@ public class TemplateQueryBuilder extends AbstractQueryBuilder<TemplateQueryBuil
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (this.template == null) {
- validationException = addValidationError("query template cannot be null", validationException);
- }
- return validationException;
- }
-
- @Override
protected TemplateQueryBuilder doReadFrom(StreamInput in) throws IOException {
TemplateQueryBuilder templateQueryBuilder = new TemplateQueryBuilder(Template.readTemplate(in));
return templateQueryBuilder;
diff --git a/core/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java
index 5c8bf3f1e0..bed373b9f0 100644
--- a/core/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java
@@ -33,7 +33,7 @@ import java.io.IOException;
public class TermQueryBuilder extends BaseTermQueryBuilder<TermQueryBuilder> {
public static final String NAME = "term";
- static final TermQueryBuilder PROTOTYPE = new TermQueryBuilder(null, null);
+ static final TermQueryBuilder PROTOTYPE = new TermQueryBuilder("name", "value");
/** @see BaseTermQueryBuilder#BaseTermQueryBuilder(String, String) */
public TermQueryBuilder(String fieldName, String value) {
diff --git a/core/src/main/java/org/elasticsearch/index/query/TypeQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/TypeQueryBuilder.java
index 9f89a94464..94cdc243bf 100644
--- a/core/src/main/java/org/elasticsearch/index/query/TypeQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/TypeQueryBuilder.java
@@ -39,13 +39,19 @@ public class TypeQueryBuilder extends AbstractQueryBuilder<TypeQueryBuilder> {
private final BytesRef type;
- static final TypeQueryBuilder PROTOTYPE = new TypeQueryBuilder((BytesRef) null);
+ static final TypeQueryBuilder PROTOTYPE = new TypeQueryBuilder("type");
public TypeQueryBuilder(String type) {
+ if (type == null) {
+ throw new IllegalArgumentException("[type] cannot be null");
+ }
this.type = BytesRefs.toBytesRef(type);
}
TypeQueryBuilder(BytesRef type) {
+ if (type == null) {
+ throw new IllegalArgumentException("[type] cannot be null");
+ }
this.type = type;
}
@@ -80,15 +86,6 @@ public class TypeQueryBuilder extends AbstractQueryBuilder<TypeQueryBuilder> {
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (type == null) {
- validationException = addValidationError("[type] cannot be null", validationException);
- }
- return validationException;
- }
-
- @Override
protected TypeQueryBuilder doReadFrom(StreamInput in) throws IOException {
return new TypeQueryBuilder(in.readBytesRef());
}
diff --git a/core/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java
index 89b753e316..4477592640 100644
--- a/core/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java
@@ -52,7 +52,7 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
private String rewrite;
- static final WildcardQueryBuilder PROTOTYPE = new WildcardQueryBuilder(null, null);
+ static final WildcardQueryBuilder PROTOTYPE = new WildcardQueryBuilder("field", "value");
/**
* Implements the wildcard search query. Supported wildcards are <tt>*</tt>, which
@@ -66,6 +66,12 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
* @param value The wildcard query string
*/
public WildcardQueryBuilder(String fieldName, String value) {
+ if (Strings.isEmpty(fieldName)) {
+ throw new IllegalArgumentException("field name is null or empty");
+ }
+ if (value == null) {
+ throw new IllegalArgumentException("value cannot be null.");
+ }
this.fieldName = fieldName;
this.value = value;
}
@@ -126,18 +132,6 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (Strings.isEmpty(this.fieldName)) {
- validationException = addValidationError("field name cannot be null or empty.", validationException);
- }
- if (this.value == null) {
- validationException = addValidationError("wildcard cannot be null", validationException);
- }
- return validationException;
- }
-
- @Override
protected WildcardQueryBuilder doReadFrom(StreamInput in) throws IOException {
WildcardQueryBuilder wildcardQueryBuilder = new WildcardQueryBuilder(in.readString(), in.readString());
wildcardQueryBuilder.rewrite = in.readOptionalString();
diff --git a/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
index 43fc114c52..8fdcd020ca 100644
--- a/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
+++ b/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java
@@ -20,7 +20,10 @@
package org.elasticsearch.index.query;
import org.apache.lucene.search.Query;
+
import java.nio.charset.StandardCharsets;
+
+import org.elasticsearch.common.Strings;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -49,26 +52,35 @@ public class WrapperQueryBuilder extends AbstractQueryBuilder<WrapperQueryBuilde
public static final String NAME = "wrapper";
private final byte[] source;
- static final WrapperQueryBuilder PROTOTYPE = new WrapperQueryBuilder((byte[]) null);
+ static final WrapperQueryBuilder PROTOTYPE = new WrapperQueryBuilder((byte[]) new byte[]{0});
/**
- * Creates a query builder given a query provided as a string
+ * Creates a query builder given a query provided as a bytes array
*/
- public WrapperQueryBuilder(String source) {
- this.source = source.getBytes(StandardCharsets.UTF_8);
+ public WrapperQueryBuilder(byte[] source) {
+ if (source == null || source.length == 0) {
+ throw new IllegalArgumentException("query source text cannot be null or empty");
+ }
+ this.source = source;
}
/**
- * Creates a query builder given a query provided as a bytes array
+ * Creates a query builder given a query provided as a string
*/
- public WrapperQueryBuilder(byte[] source) {
- this.source = source;
+ public WrapperQueryBuilder(String source) {
+ if (Strings.isEmpty(source)) {
+ throw new IllegalArgumentException("query source string cannot be null or empty");
+ }
+ this.source = source.getBytes(StandardCharsets.UTF_8);
}
/**
* Creates a query builder given a query provided as a {@link BytesReference}
*/
public WrapperQueryBuilder(BytesReference source) {
+ if (source == null || source.length() == 0) {
+ throw new IllegalArgumentException("query source text cannot be null or empty");
+ }
this.source = source.array();
}
@@ -110,15 +122,6 @@ public class WrapperQueryBuilder extends AbstractQueryBuilder<WrapperQueryBuilde
}
@Override
- public QueryValidationException validate() {
- QueryValidationException validationException = null;
- if (this.source == null || this.source.length == 0) {
- validationException = addValidationError("query source text cannot be null or empty", validationException);
- }
- return validationException;
- }
-
- @Override
protected WrapperQueryBuilder doReadFrom(StreamInput in) throws IOException {
return new WrapperQueryBuilder(in.readByteArray());
}