001 package railo.runtime.functions.query; 002 003 import java.util.Iterator; 004 005 import railo.runtime.PageContext; 006 import railo.runtime.config.NullSupportHelper; 007 import railo.runtime.exp.PageException; 008 import railo.runtime.functions.BIF; 009 import railo.runtime.op.Caster; 010 import railo.runtime.type.Array; 011 import railo.runtime.type.ArrayImpl; 012 import railo.runtime.type.KeyImpl; 013 import railo.runtime.type.Query; 014 import railo.runtime.type.QueryColumn; 015 import railo.runtime.type.UDF; 016 017 public class QueryColumnData extends BIF { 018 019 private static final long serialVersionUID = 3915214686428831274L; 020 021 public static Array call(PageContext pc, Query query, String columnName) throws PageException { 022 return call(pc, query, columnName, null); 023 } 024 public static Array call(PageContext pc, Query query, String columnName, UDF udf) throws PageException { 025 Array arr=new ArrayImpl(); 026 QueryColumn column = query.getColumn(KeyImpl.init(columnName)); 027 Iterator<Object> it = column.valueIterator(); 028 Object value; 029 while(it.hasNext()) { 030 value=it.next(); 031 if(!NullSupportHelper.full() && value==null) value=""; 032 if(udf!=null)arr.append(udf.call(pc, new Object[]{value}, true)); 033 else arr.append(value); 034 } 035 return arr; 036 } 037 038 @Override 039 public Object invoke(PageContext pc, Object[] args) throws PageException { 040 if(args.length==2)return call(pc,Caster.toQuery(args[0]),Caster.toString(args[1])); 041 return call(pc,Caster.toQuery(args[0]),Caster.toString(args[1]),Caster.toFunction(args[2])); 042 } 043 }