Merge pull request #12808 from cbuescher/feature/query-refactoring-dupCodeAndParser

Remove duplicate code in AndQueryParser
This commit is contained in:
Christoph Büscher 2015-08-13 12:41:31 +02:00
commit a67ee73ee2
2 changed files with 37 additions and 7 deletions

View File

@ -73,12 +73,6 @@ public class AndQueryParser extends BaseQueryParser<AndQueryBuilder> {
QueryBuilder filter = parseContext.parseInnerFilterToQueryBuilder();
queries.add(filter);
}
} else {
queriesFound = true;
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
QueryBuilder filter = parseContext.parseInnerFilterToQueryBuilder();
queries.add(filter);
}
}
} else if (token.isValue()) {
if ("_name".equals(currentFieldName)) {
@ -109,4 +103,4 @@ public class AndQueryParser extends BaseQueryParser<AndQueryBuilder> {
public AndQueryBuilder getBuilderPrototype() {
return AndQueryBuilder.PROTOTYPE;
}
}
}

View File

@ -31,6 +31,8 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.nullValue;
@ -116,4 +118,38 @@ public class AndQueryBuilderTest extends BaseQueryTestCase<AndQueryBuilder> {
}
assertValidate(andQuery, totalExpectedErrors);
}
public void testParsingToplevelArray() throws IOException {
QueryParseContext context = createParseContext();
String queryString = "{ \"and\" : [ { \"match_all\" : {} } ] }";
XContentParser parser = XContentFactory.xContent(queryString).createParser(queryString);
context.reset(parser);
assertThat(parser.nextToken(), is(XContentParser.Token.START_OBJECT));
assertThat(parser.nextToken(), is(XContentParser.Token.FIELD_NAME));
assertThat(parser.currentName(), is(AndQueryBuilder.NAME));
parser.nextToken();
AndQueryBuilder queryBuilder = (AndQueryBuilder) context.queryParser(AndQueryBuilder.NAME).fromXContent(context);
assertThat(queryBuilder.innerQueries().get(0), equalTo((QueryBuilder) new MatchAllQueryBuilder()));
}
public void testParsingFiltersArray() throws IOException {
QueryParseContext context = createParseContext();
String queryString = "{ \"and\" : { \"filters\" : [ { \"match_all\" : {} } ], \"boost\" : 0.7 } }";
XContentParser parser = XContentFactory.xContent(queryString).createParser(queryString);
context.reset(parser);
assertQueryHeader(parser, AndQueryBuilder.NAME);
AndQueryBuilder queryBuilder = (AndQueryBuilder) context.queryParser(AndQueryBuilder.NAME).fromXContent(context);
assertThat(queryBuilder.innerQueries().get(0), equalTo((QueryBuilder) new MatchAllQueryBuilder()));
assertThat(queryBuilder.boost(), equalTo(0.7f));
}
@Test(expected=QueryParsingException.class)
public void testParsingExceptionNonFiltersElementArray() throws IOException {
QueryParseContext context = createParseContext();
String queryString = "{ \"and\" : { \"whatever_filters\" : [ { \"match_all\" : {} } ] } }";
XContentParser parser = XContentFactory.xContent(queryString).createParser(queryString);
context.reset(parser);
assertQueryHeader(parser, AndQueryBuilder.NAME);
context.queryParser(AndQueryBuilder.NAME).fromXContent(context);
}
}