blob: e5236b56d7ebd3eef4dbb5cbaea48e9115252000 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.client.solrj.io.stream.expr;
import org.apache.solr.SolrTestCase;
import org.junit.Test;
/**
**/
public class StreamExpressionParserTest extends SolrTestCase {
public StreamExpressionParserTest() {
super();
}
@Test
public void testParsing() throws Exception{
StreamExpression actual, expected;
actual = StreamExpressionParser.parse("aliases(a_i=alias.a_i)");
expected = new StreamExpression("aliases")
.withParameter(new StreamExpressionNamedParameter("a_i", "alias.a_i"));
assertEquals(expected,actual);
actual = StreamExpressionParser.parse("search(a,b)");
expected = new StreamExpression("search").withParameter("a").withParameter("b");
assertEquals(expected, actual);
actual = StreamExpressionParser.parse("search(collection1, q=*:*, sort=\"fieldA desc, fieldB asc, fieldC asc\")");
expected = new StreamExpression("search")
.withParameter(new StreamExpressionValue("collection1"))
.withParameter(new StreamExpressionNamedParameter("q").withParameter("*:*"))
.withParameter(new StreamExpressionNamedParameter("sort").withParameter("fieldA desc, fieldB asc, fieldC asc"));
assertEquals(expected,actual);
actual = StreamExpressionParser.parse("unique(search(collection1, q=*:*, sort=\"fieldA desc, fieldB asc, fieldC asc\"))");
expected = new StreamExpression("unique")
.withParameter(new StreamExpression("search")
.withParameter(new StreamExpressionValue("collection1"))
.withParameter(new StreamExpressionNamedParameter("q").withParameter("*:*"))
.withParameter(new StreamExpressionNamedParameter("sort").withParameter("fieldA desc, fieldB asc, fieldC asc"))
);
assertEquals(expected,actual);
actual = StreamExpressionParser.parse("unique(search(collection1, q=*:*, sort=\"fieldA desc, fieldB asc, fieldC asc\"), alt=search(collection1, foo=bar))");
expected = new StreamExpression("unique")
.withParameter(new StreamExpression("search")
.withParameter(new StreamExpressionValue("collection1"))
.withParameter(new StreamExpressionNamedParameter("q").withParameter("*:*"))
.withParameter(new StreamExpressionNamedParameter("sort").withParameter("fieldA desc, fieldB asc, fieldC asc")))
.withParameter(new StreamExpressionNamedParameter("alt")
.withParameter(new StreamExpression("search")
.withParameter("collection1")
.withParameter(new StreamExpressionNamedParameter("foo")
.withParameter("bar"))));
assertEquals(expected,actual);
actual = StreamExpressionParser.parse("innerJoin("
+ "left=search(collection1, q=*:*, fl=\"fieldA,fieldB,fieldC\", sort=\"fieldA asc, fieldB asc\"),"
+ "right=search(collection2, q=*:*, fl=\"fieldA,fieldD\", sort=fieldA asc),"
+ "on(equals(fieldA), notEquals(fieldC,fieldD))"
+ ")");
expected = new StreamExpression("innerJoin")
.withParameter(new StreamExpressionNamedParameter("left")
.withParameter(new StreamExpression("search")
.withParameter("collection1")
.withParameter(new StreamExpressionNamedParameter("q","*:*"))
.withParameter(new StreamExpressionNamedParameter("fl","fieldA,fieldB,fieldC"))
.withParameter(new StreamExpressionNamedParameter("sort","fieldA asc, fieldB asc"))))
.withParameter(new StreamExpressionNamedParameter("right")
.withParameter(new StreamExpression("search")
.withParameter("collection2")
.withParameter(new StreamExpressionNamedParameter("q","*:*"))
.withParameter(new StreamExpressionNamedParameter("fl","fieldA,fieldD"))
.withParameter(new StreamExpressionNamedParameter("sort","fieldA asc"))))
.withParameter(new StreamExpression("on")
.withParameter(new StreamExpression("equals").withParameter("fieldA"))
.withParameter(new StreamExpression("notEquals").withParameter("fieldC").withParameter("fieldD")));
assertEquals(expected,actual);
}
}