{
String vtIdentifier = mtIdentifier + '.' + (++n);
vtRangeVar = idFactory.newIdentifier(IdentifierFactory.TABLE, vtIdentifier);
} while (qs.getTableExpression(vtRangeVar) != null);
ClassLoaderResolver clr = qs.getClassLoaderResolver();
QueryExpression qexpr = getBackingStoreQueryable().getExistsSubquery(qs, mapping, te, mtRangeVar);
ScalarExpression joinKeysExpr = getBackingStoreQueryable().joinKeysTo(qexpr,
qs,
mapping,
te,
mtRangeVar,
clr.classForName(expr.getMapping().getType()),
expr,
vtRangeVar);
qexpr.andCondition(expr.eq(joinKeysExpr));
return new ExistsExpression(qs, qexpr, true);
}
else
{
String mtIdentifier = idFactory.newIdentifier(te.getAlias(), fieldName).getIdentifier();
DatastoreIdentifier mtRangeVar = idFactory.newIdentifier(IdentifierFactory.TABLE, mtIdentifier);
DatastoreIdentifier vtRangeVar;
if (expr.te == null) // literals
{
int n = 0;
do
{
String vtIdentifier = mtIdentifier + '.' + (++n);
vtRangeVar = idFactory.newIdentifier(IdentifierFactory.TABLE, vtIdentifier);
} while (qs.getTableExpression(vtRangeVar) != null);
}
else
{
vtRangeVar = expr.te.getAlias();
}
ClassLoaderResolver clr = qs.getClassLoaderResolver();
ScalarExpression joinKeysExpr =
getBackingStoreQueryable().joinKeysTo(expr.getQueryExpression(),
qs,
mapping,
te,
mtRangeVar,
clr.classForName(mapStore.getKeyType()),
expr,
vtRangeVar);
return joinKeysExpr.eq(expr);
}
}