sel.select(sql.toString(), field);
ClassMapping rel = getDefaultElementMapping(false);
sel.whereForeignKey(getJoinForeignKey(rel),
sm.getObjectId(), field.getDefiningMapping(), store);
Result res = sel.execute(store, fetch);
try {
res.next();
pcoll.getChangeTracker().setNextSequence
(res.getInt(field) + 1);
} finally {
res.close();
}
}
sm.storeObjectField(fieldIndex, pcoll);
return;
}
// select data for this sm
final ClassMapping[] elems = getIndependentElementMappings(true);
final Joins[] resJoins = new Joins[Math.max(1, elems.length)];
Union union = store.getSQLFactory().newUnion
(Math.max(1, elems.length));
union.select(new Union.Selector() {
public void select(Select sel, int idx) {
ClassMapping elem = (elems.length == 0) ? null : elems[idx];
resJoins[idx] = selectAll(sel, elem, sm, store, fetch,
JDBCFetchConfiguration.EAGER_PARALLEL);
}
});
// create proxy
ChangeTracker ct = null;
if (delayed) {
if (sm.isDetached() || sm.getOwner() == null) {
sm.getPersistenceCapable().pcProvideField(fieldIndex);
coll =
((FieldManager)sm.getPersistenceCapable().pcGetStateManager()).fetchObjectField(fieldIndex);
} else {
coll = sm.fetchObjectField(fieldIndex);
}
if (coll instanceof Proxy)
ct = ((Proxy) coll).getChangeTracker();
} else {
if (field.getTypeCode() == JavaTypes.ARRAY)
coll = new ArrayList();
else {
if (coll == null) {
coll = sm.newProxy(fieldIndex);
}
if (coll instanceof Proxy)
ct = ((Proxy) coll).getChangeTracker();
}
}
// load values
Result res = union.execute(store, fetch);
try {
int seq = -1;
while (res.next()) {
if (ct != null && field.getOrderColumn() != null)
seq = res.getInt(field.getOrderColumn());
setMappedBy(sm.getObjectId(), sm, coll, res);
add(store, coll, loadElement(sm, store, fetch, res,
resJoins[res.indexOf()]));
}
if (ct != null && field.getOrderColumn() != null)
ct.setNextSequence(seq + 1);
} finally {
res.close();
}
// if not a delayed collection, set into sm
if (!delayed) {
if (field.getTypeCode() == JavaTypes.ARRAY)