package org.apache.lucene.queryparser.flexible.aqp.builders; import org.apache.lucene.queryparser.flexible.messages.MessageImpl; import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpFunctionQueryNode; import org.apache.lucene.queryparser.flexible.aqp.parser.AqpSubqueryParser; import org.apache.lucene.queryparser.flexible.core.QueryNodeException; import org.apache.lucene.queryparser.flexible.core.builders.QueryTreeBuilder; import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode; import org.apache.lucene.search.Query; import org.apache.solr.search.AqpFunctionQParser; import org.apache.solr.search.SyntaxError; public class AqpSubQueryTreeBuilder extends QueryTreeBuilder implements AqpFunctionQueryBuilder { private AqpSubqueryParser aqpValueSourceParser; private AqpFunctionQParser functionQueryParser; public AqpSubQueryTreeBuilder(AqpSubqueryParser provider, AqpFunctionQParser parser) { aqpValueSourceParser = provider; functionQueryParser = parser; } public Query build(QueryNode node) throws QueryNodeException { try { functionQueryParser.setQueryNode((AqpFunctionQueryNode) node); if (((AqpFunctionQueryNode) node).getOriginalInput() != null) { functionQueryParser.setString(((AqpFunctionQueryNode) node).getOriginalInput().value); } return aqpValueSourceParser.parse(functionQueryParser); } catch (SyntaxError e) { QueryNodeException ex = new QueryNodeException(new MessageImpl(e.getMessage())); ex.setStackTrace(e.getStackTrace()); throw ex; } finally { functionQueryParser.getReq().close(); } } }