Skip to content

Commit

Permalink
Add checks for query builders
Browse files Browse the repository at this point in the history
  • Loading branch information
jimczi committed Jul 25, 2016
1 parent 44bd1e4 commit 6aeae7a
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
import org.elasticsearch.hadoop.serialization.Generator;

public class ConstantScoreQueryBuilder extends QueryBuilder {
public static final float DEFAULT_BOOST = 1.0f;
private QueryBuilder filter;
private float boost;
private float boost = DEFAULT_BOOST;

public ConstantScoreQueryBuilder filter(QueryBuilder filter) {
this.filter = filter;
public ConstantScoreQueryBuilder filter(QueryBuilder value) {
if (value == null) {
throw new IllegalArgumentException("inner clause [filter] cannot be null.");
}
this.filter = value;
return this;
}

Expand Down Expand Up @@ -37,6 +41,9 @@ public int hashCode() {

@Override
public void toJson(Generator out) {
if (filter == null) {
throw new IllegalArgumentException("inner clause [filter] cannot be null.");
}
out.writeFieldName("constant_score");
out.writeBeginObject();
out.writeFieldName("filter");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,24 @@ public class FilteredQueryBuilder extends QueryBuilder {
private QueryBuilder query;
private final List<QueryBuilder> filters = new ArrayList<QueryBuilder>();

public FilteredQueryBuilder query(QueryBuilder query) {
this.query = query;
public FilteredQueryBuilder query(QueryBuilder value) {
if (value == null) {
throw new IllegalArgumentException("inner clause [query] cannot be null.");
}
this.query = value;
return this;
}

public FilteredQueryBuilder filters(Collection<QueryBuilder> filters) {
this.filters.addAll(filters);
public FilteredQueryBuilder filters(Collection<QueryBuilder> values) {
this.filters.addAll(values);
return this;
}

@Override
public void toJson(Generator out) {
if (query == null) {
throw new IllegalArgumentException("inner clause [query] cannot be null.");
}
out.writeFieldName("filtered");
out.writeBeginObject();
out.writeFieldName("query");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@ public class QueryStringQueryBuilder extends QueryBuilder {
private String defaultOperator;
private Boolean lenient;

public QueryStringQueryBuilder query(String query) {
this.query = query;
public QueryStringQueryBuilder query(String value) {
if (value == null) {
throw new IllegalArgumentException("inner clause [query] cannot be null");
}
this.query = value;
return this;
}

Expand Down Expand Up @@ -62,7 +65,7 @@ public QueryStringQueryBuilder defaultOperator(String defaultOperator) {
@Override
public void toJson(Generator out) {
if (query == null) {
throw new IllegalArgumentException("query cannot be null");
throw new IllegalArgumentException("inner clause [query] cannot be null");
}
out.writeFieldName("query_string");
out.writeBeginObject();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,30 @@ public class TermQueryBuilder extends QueryBuilder {
private String field;
private String term;

public TermQueryBuilder field(String field) {
this.field = field;
public TermQueryBuilder field(String value) {
if (value == null) {
throw new IllegalArgumentException("inner clause [field] cannot be null");
}
this.field = value;
return this;
}

public TermQueryBuilder term(String term) {
this.term = term;
public TermQueryBuilder term(String value) {
if (value == null) {
throw new IllegalArgumentException("inner clause [term] cannot be null");
}
this.term = value;
return this;
}

@Override
public void toJson(Generator out) {
if (field == null) {
throw new IllegalArgumentException("inner clause [field] cannot be null");
}
if (term == null) {
throw new IllegalArgumentException("inner clause [field] cannot be null");
}
out.writeFieldName("term")
.writeBeginObject()
.writeFieldName(field)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import java.util.List;
import java.util.Random;

public class QueryBuilders {
public class RandomQueryBuilders {
static final int MAX_LEVEL = 3;
static QueryBuilder randomQuery(Random rand) {
return randomQuery(rand, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,63 +31,37 @@

public class RawQueryBuilderTest {
private static Random random = new Random();
@Test
public void testWithEmbeddedQuery() throws IOException {
QueryBuilder randomQuery = QueryBuilders.randomQuery(random);
FastByteArrayOutputStream out = new FastByteArrayOutputStream(256);
Generator generator = new JacksonJsonGenerator(out)
.writeBeginObject()
.writeFieldName("query")
.writeBeginObject();
randomQuery.toJson(generator);
generator.writeEndObject().writeEndObject();
generator.flush();
String queryString = out.toString().trim();
RawQueryBuilder rawQuery = new RawQueryBuilder(queryString);
out.reset();
generator.writeBeginObject();
generator.writeFieldName("query");
generator.writeBeginObject();
rawQuery.toJson(generator);
generator.writeEndObject();
generator.writeEndObject();
generator.close();
String rawQueryString = out.toString().trim();
assertEquals(queryString, rawQueryString);
}

@Test
public void testEquals() throws IOException {
QueryBuilder randomQuery1 = QueryBuilders.randomQuery(random);
for (int i = 0; i < 20; i++) {
QueryBuilder randomQuery = RandomQueryBuilders.randomQuery(random);
String queryString = printQueryBuilder(randomQuery, false);

RawQueryBuilder rawQuery = new RawQueryBuilder(queryString);
String rawQueryString = printQueryBuilder(rawQuery, false);
assertEquals(queryString, rawQueryString);
if (randomQuery instanceof RawQueryBuilder) {
assertEquals(randomQuery, rawQuery);
} else {
assertNotEquals(randomQuery, rawQuery);
}
}
}

static String printQueryBuilder(QueryBuilder builder, boolean addQuery) {
FastByteArrayOutputStream out = new FastByteArrayOutputStream(256);
Generator generator = new JacksonJsonGenerator(out);
generator.writeBeginObject();
randomQuery1.toJson(generator);
generator.writeEndObject();
generator.flush();
String queryString = out.toString().trim();
RawQueryBuilder rawQuery = new RawQueryBuilder(queryString);
out.reset();
generator.writeBeginObject();
rawQuery.toJson(generator);
generator.writeEndObject();
generator.flush();
String rawQueryString = out.toString().trim();
assertEquals(rawQueryString, queryString);
if (randomQuery1 instanceof RawQueryBuilder) {
assertEquals(rawQuery, randomQuery1);
} else {
assertNotEquals(rawQuery, randomQuery1);
if (addQuery) {
generator.writeBeginObject().writeFieldName("query");
}

QueryBuilder randomQuery2 = QueryBuilders.randomQuery(random);
assertNotEquals(rawQuery, randomQuery2);
out.reset();
generator.writeBeginObject();
randomQuery2.toJson(generator);
builder.toJson(generator);
generator.writeEndObject();
if (addQuery) {
generator.writeEndObject();
}
generator.close();
String queryString2 = out.toString().trim();
assertNotEquals(rawQueryString, queryString2);
return out.toString();
}
}

0 comments on commit 6aeae7a

Please sign in to comment.