diff options
Diffstat (limited to 'core/src/main/java/org')
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()); } |