package org.jboss.ejb.plugins.cmp.jdbc;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCQueryMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCReadAheadMetaData;
public final class JDBCFindByQuery extends JDBCAbstractQueryCommand
{
private final JDBCCMPFieldBridge cmpField;
public JDBCFindByQuery(JDBCStoreManager manager, JDBCQueryMetaData q)
throws IllegalArgumentException
{
super(manager, q);
JDBCEntityBridge entity = (JDBCEntityBridge) manager.getEntityBridge();
String finderName = q.getMethod().getName();
String cmpFieldName = Character.toLowerCase(finderName.charAt(6)) + finderName.substring(7);
cmpField = entity.getCMPFieldByName(cmpFieldName);
if(cmpField == null)
{
throw new IllegalArgumentException(
"No finder for this method: " + finderName);
}
JDBCReadAheadMetaData readAhead = q.getReadAhead();
if(readAhead.isOnFind())
{
setEagerLoadGroup(readAhead.getEagerLoadGroup());
}
StringBuffer sql = new StringBuffer(300);
sql.append(SQLUtil.SELECT);
SQLUtil.getColumnNamesClause(entity.getPrimaryKeyFields(), sql);
if(getEagerLoadGroup() != null)
{
SQLUtil.appendColumnNamesClause(entity, getEagerLoadGroup(), sql);
}
sql.append(SQLUtil.FROM)
.append(entity.getQualifiedTableName())
.append(SQLUtil.WHERE);
SQLUtil.getWhereClause(cmpField, sql);
setSQL(sql.toString());
setParameterList(QueryParameter.createParameters(0, cmpField));
}
}