diff options
Diffstat (limited to 'core')
58 files changed, 588 insertions, 715 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()); } diff --git a/core/src/test/java/org/elasticsearch/index/query/AbstractTermQueryTestCase.java b/core/src/test/java/org/elasticsearch/index/query/AbstractTermQueryTestCase.java index 3c63fdf3d9..ccfe619001 100644 --- a/core/src/test/java/org/elasticsearch/index/query/AbstractTermQueryTestCase.java +++ b/core/src/test/java/org/elasticsearch/index/query/AbstractTermQueryTestCase.java @@ -24,8 +24,6 @@ import org.junit.Test; import java.util.HashMap; import java.util.Map; -import static org.hamcrest.Matchers.is; - public abstract class AbstractTermQueryTestCase<QB extends BaseTermQueryBuilder<QB>> extends AbstractQueryTestCase<QB> { @Override @@ -75,21 +73,24 @@ public abstract class AbstractTermQueryTestCase<QB extends BaseTermQueryBuilder< protected abstract QB createQueryBuilder(String fieldName, Object value); @Test - public void testValidate() throws QueryShardException { - QB queryBuilder = createQueryBuilder(randomAsciiOfLengthBetween(1, 30), randomAsciiOfLengthBetween(1, 30)); - assertNull(queryBuilder.validate()); - - queryBuilder = createQueryBuilder(null, randomAsciiOfLengthBetween(1, 30)); - assertNotNull(queryBuilder.validate()); - assertThat(queryBuilder.validate().validationErrors().size(), is(1)); - - queryBuilder = createQueryBuilder("", randomAsciiOfLengthBetween(1, 30)); - assertNotNull(queryBuilder.validate()); - assertThat(queryBuilder.validate().validationErrors().size(), is(1)); + public void testIllegalArguments() throws QueryShardException { + try { + if (randomBoolean()) { + createQueryBuilder(null, randomAsciiOfLengthBetween(1, 30)); + } else { + createQueryBuilder("", randomAsciiOfLengthBetween(1, 30)); + } + fail("fieldname cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } - queryBuilder = createQueryBuilder("", null); - assertNotNull(queryBuilder.validate()); - assertThat(queryBuilder.validate().validationErrors().size(), is(2)); + try { + createQueryBuilder("field", null); + fail("value cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } } @Override diff --git a/core/src/test/java/org/elasticsearch/index/query/IndicesQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/IndicesQueryBuilderTests.java index 9990b513d3..8db4317a58 100644 --- a/core/src/test/java/org/elasticsearch/index/query/IndicesQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/IndicesQueryBuilderTests.java @@ -69,35 +69,41 @@ public class IndicesQueryBuilderTests extends AbstractQueryTestCase<IndicesQuery } @Test - public void testValidate() { - int expectedErrors = 0; + public void testIllegalArguments() { + try { + new IndicesQueryBuilder(null, "index"); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } - // inner query - QueryBuilder innerQuery; - if (randomBoolean()) { - // setting innerQuery to null would be caught in the builder already and make validation fail - innerQuery = RandomQueryBuilder.createInvalidQuery(random()); - expectedErrors++; - } else { - innerQuery = RandomQueryBuilder.createQuery(random()); + try { + new IndicesQueryBuilder(EmptyQueryBuilder.PROTOTYPE, (String[]) null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - // indices - String[] indices; - if (randomBoolean()) { - indices = randomBoolean() ? null : new String[0]; - expectedErrors++; - } else { - indices = new String[]{"index"}; + + try { + new IndicesQueryBuilder(EmptyQueryBuilder.PROTOTYPE, new String[0]); + fail("cannot be empty"); + } catch (IllegalArgumentException e) { + // expected } - // no match query - QueryBuilder noMatchQuery; - if (randomBoolean()) { - noMatchQuery = RandomQueryBuilder.createInvalidQuery(random()); - expectedErrors++; - } else { - noMatchQuery = RandomQueryBuilder.createQuery(random()); + + IndicesQueryBuilder indicesQueryBuilder = new IndicesQueryBuilder(EmptyQueryBuilder.PROTOTYPE, "index"); + try { + indicesQueryBuilder.noMatchQuery((QueryBuilder) null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - assertValidate(new IndicesQueryBuilder(innerQuery, indices).noMatchQuery(noMatchQuery), expectedErrors); + try { + indicesQueryBuilder.noMatchQuery((String) null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } } } diff --git a/core/src/test/java/org/elasticsearch/index/query/MultiMatchQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/MultiMatchQueryBuilderTests.java index 18a0cdf79d..df4860f7ad 100644 --- a/core/src/test/java/org/elasticsearch/index/query/MultiMatchQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/MultiMatchQueryBuilderTests.java @@ -33,7 +33,6 @@ import java.util.List; import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertBooleanSubQuery; import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.Matchers.is; public class MultiMatchQueryBuilderTests extends AbstractQueryTestCase<MultiMatchQueryBuilder> { @@ -113,12 +112,27 @@ public class MultiMatchQueryBuilderTests extends AbstractQueryTestCase<MultiMatc } @Test - public void testValidate() { - MultiMatchQueryBuilder multiMatchQueryBuilder = new MultiMatchQueryBuilder("text"); - assertThat(multiMatchQueryBuilder.validate().validationErrors().size(), is(1)); + public void testIllegaArguments() { + try { + new MultiMatchQueryBuilder(null, "field"); + fail("value must not be null"); + } catch (IllegalArgumentException e) { + // expected + } + + try { + new MultiMatchQueryBuilder("value", (String[]) null); + fail("initial fields must be supplied at construction time must not be null"); + } catch (IllegalArgumentException e) { + // expected + } - multiMatchQueryBuilder = new MultiMatchQueryBuilder("text", "field"); - assertNull(multiMatchQueryBuilder.validate()); + try { + new MultiMatchQueryBuilder("value", new String[]{""}); + fail("field names cannot be empty"); + } catch (IllegalArgumentException e) { + // expected + } } @Override diff --git a/core/src/test/java/org/elasticsearch/index/query/NestedQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/NestedQueryBuilderTests.java index 538370e7bc..0299068a91 100644 --- a/core/src/test/java/org/elasticsearch/index/query/NestedQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/NestedQueryBuilderTests.java @@ -20,6 +20,7 @@ package org.elasticsearch.index.query; import com.carrotsearch.randomizedtesting.generators.RandomPicks; + import org.apache.lucene.search.Query; import org.apache.lucene.search.join.ScoreMode; import org.apache.lucene.search.join.ToParentBlockJoinQuery; @@ -35,6 +36,7 @@ import org.elasticsearch.search.fetch.innerhits.InnerHitsContext; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.test.TestSearchContext; +import org.junit.Test; import java.io.IOException; import java.util.Arrays; @@ -43,6 +45,7 @@ import static org.hamcrest.CoreMatchers.instanceOf; public class NestedQueryBuilderTests extends AbstractQueryTestCase<NestedQueryBuilder> { + @Override public void setUp() throws Exception { super.setUp(); MapperService mapperService = queryParserService().mapperService; @@ -57,6 +60,7 @@ public class NestedQueryBuilderTests extends AbstractQueryTestCase<NestedQueryBu ).string()), false, false); } + @Override protected void setSearchContext(String[] types) { final MapperService mapperService = queryParserService().mapperService; final IndexFieldDataService fieldData = queryParserService().fieldDataService; @@ -156,4 +160,29 @@ public class NestedQueryBuilderTests extends AbstractQueryTestCase<NestedQueryBu TermsQueryBuilder tqb = (TermsQueryBuilder) query; assertEquals(tqb.values(), Arrays.asList("a", "b")); } + + @Test + public void testValidate() { + try { + new NestedQueryBuilder(null, EmptyQueryBuilder.PROTOTYPE); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } + + try { + new NestedQueryBuilder("path", null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } + + NestedQueryBuilder nestedQueryBuilder = new NestedQueryBuilder("path", EmptyQueryBuilder.PROTOTYPE); + try { + nestedQueryBuilder.scoreMode(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } + } } diff --git a/core/src/test/java/org/elasticsearch/index/query/NotQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/NotQueryBuilderTests.java index ec0e105c05..02d8043fd3 100644 --- a/core/src/test/java/org/elasticsearch/index/query/NotQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/NotQueryBuilderTests.java @@ -102,17 +102,11 @@ public class NotQueryBuilderTests extends AbstractQueryTestCase<NotQueryBuilder> @Test public void testValidate() { - QueryBuilder innerQuery = null; - int totalExpectedErrors = 0; - if (randomBoolean()) { - if (randomBoolean()) { - innerQuery = RandomQueryBuilder.createInvalidQuery(random()); - } - totalExpectedErrors++; - } else { - innerQuery = RandomQueryBuilder.createQuery(random()); + try { + new NotQueryBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - NotQueryBuilder notQuery = new NotQueryBuilder(innerQuery); - assertValidate(notQuery, totalExpectedErrors); } } diff --git a/core/src/test/java/org/elasticsearch/index/query/PrefixQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/PrefixQueryBuilderTests.java index 31174629aa..4dd37582ab 100644 --- a/core/src/test/java/org/elasticsearch/index/query/PrefixQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/PrefixQueryBuilderTests.java @@ -27,7 +27,6 @@ import java.io.IOException; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; public class PrefixQueryBuilderTests extends AbstractQueryTestCase<PrefixQueryBuilder> { @@ -51,17 +50,23 @@ public class PrefixQueryBuilderTests extends AbstractQueryTestCase<PrefixQueryBu } @Test - public void testValidate() { - PrefixQueryBuilder prefixQueryBuilder = new PrefixQueryBuilder("", "prefix"); - assertThat(prefixQueryBuilder.validate().validationErrors().size(), is(1)); - - prefixQueryBuilder = new PrefixQueryBuilder("field", null); - assertThat(prefixQueryBuilder.validate().validationErrors().size(), is(1)); - - prefixQueryBuilder = new PrefixQueryBuilder("field", "prefix"); - assertNull(prefixQueryBuilder.validate()); + public void testIllegalArguments() { + try { + if (randomBoolean()) { + new PrefixQueryBuilder(null, "text"); + } else { + new PrefixQueryBuilder("", "text"); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } - prefixQueryBuilder = new PrefixQueryBuilder(null, null); - assertThat(prefixQueryBuilder.validate().validationErrors().size(), is(2)); + try { + new PrefixQueryBuilder("field", null); + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } } }
\ No newline at end of file diff --git a/core/src/test/java/org/elasticsearch/index/query/QueryFilterBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/QueryFilterBuilderTests.java index c26fd9b0ab..8c9a815264 100644 --- a/core/src/test/java/org/elasticsearch/index/query/QueryFilterBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/QueryFilterBuilderTests.java @@ -68,17 +68,11 @@ public class QueryFilterBuilderTests extends AbstractQueryTestCase<QueryFilterBu @Test public void testValidate() { - QueryBuilder innerQuery = null; - int totalExpectedErrors = 0; - if (randomBoolean()) { - if (randomBoolean()) { - innerQuery = RandomQueryBuilder.createInvalidQuery(random()); - } - totalExpectedErrors++; - } else { - innerQuery = RandomQueryBuilder.createQuery(random()); + try { + new QueryFilterBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - QueryFilterBuilder fQueryFilter = new QueryFilterBuilder(innerQuery); - assertValidate(fQueryFilter, totalExpectedErrors); } } diff --git a/core/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java index 7b669cdda7..43fc329d3d 100644 --- a/core/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java @@ -145,13 +145,13 @@ public class QueryStringQueryBuilderTests extends AbstractQueryTestCase<QueryStr } @Test - public void testValidate() { - QueryValidationException queryValidationException = createTestQueryBuilder().validate(); - assertNull(queryValidationException); - - queryValidationException = new QueryStringQueryBuilder(null).validate(); - assertNotNull(queryValidationException); - assertThat(queryValidationException.validationErrors().size(), equalTo(1)); + public void testIllegalArguments() { + try { + new QueryStringQueryBuilder(null); + fail("null is not allowed"); + } catch (IllegalArgumentException e) { + // expected + } } @Test diff --git a/core/src/test/java/org/elasticsearch/index/query/RandomQueryBuilder.java b/core/src/test/java/org/elasticsearch/index/query/RandomQueryBuilder.java index a962e85ffb..0bd69f80e9 100644 --- a/core/src/test/java/org/elasticsearch/index/query/RandomQueryBuilder.java +++ b/core/src/test/java/org/elasticsearch/index/query/RandomQueryBuilder.java @@ -67,21 +67,4 @@ public class RandomQueryBuilder { query.to("z" + RandomStrings.randomAsciiOfLengthBetween(r, 1, 10)); return query; } - - /** - * Create a new invalid query of a random type - * @param r random seed - * @return a random {@link QueryBuilder} that is invalid, meaning that calling validate against it - * will return an error. We can rely on the fact that a single error will be returned per query. - */ - public static QueryBuilder createInvalidQuery(Random r) { - switch (RandomInts.randomIntBetween(r, 0, 1)) { - case 0: - return new TermQueryBuilder("", "test"); - case 1: - return new SimpleQueryStringBuilder(null); - default: - throw new UnsupportedOperationException(); - } - } } diff --git a/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java index 3ad2b78833..5c819986c8 100644 --- a/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java @@ -29,7 +29,6 @@ import org.junit.Test; import java.io.IOException; import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuilder> { @@ -98,24 +97,40 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil } @Test - public void testValidate() { - RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder(""); - assertThat(rangeQueryBuilder.validate().validationErrors().size(), is(1)); - - rangeQueryBuilder = new RangeQueryBuilder("okay").timeZone("UTC"); - assertNull(rangeQueryBuilder.validate()); - - rangeQueryBuilder.timeZone("blab"); - assertThat(rangeQueryBuilder.validate().validationErrors().size(), is(1)); - - rangeQueryBuilder.timeZone("UTC").format("basicDate"); - assertNull(rangeQueryBuilder.validate()); + public void testIllegalArguments() { + try { + if (randomBoolean()) { + new RangeQueryBuilder(null); + } else { + new RangeQueryBuilder(""); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } - rangeQueryBuilder.timeZone("UTC").format("broken_xx"); - assertThat(rangeQueryBuilder.validate().validationErrors().size(), is(1)); + RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder("test"); + try { + if (randomBoolean()) { + rangeQueryBuilder.timeZone(null); + } else { + rangeQueryBuilder.timeZone("badID"); + } + fail("cannot be null or unknown id"); + } catch (IllegalArgumentException e) { + // expected + } - rangeQueryBuilder.timeZone("xXx").format("broken_xx"); - assertThat(rangeQueryBuilder.validate().validationErrors().size(), is(2)); + try { + if (randomBoolean()) { + rangeQueryBuilder.format(null); + } else { + rangeQueryBuilder.format("badFormat"); + } + fail("cannot be null or bad format"); + } catch (IllegalArgumentException e) { + // expected + } } /** diff --git a/core/src/test/java/org/elasticsearch/index/query/RegexpQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/RegexpQueryBuilderTests.java index 75edf29a19..014c795188 100644 --- a/core/src/test/java/org/elasticsearch/index/query/RegexpQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/RegexpQueryBuilderTests.java @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.List; import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; public class RegexpQueryBuilderTests extends AbstractQueryTestCase<RegexpQueryBuilder> { @@ -62,17 +61,23 @@ public class RegexpQueryBuilderTests extends AbstractQueryTestCase<RegexpQueryBu } @Test - public void testValidate() { - RegexpQueryBuilder regexQueryBuilder = new RegexpQueryBuilder("", "regex"); - assertThat(regexQueryBuilder.validate().validationErrors().size(), is(1)); - - regexQueryBuilder = new RegexpQueryBuilder("field", null); - assertThat(regexQueryBuilder.validate().validationErrors().size(), is(1)); - - regexQueryBuilder = new RegexpQueryBuilder("field", "regex"); - assertNull(regexQueryBuilder.validate()); + public void testIllegalArguments() { + try { + if (randomBoolean()) { + new RegexpQueryBuilder(null, "text"); + } else { + new RegexpQueryBuilder("", "text"); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } - regexQueryBuilder = new RegexpQueryBuilder(null, null); - assertThat(regexQueryBuilder.validate().validationErrors().size(), is(2)); + try { + new RegexpQueryBuilder("field", null); + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } } } diff --git a/core/src/test/java/org/elasticsearch/index/query/ScriptQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/ScriptQueryBuilderTests.java index 4cacd657db..9a76c7afcd 100644 --- a/core/src/test/java/org/elasticsearch/index/query/ScriptQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/ScriptQueryBuilderTests.java @@ -29,7 +29,6 @@ import java.util.HashMap; import java.util.Map; import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; public class ScriptQueryBuilderTests extends AbstractQueryTestCase<ScriptQueryBuilder> { @@ -53,8 +52,12 @@ public class ScriptQueryBuilderTests extends AbstractQueryTestCase<ScriptQueryBu } @Test - public void testValidate() { - ScriptQueryBuilder scriptQueryBuilder = new ScriptQueryBuilder(null); - assertThat(scriptQueryBuilder.validate().validationErrors().size(), is(1)); + public void testIllegalConstructorArg() { + try { + new ScriptQueryBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } } } diff --git a/core/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java b/core/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java index 207bf78a54..16713f4ff6 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java @@ -80,7 +80,6 @@ import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.core.NumberFieldMapper; -import org.elasticsearch.index.query.MoreLikeThisQueryBuilder.Item; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.elasticsearch.index.search.geo.GeoDistanceRangeQuery; import org.elasticsearch.index.search.geo.GeoPolygonQuery; @@ -751,7 +750,7 @@ public class SimpleIndexQueryParserTests extends ESSingleNodeTestCase { IndexQueryParserService queryParser = queryParser(); String query = copyToStringFromClasspath("/org/elasticsearch/index/query/not-filter.json"); Query parsedQuery = queryParser.parse(query).query(); - Query expected = + Query expected = Queries.not(new TermQuery(new Term("name.first", "shay1"))); assertEquals(expected, parsedQuery); } @@ -1166,7 +1165,7 @@ public class SimpleIndexQueryParserTests extends ESSingleNodeTestCase { @Test public void testSpanNearQueryBuilder() throws IOException { IndexQueryParserService queryParser = queryParser(); - Query parsedQuery = queryParser.parse(spanNearQuery(12).clause(spanTermQuery("age", 34)).clause(spanTermQuery("age", 35)).clause(spanTermQuery("age", 36)).inOrder(false).collectPayloads(false)).query(); + Query parsedQuery = queryParser.parse(spanNearQuery(spanTermQuery("age", 34), 12).clause(spanTermQuery("age", 35)).clause(spanTermQuery("age", 36)).inOrder(false).collectPayloads(false)).query(); assertThat(parsedQuery, instanceOf(SpanNearQuery.class)); SpanNearQuery spanNearQuery = (SpanNearQuery) parsedQuery; assertThat(spanNearQuery.getClauses().length, equalTo(3)); @@ -1208,7 +1207,7 @@ public class SimpleIndexQueryParserTests extends ESSingleNodeTestCase { @Test public void testSpanOrQueryBuilder() throws IOException { IndexQueryParserService queryParser = queryParser(); - Query parsedQuery = queryParser.parse(spanOrQuery().clause(spanTermQuery("age", 34)).clause(spanTermQuery("age", 35)).clause(spanTermQuery("age", 36))).query(); + Query parsedQuery = queryParser.parse(spanOrQuery(spanTermQuery("age", 34)).clause(spanTermQuery("age", 35)).clause(spanTermQuery("age", 36))).query(); assertThat(parsedQuery, instanceOf(SpanOrQuery.class)); SpanOrQuery spanOrQuery = (SpanOrQuery) parsedQuery; assertThat(spanOrQuery.getClauses().length, equalTo(3)); diff --git a/core/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java index 956230e838..5ae54d4078 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java @@ -168,16 +168,13 @@ public class SimpleQueryStringBuilderTests extends AbstractQueryTestCase<SimpleQ } @Test - public void testValidation() { - SimpleQueryStringBuilder qb = createTestQueryBuilder(); - assertNull(qb.validate()); - } - - @Test - public void testNullQueryTextGeneratesException() { - SimpleQueryStringBuilder builder = new SimpleQueryStringBuilder(null); - QueryValidationException exception = builder.validate(); - assertThat(exception, notNullValue()); + public void testIllegalConstructorArg() { + try { + new SimpleQueryStringBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } } @Test(expected = IllegalArgumentException.class) @@ -244,7 +241,7 @@ public class SimpleQueryStringBuilderTests extends AbstractQueryTestCase<SimpleQ /* * This assumes that Lucene query parsing is being checked already, adding * checks only for our parsing extensions. - * + * * Also this relies on {@link SimpleQueryStringTests} to test most of the * actual functionality of query parsing. */ diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanContainingQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanContainingQueryBuilderTests.java index ef4a92bb64..ff5882a6fa 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanContainingQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanContainingQueryBuilderTests.java @@ -41,31 +41,19 @@ public class SpanContainingQueryBuilderTests extends AbstractQueryTestCase<SpanC } @Test - public void testValidate() { - int totalExpectedErrors = 0; - SpanQueryBuilder bigSpanQueryBuilder; - if (randomBoolean()) { - if (randomBoolean()) { - bigSpanQueryBuilder = new SpanTermQueryBuilder("", "test"); - } else { - bigSpanQueryBuilder = null; - } - totalExpectedErrors++; - } else { - bigSpanQueryBuilder = new SpanTermQueryBuilder("name", "value"); + public void testIllegalArguments() { + try { + new SpanContainingQueryBuilder(null, SpanTermQueryBuilder.PROTOTYPE); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanQueryBuilder littleSpanQueryBuilder; - if (randomBoolean()) { - if (randomBoolean()) { - littleSpanQueryBuilder = new SpanTermQueryBuilder("", "test"); - } else { - littleSpanQueryBuilder = null; - } - totalExpectedErrors++; - } else { - littleSpanQueryBuilder = new SpanTermQueryBuilder("name", "value"); + + try { + new SpanContainingQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanContainingQueryBuilder queryBuilder = new SpanContainingQueryBuilder(bigSpanQueryBuilder, littleSpanQueryBuilder); - assertValidate(queryBuilder, totalExpectedErrors); } } diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanFirstQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanFirstQueryBuilderTests.java index cd9ca8287f..e2525ef4cf 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanFirstQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanFirstQueryBuilderTests.java @@ -43,29 +43,6 @@ public class SpanFirstQueryBuilderTests extends AbstractQueryTestCase<SpanFirstQ assertThat(query, instanceOf(SpanFirstQuery.class)); } - @Test - public void testValidate() { - int totalExpectedErrors = 0; - SpanQueryBuilder innerSpanQueryBuilder; - if (randomBoolean()) { - if (randomBoolean()) { - innerSpanQueryBuilder = new SpanTermQueryBuilder("", "test"); - } else { - innerSpanQueryBuilder = null; - } - totalExpectedErrors++; - } else { - innerSpanQueryBuilder = new SpanTermQueryBuilder("name", "value"); - } - int end = randomIntBetween(0, 10); - if (randomBoolean()) { - end = randomIntBetween(-10, -1); - totalExpectedErrors++; - } - SpanFirstQueryBuilder queryBuilder = new SpanFirstQueryBuilder(innerSpanQueryBuilder, end); - assertValidate(queryBuilder, totalExpectedErrors); - } - /** * test exception on missing `end` and `match` parameter in parser */ diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilderTests.java index 52551ae5b7..7c9e50abf5 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanMultiTermQueryBuilderTests.java @@ -47,21 +47,13 @@ public class SpanMultiTermQueryBuilderTests extends AbstractQueryTestCase<SpanMu } @Test - public void testValidate() { - int totalExpectedErrors = 0; - MultiTermQueryBuilder multiTermQueryBuilder; - if (randomBoolean()) { - if (randomBoolean()) { - multiTermQueryBuilder = new RangeQueryBuilder(""); - } else { - multiTermQueryBuilder = null; - } - totalExpectedErrors++; - } else { - multiTermQueryBuilder = new RangeQueryBuilder("field"); + public void testIllegalArgument() { + try { + new SpanMultiTermQueryBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanMultiTermQueryBuilder queryBuilder = new SpanMultiTermQueryBuilder(multiTermQueryBuilder); - assertValidate(queryBuilder, totalExpectedErrors); } /** diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanNearQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanNearQueryBuilderTests.java index f9c9e32405..02dcddb663 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanNearQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanNearQueryBuilderTests.java @@ -34,10 +34,10 @@ public class SpanNearQueryBuilderTests extends AbstractQueryTestCase<SpanNearQue @Override protected SpanNearQueryBuilder doCreateTestQueryBuilder() { - SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder(randomIntBetween(-10, 10)); SpanTermQueryBuilder[] spanTermQueries = new SpanTermQueryBuilderTests().createSpanTermQueryBuilders(randomIntBetween(1, 6)); - for (SpanTermQueryBuilder clause : spanTermQueries) { - queryBuilder.clause(clause); + SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder(spanTermQueries[0], randomIntBetween(-10, 10)); + for (int i = 1; i < spanTermQueries.length; i++) { + queryBuilder.clause(spanTermQueries[i]); } queryBuilder.inOrder(randomBoolean()); queryBuilder.collectPayloads(randomBoolean()); @@ -58,24 +58,20 @@ public class SpanNearQueryBuilderTests extends AbstractQueryTestCase<SpanNearQue } @Test - public void testValidate() { - SpanNearQueryBuilder queryBuilder = new SpanNearQueryBuilder(1); - assertValidate(queryBuilder, 1); // empty clause list + public void testIllegalArguments() { + try { + new SpanNearQueryBuilder(null, 1); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // ecpected + } - int totalExpectedErrors = 0; - int clauses = randomIntBetween(1, 10); - for (int i = 0; i < clauses; i++) { - if (randomBoolean()) { - if (randomBoolean()) { - queryBuilder.clause(new SpanTermQueryBuilder("", "test")); - } else { - queryBuilder.clause(null); - } - totalExpectedErrors++; - } else { - queryBuilder.clause(new SpanTermQueryBuilder("name", "value")); - } + try { + SpanNearQueryBuilder spanNearQueryBuilder = new SpanNearQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, 1); + spanNearQueryBuilder.clause(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // ecpected } - assertValidate(queryBuilder, totalExpectedErrors); } } diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanNotQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanNotQueryBuilderTests.java index 49d1a9e449..f35a3d7a83 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanNotQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanNotQueryBuilderTests.java @@ -60,32 +60,19 @@ public class SpanNotQueryBuilderTests extends AbstractQueryTestCase<SpanNotQuery } @Test - public void testValidate() { - int totalExpectedErrors = 0; - SpanQueryBuilder include; - if (randomBoolean()) { - if (randomBoolean()) { - include = new SpanTermQueryBuilder("", "test"); - } else { - include = null; - } - totalExpectedErrors++; - } else { - include = new SpanTermQueryBuilder("name", "value"); + public void testIllegalArgument() { + try { + new SpanNotQueryBuilder(null, SpanTermQueryBuilder.PROTOTYPE); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanQueryBuilder exclude; - if (randomBoolean()) { - if (randomBoolean()) { - exclude = new SpanTermQueryBuilder("", "test"); - } else { - exclude = null; - } - totalExpectedErrors++; - } else { - exclude = new SpanTermQueryBuilder("name", "value"); + try { + new SpanNotQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanNotQueryBuilder queryBuilder = new SpanNotQueryBuilder(include, exclude); - assertValidate(queryBuilder, totalExpectedErrors); } @Test @@ -125,7 +112,7 @@ public class SpanNotQueryBuilderTests extends AbstractQueryTestCase<SpanNotQuery builder.field("exclude"); spanTermQuery("description", "jumped").toXContent(builder, null); builder.field("include"); - spanNearQuery(1).clause(QueryBuilders.spanTermQuery("description", "quick")) + spanNearQuery(QueryBuilders.spanTermQuery("description", "quick"), 1) .clause(QueryBuilders.spanTermQuery("description", "fox")).toXContent(builder, null); builder.field("dist", 3); builder.endObject(); @@ -166,7 +153,7 @@ public class SpanNotQueryBuilderTests extends AbstractQueryTestCase<SpanNotQuery builder.startObject(); builder.startObject(SpanNotQueryBuilder.NAME); builder.field("include"); - spanNearQuery(1).clause(QueryBuilders.spanTermQuery("description", "quick")) + spanNearQuery(QueryBuilders.spanTermQuery("description", "quick"), 1) .clause(QueryBuilders.spanTermQuery("description", "fox")).toXContent(builder, null); builder.field("dist", 2); builder.endObject(); @@ -185,7 +172,7 @@ public class SpanNotQueryBuilderTests extends AbstractQueryTestCase<SpanNotQuery builder.startObject(); builder.startObject(SpanNotQueryBuilder.NAME); builder.field("include"); - spanNearQuery(1).clause(QueryBuilders.spanTermQuery("description", "quick")) + spanNearQuery(QueryBuilders.spanTermQuery("description", "quick"), 1) .clause(QueryBuilders.spanTermQuery("description", "fox")).toXContent(builder, null); builder.field("exclude"); spanTermQuery("description", "jumped").toXContent(builder, null); diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanOrQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanOrQueryBuilderTests.java index bc4519a48b..eaa70354ba 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanOrQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanOrQueryBuilderTests.java @@ -34,10 +34,10 @@ public class SpanOrQueryBuilderTests extends AbstractQueryTestCase<SpanOrQueryBu @Override protected SpanOrQueryBuilder doCreateTestQueryBuilder() { - SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder(); SpanTermQueryBuilder[] spanTermQueries = new SpanTermQueryBuilderTests().createSpanTermQueryBuilders(randomIntBetween(1, 6)); - for (SpanTermQueryBuilder clause : spanTermQueries) { - queryBuilder.clause(clause); + SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder(spanTermQueries[0]); + for (int i = 1; i < spanTermQueries.length; i++) { + queryBuilder.clause(spanTermQueries[i]); } return queryBuilder; } @@ -54,24 +54,20 @@ public class SpanOrQueryBuilderTests extends AbstractQueryTestCase<SpanOrQueryBu } @Test - public void testValidate() { - SpanOrQueryBuilder queryBuilder = new SpanOrQueryBuilder(); - assertValidate(queryBuilder, 1); // empty clause list + public void testIllegalArguments() { + try { + new SpanOrQueryBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } - int totalExpectedErrors = 0; - int clauses = randomIntBetween(1, 10); - for (int i = 0; i < clauses; i++) { - if (randomBoolean()) { - if (randomBoolean()) { - queryBuilder.clause(new SpanTermQueryBuilder("", "test")); - } else { - queryBuilder.clause(null); - } - totalExpectedErrors++; - } else { - queryBuilder.clause(new SpanTermQueryBuilder("name", "value")); - } + try { + SpanOrQueryBuilder spanOrBuilder = new SpanOrQueryBuilder(SpanTermQueryBuilder.PROTOTYPE); + spanOrBuilder.clause(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - assertValidate(queryBuilder, totalExpectedErrors); } } diff --git a/core/src/test/java/org/elasticsearch/index/query/SpanWithinQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/SpanWithinQueryBuilderTests.java index 4f0b1ee3b7..87b2380f62 100644 --- a/core/src/test/java/org/elasticsearch/index/query/SpanWithinQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/SpanWithinQueryBuilderTests.java @@ -41,31 +41,19 @@ public class SpanWithinQueryBuilderTests extends AbstractQueryTestCase<SpanWithi } @Test - public void testValidate() { - int totalExpectedErrors = 0; - SpanQueryBuilder bigSpanQueryBuilder; - if (randomBoolean()) { - if (randomBoolean()) { - bigSpanQueryBuilder = new SpanTermQueryBuilder("", "test"); - } else { - bigSpanQueryBuilder = null; - } - totalExpectedErrors++; - } else { - bigSpanQueryBuilder = new SpanTermQueryBuilder("name", "value"); + public void testIllegalArguments() { + try { + new SpanWithinQueryBuilder(null, SpanTermQueryBuilder.PROTOTYPE); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanQueryBuilder littleSpanQueryBuilder; - if (randomBoolean()) { - if (randomBoolean()) { - littleSpanQueryBuilder = new SpanTermQueryBuilder("", "test"); - } else { - littleSpanQueryBuilder = null; - } - totalExpectedErrors++; - } else { - littleSpanQueryBuilder = new SpanTermQueryBuilder("name", "value"); + + try { + new SpanWithinQueryBuilder(SpanTermQueryBuilder.PROTOTYPE, null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected } - SpanWithinQueryBuilder queryBuilder = new SpanWithinQueryBuilder(bigSpanQueryBuilder, littleSpanQueryBuilder); - assertValidate(queryBuilder, totalExpectedErrors); } } diff --git a/core/src/test/java/org/elasticsearch/index/query/TemplateQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/TemplateQueryBuilderTests.java index 00e980c038..3d89633de4 100644 --- a/core/src/test/java/org/elasticsearch/index/query/TemplateQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/TemplateQueryBuilderTests.java @@ -31,8 +31,6 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import static org.hamcrest.Matchers.is; - public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQueryBuilder> { /** @@ -61,9 +59,13 @@ public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQue } @Test - public void testValidate() { - TemplateQueryBuilder templateQueryBuilder = new TemplateQueryBuilder(null); - assertThat(templateQueryBuilder.validate().validationErrors().size(), is(1)); + public void testIllegalArgument() { + try { + new TemplateQueryBuilder(null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } } @Override diff --git a/core/src/test/java/org/elasticsearch/index/query/TypeQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/TypeQueryBuilderTests.java index 46af02fbad..af5c63c1e2 100644 --- a/core/src/test/java/org/elasticsearch/index/query/TypeQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/TypeQueryBuilderTests.java @@ -49,8 +49,12 @@ public class TypeQueryBuilderTests extends AbstractQueryTestCase<TypeQueryBuilde } @Test - public void testValidate() { - TypeQueryBuilder typeQueryBuilder = new TypeQueryBuilder((String) null); - assertThat(typeQueryBuilder.validate().validationErrors().size(), is(1)); + public void testIllegalArgument() { + try { + new TypeQueryBuilder((String) null); + fail("cannot be null"); + } catch (IllegalArgumentException e) { + // expected + } } } diff --git a/core/src/test/java/org/elasticsearch/index/query/WildcardQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/WildcardQueryBuilderTests.java index 18bd4893bf..9f6a5645f1 100644 --- a/core/src/test/java/org/elasticsearch/index/query/WildcardQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/WildcardQueryBuilderTests.java @@ -26,7 +26,6 @@ import org.junit.Test; import java.io.IOException; import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; public class WildcardQueryBuilderTests extends AbstractQueryTestCase<WildcardQueryBuilder> { @@ -53,18 +52,24 @@ public class WildcardQueryBuilderTests extends AbstractQueryTestCase<WildcardQue } @Test - public void testValidate() { - WildcardQueryBuilder wildcardQueryBuilder = new WildcardQueryBuilder("", "text"); - assertThat(wildcardQueryBuilder.validate().validationErrors().size(), is(1)); - - wildcardQueryBuilder = new WildcardQueryBuilder("field", null); - assertThat(wildcardQueryBuilder.validate().validationErrors().size(), is(1)); - - wildcardQueryBuilder = new WildcardQueryBuilder(null, null); - assertThat(wildcardQueryBuilder.validate().validationErrors().size(), is(2)); + public void testIllegalArguments() { + try { + if (randomBoolean()) { + new WildcardQueryBuilder(null, "text"); + } else { + new WildcardQueryBuilder("", "text"); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } - wildcardQueryBuilder = new WildcardQueryBuilder("field", "text"); - assertNull(wildcardQueryBuilder.validate()); + try { + new WildcardQueryBuilder("field", null); + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } } @Test diff --git a/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java index ab80378cb8..fff8de75f2 100644 --- a/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java @@ -20,6 +20,8 @@ package org.elasticsearch.index.query; import org.apache.lucene.search.Query; +import org.elasticsearch.common.bytes.BytesArray; +import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParser; import org.junit.Test; @@ -27,7 +29,6 @@ import org.junit.Test; import java.io.IOException; import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; public class WrapperQueryBuilderTests extends AbstractQueryTestCase<WrapperQueryBuilder> { @@ -68,11 +69,38 @@ public class WrapperQueryBuilderTests extends AbstractQueryTestCase<WrapperQuery } @Test - public void testValidate() { - WrapperQueryBuilder wrapperQueryBuilder = new WrapperQueryBuilder((byte[]) null); - assertThat(wrapperQueryBuilder.validate().validationErrors().size(), is(1)); + public void testIllegalArgument() { + try { + if (randomBoolean()) { + new WrapperQueryBuilder((byte[]) null); + } else { + new WrapperQueryBuilder(new byte[0]); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } + + try { + if (randomBoolean()) { + new WrapperQueryBuilder((String) null); + } else { + new WrapperQueryBuilder(""); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } - wrapperQueryBuilder = new WrapperQueryBuilder(""); - assertThat(wrapperQueryBuilder.validate().validationErrors().size(), is(1)); + try { + if (randomBoolean()) { + new WrapperQueryBuilder((BytesReference) null); + } else { + new WrapperQueryBuilder(new BytesArray(new byte[0])); + } + fail("cannot be null or empty"); + } catch (IllegalArgumentException e) { + // expected + } } } diff --git a/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java b/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java index 1f0fa1b9ad..e6f667186b 100644 --- a/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java +++ b/core/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java @@ -1556,12 +1556,11 @@ public class SearchQueryIT extends ESIntegTestCase { client().prepareIndex("test", "test", "4").setSource("description", "foo")); SearchResponse searchResponse = client().prepareSearch("test") - .setQuery(spanOrQuery().clause(spanTermQuery("description", "bar"))).get(); + .setQuery(spanOrQuery(spanTermQuery("description", "bar"))).get(); assertHitCount(searchResponse, 1l); searchResponse = client().prepareSearch("test").setQuery( - spanNearQuery(3) - .clause(spanTermQuery("description", "foo")) + spanNearQuery(spanTermQuery("description", "foo"), 3) .clause(spanTermQuery("description", "other"))).get(); assertHitCount(searchResponse, 3l); } @@ -1577,24 +1576,24 @@ public class SearchQueryIT extends ESIntegTestCase { refresh(); SearchResponse response = client().prepareSearch("test") - .setQuery(spanOrQuery().clause(spanMultiTermQueryBuilder(fuzzyQuery("description", "fop")))).get(); + .setQuery(spanOrQuery(spanMultiTermQueryBuilder(fuzzyQuery("description", "fop")))).get(); assertHitCount(response, 4); response = client().prepareSearch("test") - .setQuery(spanOrQuery().clause(spanMultiTermQueryBuilder(prefixQuery("description", "fo")))).get(); + .setQuery(spanOrQuery(spanMultiTermQueryBuilder(prefixQuery("description", "fo")))).get(); assertHitCount(response, 4); response = client().prepareSearch("test") - .setQuery(spanOrQuery().clause(spanMultiTermQueryBuilder(wildcardQuery("description", "oth*")))).get(); + .setQuery(spanOrQuery(spanMultiTermQueryBuilder(wildcardQuery("description", "oth*")))).get(); assertHitCount(response, 3); response = client().prepareSearch("test") - .setQuery(spanOrQuery().clause(spanMultiTermQueryBuilder(QueryBuilders.rangeQuery("description").from("ffa").to("foo")))) + .setQuery(spanOrQuery(spanMultiTermQueryBuilder(QueryBuilders.rangeQuery("description").from("ffa").to("foo")))) .execute().actionGet(); assertHitCount(response, 3); response = client().prepareSearch("test") - .setQuery(spanOrQuery().clause(spanMultiTermQueryBuilder(regexpQuery("description", "fo{2}")))).get(); + .setQuery(spanOrQuery(spanMultiTermQueryBuilder(regexpQuery("description", "fo{2}")))).get(); assertHitCount(response, 3); } @@ -1607,20 +1606,17 @@ public class SearchQueryIT extends ESIntegTestCase { refresh(); SearchResponse searchResponse = client().prepareSearch("test") - .setQuery(spanNotQuery(spanNearQuery(1) - .clause(QueryBuilders.spanTermQuery("description", "quick")) + .setQuery(spanNotQuery(spanNearQuery(QueryBuilders.spanTermQuery("description", "quick"), 1) .clause(QueryBuilders.spanTermQuery("description", "fox")), spanTermQuery("description", "brown"))).get(); assertHitCount(searchResponse, 1l); searchResponse = client().prepareSearch("test") - .setQuery(spanNotQuery(spanNearQuery(1) - .clause(QueryBuilders.spanTermQuery("description", "quick")) + .setQuery(spanNotQuery(spanNearQuery(QueryBuilders.spanTermQuery("description", "quick"), 1) .clause(QueryBuilders.spanTermQuery("description", "fox")), spanTermQuery("description", "sleeping")).dist(5)).get(); assertHitCount(searchResponse, 1l); searchResponse = client().prepareSearch("test") - .setQuery(spanNotQuery(spanNearQuery(1) - .clause(QueryBuilders.spanTermQuery("description", "quick")) + .setQuery(spanNotQuery(spanNearQuery(QueryBuilders.spanTermQuery("description", "quick"), 1) .clause(QueryBuilders.spanTermQuery("description", "fox")), spanTermQuery("description", "jumped")).pre(1).post(1)).get(); assertHitCount(searchResponse, 1l); } |