001package gudusoft.gsqlparser.compiler.expr.function;
002
003import gudusoft.gsqlparser.compiler.IEvaluationContext;
004import gudusoft.gsqlparser.compiler.expr.IExprFunction;
005import gudusoft.gsqlparser.compiler.expr.TExprException;
006import gudusoft.gsqlparser.compiler.expr.TExprFunction;
007
008import java.util.HashMap;
009import java.util.Map;
010
011public class TFunctionMap implements IFunctionProvider {
012
013    private boolean caseSensitive;
014    private Map<String, IExprFunction> functions = new HashMap();
015
016    public TFunctionMap() {
017    }
018
019    public TFunctionMap(boolean caseSensitive) {
020        this.caseSensitive = caseSensitive;
021    }
022
023    public void add(String name, IExprFunction function) {
024        functions.put(caseSensitive ? name : name.toUpperCase(), function);
025    }
026
027    public Object evaluate(IEvaluationContext context, TExprFunction function)
028            throws TExprException {
029        IExprFunction f = functions.get(function.getName());
030        if (f != null)
031            return f.evaluate(context, function.getArgs());
032        return null;
033    }
034
035    public boolean hasFunction(TExprFunction function) {
036        return functions.containsKey(function.getName());
037    }
038}