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}