use of datawave.query.language.parser.ParseException in project datawave by NationalSecurityAgency.
the class EvaluationOnly method toString.
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("((_Eval_ = true) && (");
List<String> params = getParameterList();
if (params.size() != 1) {
BadRequestQueryException qe = new BadRequestQueryException(DatawaveErrorCode.INVALID_FUNCTION_ARGUMENTS, MessageFormat.format("{0}", this.name));
throw new IllegalArgumentException(qe);
} else {
try {
sb.append(parser.parse(params.get(0)).getOriginalQuery());
} catch (ParseException e) {
BadRequestQueryException qe = new BadRequestQueryException(DatawaveErrorCode.INVALID_FUNCTION_ARGUMENTS, MessageFormat.format("{0}", this.name));
throw new IllegalArgumentException(qe);
}
}
sb.append("))");
return sb.toString();
}
use of datawave.query.language.parser.ParseException in project datawave by NationalSecurityAgency.
the class LuceneToJexlQueryParser method convertToJexlNode.
public JexlNode convertToJexlNode(String query) throws ParseException {
// replace open smart quote 147
query = query.replaceAll("\\u0093", "\"");
// replace close smart quote 148
query = query.replaceAll("\\u0094", "\"");
// replace open left double quote
query = query.replaceAll("\\u201c", "\"");
// replace close right double quote
query = query.replaceAll("\\u201d", "\"");
JexlNode parsedQuery = null;
try {
Locale.setDefault(Locale.US);
AccumuloSyntaxParser syntaxParser = new AccumuloSyntaxParser();
syntaxParser.enable_tracing();
QueryNodeProcessor processor = getQueryNodeProcessor();
QueryBuilder builder = new JexlTreeBuilder(allowedFunctions);
org.apache.lucene.queryparser.flexible.core.nodes.QueryNode queryTree = syntaxParser.parse(query, "");
queryTree = processor.process(queryTree);
parsedQuery = (JexlNode) builder.build(queryTree);
} catch (Exception e) {
throw new ParseException(e);
}
return parsedQuery;
}
use of datawave.query.language.parser.ParseException in project datawave by NationalSecurityAgency.
the class LuceneToJexlUUIDQueryParser method parse.
@Override
public QueryNode parse(String query) throws ParseException {
// replace open smart quote 147
query = query.replaceAll("\\u0093", "\"");
// replace close smart quote 148
query = query.replaceAll("\\u0094", "\"");
QueryNode parsedQuery = null;
parsedQuery = luceneParser.parse(query);
if (!validUUIDQuery(parsedQuery))
throw new ParseException("Query: " + query + " not supported with the LuceneToJexlUUIDQueryParser");
return super.parse(query);
}
use of datawave.query.language.parser.ParseException in project datawave by NationalSecurityAgency.
the class JexlControlledQueryParser method checkIfQueryAllowed.
private void checkIfQueryAllowed(String query) throws ParseException {
JexlNode node;
try {
node = JexlASTHelper.parseJexlQuery(query);
} catch (Throwable e) {
throw new ParseException(e.getMessage());
}
Set<String> fields = new TreeSet<>();
List<ASTIdentifier> idList = JexlASTHelper.getIdentifiers(node);
for (ASTIdentifier id : idList) {
String fieldName = id.image;
if (!StringUtils.isEmpty(fieldName)) {
fieldName = fieldName.trim().toUpperCase();
if (fieldName.charAt(0) == '$') {
fields.add(fieldName.substring(1));
} else {
fields.add(fieldName);
}
}
}
fields.removeAll(allowedFields);
if (!fields.isEmpty()) {
throw new ParseException("Unallowed field(s) '" + fields + "' for this type of query");
}
}
use of datawave.query.language.parser.ParseException in project datawave by NationalSecurityAgency.
the class LuceneQueryParser method parse.
@Override
public datawave.query.language.tree.QueryNode parse(String query) throws ParseException {
// replace open smart quote 147
query = query.replaceAll("\\u0093", "\"");
// replace close smart quote 148
query = query.replaceAll("\\u0094", "\"");
datawave.query.language.tree.QueryNode parsedQuery = null;
try {
Locale.setDefault(Locale.US);
AccumuloSyntaxParser syntaxParser = new AccumuloSyntaxParser();
syntaxParser.enable_tracing();
org.apache.lucene.queryparser.flexible.core.config.QueryConfigHandler queryConfigHandler = new QueryConfigHandler();
QueryNodeProcessor processor = new CustomQueryNodeProcessorPipeline(queryConfigHandler);
QueryBuilder builder = null;
if (allowedFunctions == null) {
builder = new AccumuloQueryTreeBuilder();
} else {
builder = new AccumuloQueryTreeBuilder(allowedFunctions);
}
QueryNode queryTree = syntaxParser.parse(query, "");
queryTree = processor.process(queryTree);
parsedQuery = (datawave.query.language.tree.QueryNode) builder.build(queryTree);
Set<FieldedTerm> positiveFilters = new TreeSet<>();
if (log.isTraceEnabled()) {
log.trace("Query before filters extracted: " + parsedQuery.getContents());
}
extractFilters(parsedQuery, positiveFilters);
parsedQuery.setPositiveFilters(positiveFilters);
if (log.isTraceEnabled()) {
log.trace("Query after filters extracted: " + parsedQuery.getContents());
}
} catch (QueryNodeException | RuntimeException e) {
throw new ParseException(e);
}
return parsedQuery;
}
Aggregations