001    package railo.runtime.functions.orm;
002    
003    import railo.runtime.PageContext;
004    import railo.runtime.exp.FunctionException;
005    import railo.runtime.exp.PageException;
006    import railo.runtime.op.Caster;
007    import railo.runtime.op.Decision;
008    import railo.runtime.orm.ORMSession;
009    import railo.runtime.orm.ORMUtil;
010    import railo.runtime.type.ArrayImpl;
011    import railo.runtime.type.Struct;
012    
013    public class ORMExecuteQuery {
014            
015            public static Object call(PageContext pc,String hql) throws PageException {
016                    return _call(pc,hql,null,false,null);   
017            }
018            public static Object call(PageContext pc,String hql,Object paramsOrUnique) throws PageException {
019                    if(Decision.isCastableToBoolean(paramsOrUnique)){
020                            return _call(pc,hql,null,Caster.toBooleanValue(paramsOrUnique),null);
021                    }
022                    return _call(pc,hql,paramsOrUnique,false,null);
023            }
024            public static Object call(PageContext pc,String hql,Object paramsOrUnique,Object uniqueOrQueryOptions) throws PageException {
025                    if(Decision.isCastableToBoolean(paramsOrUnique)){
026                            return _call(pc,hql,null,Caster.toBooleanValue(paramsOrUnique),Caster.toStruct(uniqueOrQueryOptions));
027                    }
028                    if(Decision.isCastableToBoolean(uniqueOrQueryOptions)){
029                            return _call(pc,hql,paramsOrUnique,Caster.toBooleanValue(uniqueOrQueryOptions),null);
030                    }
031                    return _call(pc,hql,paramsOrUnique,false,Caster.toStruct(uniqueOrQueryOptions));
032            }
033    
034            public static Object call(PageContext pc,String hql,Object params,Object unique, Object queryOptions) throws PageException {
035                    return _call(pc,hql,params,Caster.toBooleanValue(unique),Caster.toStruct(queryOptions));
036            }
037            private static Object _call(PageContext pc,String hql, Object params, boolean unique, Struct queryOptions) throws PageException {
038                    ORMSession session=ORMUtil.getSession(pc);
039                    //ORMEngine engine= ORMUtil.getEngine(pc);
040                    if(params==null)
041                            return session.executeQuery(pc,hql,new ArrayImpl(),unique,queryOptions);
042                    else if(Decision.isStruct(params))
043                            return session.executeQuery(pc,hql,Caster.toStruct(params),unique,queryOptions);
044                    else if(Decision.isArray(params))
045                            return session.executeQuery(pc,hql,Caster.toArray(params),unique,queryOptions);
046                    else if(Decision.isCastableToStruct(params))
047                            return session.executeQuery(pc,hql,Caster.toStruct(params),unique,queryOptions);
048                    else if(Decision.isCastableToArray(params))
049                            return session.executeQuery(pc,hql,Caster.toArray(params),unique,queryOptions);
050                    else
051                            throw new FunctionException(pc, "ORMExecuteQuery", 2, "params", "cannot convert the params to a array or a struct");
052            }
053    }