package railo.runtime.functions.orm;
import railo.runtime.PageContext;
import railo.runtime.exp.FunctionException;
import railo.runtime.exp.PageException;
import railo.runtime.op.Caster;
import railo.runtime.op.Decision;
import railo.runtime.orm.ORMSession;
import railo.runtime.orm.ORMUtil;
import railo.runtime.type.ArrayImpl;
import railo.runtime.type.Struct;
public class ORMExecuteQuery {
public static Object call(PageContext pc,String hql) throws PageException {
return _call(pc,hql,null,false,null);
}
public static Object call(PageContext pc,String hql,Object paramsOrUnique) throws PageException {
if(Decision.isCastableToBoolean(paramsOrUnique)){
return _call(pc,hql,null,Caster.toBooleanValue(paramsOrUnique),null);
}
return _call(pc,hql,paramsOrUnique,false,null);
}
public static Object call(PageContext pc,String hql,Object paramsOrUnique,Object uniqueOrQueryOptions) throws PageException {
if(Decision.isCastableToBoolean(paramsOrUnique)){
return _call(pc,hql,null,Caster.toBooleanValue(paramsOrUnique),Caster.toStruct(uniqueOrQueryOptions));
}
if(Decision.isCastableToBoolean(uniqueOrQueryOptions)){
return _call(pc,hql,paramsOrUnique,Caster.toBooleanValue(uniqueOrQueryOptions),null);
}
return _call(pc,hql,paramsOrUnique,false,Caster.toStruct(uniqueOrQueryOptions));
}
public static Object call(PageContext pc,String hql,Object params,Object unique, Object queryOptions) throws PageException {
return _call(pc,hql,params,Caster.toBooleanValue(unique),Caster.toStruct(queryOptions));
}
private static Object _call(PageContext pc,String hql, Object params, boolean unique, Struct queryOptions) throws PageException {
ORMSession session=ORMUtil.getSession(pc);
if(params==null)
return session.executeQuery(pc,hql,new ArrayImpl(),unique,queryOptions);
else if(Decision.isStruct(params))
return session.executeQuery(pc,hql,Caster.toStruct(params),unique,queryOptions);
else if(Decision.isArray(params))
return session.executeQuery(pc,hql,Caster.toArray(params),unique,queryOptions);
else if(Decision.isCastableToStruct(params))
return session.executeQuery(pc,hql,Caster.toStruct(params),unique,queryOptions);
else if(Decision.isCastableToArray(params))
return session.executeQuery(pc,hql,Caster.toArray(params),unique,queryOptions);
else
throw new FunctionException(pc, "ORMExecuteQuery", 2, "params", "cannot convert the params to a array or a struct");
}
}