Search in sources :

Example 1 with AstInPredicate

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);
    }
}
Also used : AstInValueList(com.developmentontheedge.sql.model.AstInValueList) AstInPredicate(com.developmentontheedge.sql.model.AstInPredicate) AstBeParameterTag(com.developmentontheedge.sql.model.AstBeParameterTag) AstTableRef(com.developmentontheedge.sql.model.AstTableRef) SimpleNode(com.developmentontheedge.sql.model.SimpleNode)

Aggregations

AstBeParameterTag (com.developmentontheedge.sql.model.AstBeParameterTag)1 AstInPredicate (com.developmentontheedge.sql.model.AstInPredicate)1 AstInValueList (com.developmentontheedge.sql.model.AstInValueList)1 AstTableRef (com.developmentontheedge.sql.model.AstTableRef)1 SimpleNode (com.developmentontheedge.sql.model.SimpleNode)1