package org.jboss.ejb.plugins.cmp.jdbc;
import org.jboss.deployment.DeploymentException;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCJBossQLQueryMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCReadAheadMetaData;
public final class JDBCJBossQLQuery extends JDBCAbstractQueryCommand
{
public JDBCJBossQLQuery(JDBCStoreManager manager,
JDBCQueryMetaData q)
throws DeploymentException
{
super(manager, q);
JDBCJBossQLQueryMetaData metadata = (JDBCJBossQLQueryMetaData)q;
if(getLog().isDebugEnabled())
{
getLog().debug("JBossQL: " + metadata.getJBossQL());
}
QLCompiler compiler = JDBCQueryManager.getInstance(metadata.getQLCompilerClass(), manager.getCatalog());
try
{
compiler.compileJBossQL(
metadata.getJBossQL(),
metadata.getMethod().getReturnType(),
metadata.getMethod().getParameterTypes(),
metadata);
}
catch(Throwable t)
{
t.printStackTrace();
throw new DeploymentException("Error compiling JBossQL " +
"statement '" + metadata.getJBossQL() + "'", t);
}
setSQL(compiler.getSQL());
setOffsetParam(compiler.getOffsetParam());
setOffsetValue(compiler.getOffsetValue());
setLimitParam(compiler.getLimitParam());
setLimitValue(compiler.getLimitValue());
if(compiler.isSelectEntity())
{
JDBCEntityBridge selectEntity = (JDBCEntityBridge) compiler.getSelectEntity();
setSelectEntity(selectEntity);
JDBCReadAheadMetaData readahead = metadata.getReadAhead();
if(readahead.isOnFind())
{
setEagerLoadGroup(readahead.getEagerLoadGroup());
setOnFindCMRList(compiler.getLeftJoinCMRList());
}
}
else if(compiler.isSelectField())
{
setSelectField((JDBCCMPFieldBridge) compiler.getSelectField());
}
else
{
setSelectFunction(compiler.getSelectFunction(), (JDBCStoreManager) compiler.getStoreManager());
}
setParameterList(compiler.getInputParameters());
}
}