Search in sources :

Example 1 with QueryNodeError

use of org.apache.lucene.queryparser.flexible.core.QueryNodeError in project lucene-solr by apache.

the class QueryNodeOperation method logicalAnd.

/**
   * perform a logical and of 2 QueryNode trees. if q1 and q2 are ANDQueryNode
   * nodes it uses head Node from q1 and adds the children of q2 to q1 if q1 is
   * a AND node and q2 is not, add q2 as a child of the head node of q1 if q2 is
   * a AND node and q1 is not, add q1 as a child of the head node of q2 if q1
   * and q2 are not ANDQueryNode nodes, create a AND node and make q1 and q2
   * children of that node if q1 or q2 is null it returns the not null node if
   * q1 = q2 = null it returns null
   */
public static final QueryNode logicalAnd(QueryNode q1, QueryNode q2) {
    if (q1 == null)
        return q2;
    if (q2 == null)
        return q1;
    ANDOperation op = null;
    if (q1 instanceof AndQueryNode && q2 instanceof AndQueryNode)
        op = ANDOperation.BOTH;
    else if (q1 instanceof AndQueryNode)
        op = ANDOperation.Q1;
    else if (q2 instanceof AndQueryNode)
        op = ANDOperation.Q2;
    else
        op = ANDOperation.NONE;
    try {
        QueryNode result = null;
        switch(op) {
            case NONE:
                List<QueryNode> children = new ArrayList<>();
                children.add(q1.cloneTree());
                children.add(q2.cloneTree());
                result = new AndQueryNode(children);
                return result;
            case Q1:
                result = q1.cloneTree();
                result.add(q2.cloneTree());
                return result;
            case Q2:
                result = q2.cloneTree();
                result.add(q1.cloneTree());
                return result;
            case BOTH:
                result = q1.cloneTree();
                result.add(q2.cloneTree().getChildren());
                return result;
        }
    } catch (CloneNotSupportedException e) {
        throw new QueryNodeError(e);
    }
    return null;
}
Also used : QueryNode(org.apache.lucene.queryparser.flexible.core.nodes.QueryNode) AndQueryNode(org.apache.lucene.queryparser.flexible.core.nodes.AndQueryNode) QueryNodeError(org.apache.lucene.queryparser.flexible.core.QueryNodeError) ArrayList(java.util.ArrayList) AndQueryNode(org.apache.lucene.queryparser.flexible.core.nodes.AndQueryNode)

Aggregations

ArrayList (java.util.ArrayList)1 QueryNodeError (org.apache.lucene.queryparser.flexible.core.QueryNodeError)1 AndQueryNode (org.apache.lucene.queryparser.flexible.core.nodes.AndQueryNode)1 QueryNode (org.apache.lucene.queryparser.flexible.core.nodes.QueryNode)1