001    /**
002     * Implements the CFML Function queryaddcolumn
003     */
004    package railo.runtime.functions.query;
005    
006    import railo.runtime.PageContext;
007    import railo.runtime.db.SQLCaster;
008    import railo.runtime.exp.PageException;
009    import railo.runtime.functions.BIF;
010    import railo.runtime.op.Caster;
011    import railo.runtime.type.ArrayImpl;
012    import railo.runtime.type.KeyImpl;
013    import railo.runtime.type.Query;
014    
015    public final class QueryAddColumn extends BIF {
016    
017            private static final long serialVersionUID = -242783888553490683L;
018    
019            public static double call(PageContext pc , Query query, String string) throws PageException {
020                    return call(pc, query, string,new ArrayImpl());
021            }
022            
023            public static double call(PageContext pc , Query query, String string, Object array) throws PageException {
024                    query.addColumn(KeyImpl.init(string),Caster.toArray(array));
025                    return query.size();
026            }
027            
028            public static double call(PageContext pc , Query query, String string, Object datatype, Object array) throws PageException {
029                    if(datatype==null) return call(pc, query, string, array);
030                    
031                    query.addColumn(KeyImpl.init(string),Caster.toArray(array),SQLCaster.toIntType(Caster.toString(datatype)));
032                    return query.size();
033            }
034            
035            @Override
036            public Object invoke(PageContext pc, Object[] args) throws PageException {
037                    if(args.length==2)return call(pc,Caster.toQuery(args[0]),Caster.toString(args[1]));
038                    if(args.length==3)return call(pc,Caster.toQuery(args[0]),Caster.toString(args[1]),args[2]);
039                    return call(pc,Caster.toQuery(args[0]),Caster.toString(args[1]),args[2],args[3]);
040            }
041    }