use of com.developmentontheedge.sql.model.AstInPredicate in project be5 by DevelopmentOnTheEdge.
the class ContextApplier method applyParameterTag.
private void applyParameterTag(SimpleNode newTree, int i, String key, Function<String, String> varResolver) {
String value;
SimpleNode replacement;
AstBeParameterTag paramNode = (AstBeParameterTag) newTree.child(i);
String multiple = paramNode.getMultiple();
boolean tableRefAddend = newTree instanceof AstTableRef && i == 1;
if (multiple == null) {
value = context.getParameter(paramNode.getName());
Map<String, String> propertyMap = getSubQueryPropertyMap(key, varResolver);
if (value == null && propertyMap.containsKey(paramNode.getName())) {
value = propertyMap.get(paramNode.getName());
}
replacement = applyParameters(paramNode, value, tableRefAddend);
} else {
if (newTree instanceof AstInValueList) {
List<String> values = context.getListParameter(paramNode.getName());
paramNode.replaceWith(StreamEx.of(values).map(val -> applyParameters(paramNode, val, tableRefAddend)).toArray(SimpleNode[]::new));
return;
}
if (!(newTree instanceof AstInPredicate))
throw new IllegalArgumentException("Parameter Multiple can only be put inside InPredicate");
AstInValueList list = new AstInValueList(SqlParserTreeConstants.JJTINVALUELIST);
List<String> values = context.getListParameter(paramNode.getName());
if (values != null) {
for (String val : values) {
list.addChild(applyParameters(paramNode, val, tableRefAddend));
}
}
replacement = list;
}
replacement.inheritFrom(paramNode);
if (tableRefAddend) {
AstTableRef tableRef = (AstTableRef) newTree;
tableRef.setTable(tableRef.getTable() + replacement.format());
tableRef.removeChild(i);
} else {
newTree.jjtAddChild(replacement, i);
}
}
Aggregations