001    /**
002     * creates a CFML 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.exp.PageException;
009    import railo.runtime.functions.BIF;
010    import railo.runtime.type.Array;
011    import railo.runtime.type.FunctionValue;
012    import railo.runtime.type.Query;
013    import railo.runtime.type.QueryImpl;
014    
015    public final class Query_ extends BIF {
016    
017            private static final long serialVersionUID = -3496695992298284984L;
018    
019            public static Query call(PageContext pc , Object[] arr) throws DatabaseException {
020                    String[] names=new String[arr.length];
021                    Array[] columns=new Array[arr.length];
022                    int count=0;
023                    
024                    for(int i=0;i<arr.length;i++) {
025                            if(arr[i] instanceof FunctionValue) {
026                                    FunctionValue vf = (FunctionValue)arr[i];
027                                    if(vf.getValue() instanceof Array) {
028                                            names[count]=vf.getNameAsString();
029                                            columns[count]=(Array) vf.getValue();
030                                            count++;
031                                    }
032                                    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);
033                            }
034                            else throw new DatabaseException("invalid argument for function query, only named argument are allowed","example: query(column1:array(1,2,3))",null,null,null);
035                    }
036                    Query query=new QueryImpl(names,columns,"query");
037                    return query;
038            }
039            
040            @Override
041            public Object invoke(PageContext pc, Object[] args) throws PageException {
042                    return call(pc,(Object[])args[0]);
043            }
044    }