001import gudusoft.gsqlparser.compiler.builtinFunction.TOracleBuiltFunction;
002
003import java.lang.reflect.Method;
004
005public class dynamicFunction {
006    public static void main(String args[])  throws Exception{
007       // System.out.println("test dynamic function call");
008        // 找到预定义的函数,传入参数进行调用
009
010//        dynamicFunction obj = new dynamicFunction();
011//
012//        Class xxxClass = Class.forName("dynamicFunction");
013//        Method xxxMethod = xxxClass.getMethod("myPrint", new Class[]{});
014//        Method xxxMethod2 = xxxClass.getMethod("myPrint", new Class[]{String.class});
015//
016//        xxxMethod.invoke(obj);
017//        xxxMethod2.invoke(obj,"ppp");
018
019//        Method xxxMethod = searchMethod("myPrint",new Class[]{String.class}, String.class);
020//        if (xxxMethod != null) xxxMethod.invoke(obj,"hello word");
021//        Method xxxMethod2 = searchMethod("myPrint",new Class[]{}, String.class);
022//        if (xxxMethod2 != null) xxxMethod2.invoke(obj);
023
024        TOracleBuiltFunction oracleBuiltFunction1 = TOracleBuiltFunction.getOracleBuiltFunctionInstance();
025//        TOracleBuiltFunction oracleBuiltFunction2 = TOracleBuiltFunction.getOracleBuiltFunctionInstance();
026//        System.out.println(oracleBuiltFunction1);
027//        System.out.println(oracleBuiltFunction2);
028
029        Method xxxMethod =  oracleBuiltFunction1.searchMethod("dbms_output","put_line",new Class[]{String.class}, void.class);
030        if (xxxMethod != null) {
031            xxxMethod.invoke(oracleBuiltFunction1,"hello word");
032        }else{
033            System.out.println("put_line function is not found");
034        }
035    }
036
037    public String myPrint(){
038        System.out.println("call myPrint with no argument");
039        return "x";
040    }
041
042    public String myPrint(String str){
043        System.out.println("call myPrint: "+str);
044        return str;
045    }
046
047//    public static Method searchMethod(String functionName, Class[] parameterTypes, Class<?> returnType){
048//        Method ret = null;
049//
050//        Class xxxClass = null;
051//        try {
052//            xxxClass = Class.forName("dynamicFunction");
053//        } catch (ClassNotFoundException e) {
054//           // throw new RuntimeException(e);
055//            return null;
056//        }
057//
058//        Method[] allMethods = xxxClass.getDeclaredMethods();
059//
060//        for (Method m : allMethods) {
061//            if (m.getName().equals(functionName)){
062//                if (returnType != m.getReturnType()){
063//                    continue;
064//                }
065//                if (parameterTypes.length  != m.getParameterTypes().length){
066//                    continue;
067//                }
068//
069//                if ((parameterTypes.length == 0) && (m.getParameterTypes().length == 0)){
070//                    System.out.println("Find function: "+m.getName()+" with no argument");
071//                    ret = m;
072//                    break;
073//                }
074//
075//                int i=0;
076//                while (i<parameterTypes.length){
077//                    if (m.getParameterTypes()[i] != parameterTypes[i]){
078//                        break;
079//                    }
080//                    i++;
081//                }
082//
083//                if (i == parameterTypes.length){
084//                    System.out.println("Find function: "+m.getName()+" with "+ parameterTypes.length +" arguments");
085//                    ret =m;
086//                    break;
087//                }
088//            }
089//        }
090//        return ret;
091//    }
092
093
094
095
096}