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.LinkedHashSet;
009import java.util.Set;
010
011public class TFunctionManager implements IFunctionProvider {
012
013    private TFunctionMap functionMap;
014    private Set<IFunctionProvider> providers = new LinkedHashSet();
015
016    public TFunctionManager() {
017        this(false);
018    }
019
020    public TFunctionManager(boolean caseSensitive) {
021        functionMap = new TFunctionMap(caseSensitive);
022        providers.add(functionMap);
023    }
024
025    public void add(String name, IExprFunction function) {
026        functionMap.add(name, function);
027    }
028
029    public void add(IFunctionProvider provider) {
030        providers.add(provider);
031    }
032
033    public Object evaluate(IEvaluationContext context, TExprFunction function)
034            throws TExprException {
035        for (IFunctionProvider p : providers) {
036            if (p.hasFunction(function))
037                return p.evaluate(context, function);
038        }
039        return null;
040    }
041
042    public boolean hasFunction(TExprFunction function) {
043        for (IFunctionProvider p : providers) {
044            if (p.hasFunction(function))
045                return true;
046        }
047
048        return false;
049    }
050}