{
candidateAlias = "DN_THIS";
from.get(0).alias(candidateAlias);
}
SymbolTable symtbl = new SymbolTable(clr);
symtbl.setSymbolResolver(new JPQLSymbolResolver(mmgr, clr, symtbl, candidateClass, candidateAlias));
symtbl.addSymbol(new PropertySymbol(candidateAlias, candidateClass));
if (parentSymtbl != null)
{
symtbl.setParentSymbolTable(parentSymtbl);
}
org.datanucleus.query.expression.Expression[] resultExprs = null;
if (result != null && !result.isEmpty())
{
resultExprs = new org.datanucleus.query.expression.Expression[result.size()];
Iterator iter = result.iterator();
int i=0;
while (iter.hasNext())
{
ExpressionImpl result = (ExpressionImpl)iter.next();
org.datanucleus.query.expression.Expression resultExpr = result.getQueryExpression();
resultExpr.bind(symtbl);
resultExprs[i++] = resultExpr;
}
if (resultExprs != null && resultExprs.length == 1 && resultExprs[0] instanceof PrimaryExpression)
{
// Check for special case of "Object(p)" in result, which means no special result
String resultExprId = ((PrimaryExpression)resultExprs[0]).getId();
if (resultExprId.equalsIgnoreCase(candidateAlias))
{
resultExprs = null;
}
}
}
org.datanucleus.query.expression.Expression[] fromExprs =
new org.datanucleus.query.expression.Expression[from.size()];
Iterator iter = from.iterator();
int i=0;
while (iter.hasNext())
{
FromImpl frm = (FromImpl)iter.next();
Set<JoinImpl> frmJoins = frm.getJoins();
if (frmJoins != null && !frmJoins.isEmpty())
{
Iterator<JoinImpl> frmJoinIter = frmJoins.iterator();
while (frmJoinIter.hasNext())
{
JoinImpl frmJoin = frmJoinIter.next();
if (frmJoin.getAlias() != null)
{
Class frmJoinCls = frmJoin.getType().getJavaType();
symtbl.addSymbol(new PropertySymbol(frmJoin.getAlias(), frmJoinCls));
}
}
}
ClassExpression clsExpr = (ClassExpression)frm.getQueryExpression(true);