001    /**
002     * creates a Cold Fusion query Column
003     */
004    package railo.runtime.functions.query;
005    
006    import railo.runtime.PageContext;
007    import railo.runtime.exp.DatabaseException;
008    import railo.runtime.ext.function.Function;
009    import railo.runtime.type.Array;
010    import railo.runtime.type.FunctionValue;
011    import railo.runtime.type.Query;
012    import railo.runtime.type.QueryImpl;
013    
014    public final class Query_ implements Function {
015            public static Query call(PageContext pc , Object[] arr) throws DatabaseException {
016                    String[] names=new String[arr.length];
017                    Array[] columns=new Array[arr.length];
018                    int count=0;
019                    
020                    for(int i=0;i<arr.length;i++) {
021                            if(arr[i] instanceof FunctionValue) {
022                                    FunctionValue vf = (FunctionValue)arr[i];
023                                    if(vf.getValue() instanceof Array) {
024                                            names[count]=vf.getName();
025                                            columns[count]=(Array) vf.getValue();
026                                            count++;
027                                    }
028                                    else throw new DatabaseException("invalid argument for function query, only array as value are allowed","example: query(column1:array(1,2,3))",null,null,null);
029                            }
030                            else throw new DatabaseException("invalid argument for function query, only named argument are allowed","example: query(column1:array(1,2,3))",null,null,null);
031                    }
032                    Query query=new QueryImpl(names,columns,"query");
033                    return query;
034            }
035    }