public int supportsSelect(Select sel, int type, OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch) { if (field.isLRS()) return 0; if (type == Select.EAGER_PARALLEL) return Math.max(1, getIndependentElementMappings(true).length); if (type != Select.EAGER_INNER && type != Select.EAGER_OUTER) return 0; if (getIndependentElementMappings(true).length > 1) return 0; return (type == Select.EAGER_INNER || store.getDBDictionary(). canOuterJoin(sel.getJoinSyntax(), getJoinForeignKey (getDefaultElementMapping(false)))) ? 1 : 0; }
public Object loadProjection(JDBCStore store, JDBCFetchConfiguration fetch, Result res, Joins joins) throws SQLException { return loadElement(null, store, fetch, res, joins); }
public ForeignKey getJoinForeignKey() { return getJoinForeignKey(getDefaultElementMapping(false)); }
ClassMapping elem = getDefaultElementMapping(true); Joins dataJoins = res.newJoins().setVariable("*"); dataJoins = join(dataJoins, elem); dataJoins = joinElementRelation(dataJoins, elem); Joins orderJoins = null; if (field.getOrderColumn() != null) { orderJoins = res.newJoins().setVariable("*"); orderJoins = join(orderJoins, elem); while (res.next()) { nextOid = getNextObjectId(ownerMapping, store, res, oid); if (nextOid != oid) { setMappedBy(oid.equals(sm.getObjectId()) ? sm.getPersistenceCapable() : oid, res); Object val = loadElement(null, store, fetch, res, dataJoins); add(store, coll, val);
throws SQLException { if (field.isLRS()) { Proxy coll = newLRSProxy(); append(")"); sel.select(sql.toString(), field); ClassMapping rel = getDefaultElementMapping(false); sel.whereForeignKey(getJoinForeignKey(rel), sm.getObjectId(), field.getDefiningMapping(), store); final ClassMapping[] elems = getIndependentElementMappings(true); final Joins[] resJoins = new Joins[Math.max(1, elems.length)]; Union union = store.getSQLFactory().newUnion if (ct != null && field.getOrderColumn() != null) seq = res.getInt(field.getOrderColumn()); add(store, coll, loadElement(sm, store, fetch, res, resJoins[res.indexOf()]));
join(refJoins, false); for (int i = 0; true; i++) { ref = getNextRef(ownerMapping, store, res, ref, refJoins); if (ref == null) { dataJoins = join(dataJoins, false); dataJoins = joinRelation(dataJoins, false, false); seq = res.getInt(field.getOrderColumn(), refJoins) + 1; res.setBaseMapping(null); add(store, coll, loadElement(sm, store, fetch, res, dataJoins)); if (!res.next() || res.indexOf() != typeIdx) { res.pushBack();
sel.orderByPrimaryKey(field.getDefiningMapping(), true, true); Joins joins = sel.newJoins().setVariable("*"); joins = join(joins, elem); joins = sel.outer(joins); if (!selectOid) { Column[] refs = getJoinForeignKey(elem).getColumns(); sel.orderBy(refs, true, joins, true); joins = joinElementRelation(joins, elem); if (outer) joins = sel.outer(joins); field.orderRelation(sel, elem, joins); selectElement(sel, elem, store, fetch, eagerMode, joins);
/** * Select data for loading, starting in field table. */ protected Joins selectAll(Select sel, ClassMapping elem, OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, int eagerMode) { ForeignKey fk = getJoinForeignKey(elem); Object oid = getObjectIdForJoin(fk, sm); sel.whereForeignKey(fk, oid, field.getDefiningMapping(), store); // order first, then select so that if the projection introduces // additional ordering, it will be after our required ordering field.orderLocal(sel, elem, null); Joins joins = joinElementRelation(sel.newJoins(), elem); field.orderRelation(sel, elem, joins); selectElement(sel, elem, store, fetch, eagerMode, joins); return joins; }
public void selectEagerParallel(SelectExecutor sel, final OpenJPAStateManager sm, final JDBCStore store, final JDBCFetchConfiguration fetch, final int eagerMode) { if (!(sel instanceof Union)) selectEager((Select) sel, getDefaultElementMapping(true), sm, store, fetch, eagerMode, true, false); else { final ClassMapping[] elems = getIndependentElementMappings(true); Union union = (Union) sel; if (fetch.getSubclassFetchMode(field.getElementMapping(). getTypeMapping()) != fetch.EAGER_JOIN) union.abortUnion(); union.select(new Union.Selector() { public void select(Select sel, int idx) { selectEager(sel, elems[idx], sm, store, fetch, eagerMode, true, false); } }); } }
public void selectEagerJoin(Select sel, OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, int eagerMode) { // we limit further eager fetches to joins, because after this point // the select has been modified such that parallel clones may produce // invalid sql boolean outer = field.getNullValue() != FieldMapping.NULL_EXCEPTION; // force inner join for inner join fetch if (fetch.hasFetchInnerJoin(field.getFullName(false))) outer = false; selectEager(sel, getDefaultElementMapping(true), sm, store, fetch, JDBCFetchConfiguration.EAGER_JOIN, false, outer); }
/** * Select data for loading, starting in field table. */ protected Joins selectAll(Select sel, ClassMapping elem, OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, int eagerMode) { sel.whereForeignKey(getJoinForeignKey(elem), sm.getObjectId(), field.getDefiningMapping(), store); // order first, then select so that if the projection introduces // additional ordering, it will be after our required ordering field.orderLocal(sel, elem, null); Joins joins = joinElementRelation(sel.newJoins(), elem); field.orderRelation(sel, elem, joins); selectElement(sel, elem, store, fetch, eagerMode, joins); return joins; }
/** * Returns the first independent element mapping, or null. */ private ClassMapping getDefaultElementMapping(boolean traverse) { ClassMapping[] elems = getIndependentElementMappings(traverse); return (elems.length == 0) ? null : elems[0]; }
ClassMapping elem = getDefaultElementMapping(true); Joins dataJoins = res.newJoins().setVariable("*"); dataJoins = join(dataJoins, elem); dataJoins = joinElementRelation(dataJoins, elem); Joins orderJoins = null; if (field.getOrderColumn() != null) { orderJoins = res.newJoins().setVariable("*"); orderJoins = join(orderJoins, elem); while (res.next()) { nextOid = getNextObjectId(ownerMapping, store, res, oid); if (nextOid != oid) { setMappedBy(oid.equals(sm.getObjectId()) ? sm.getPersistenceCapable() : oid, res); Object val = loadElement(null, store, fetch, res, dataJoins); add(store, coll, val);
Proxy pcoll = newLRSProxy(); append(")"); sel.select(sql.toString(), field); ClassMapping rel = getDefaultElementMapping(false); sel.whereForeignKey(getJoinForeignKey(rel), sm.getObjectId(), field.getDefiningMapping(), store); final ClassMapping[] elems = getIndependentElementMappings(true); final Joins[] resJoins = new Joins[Math.max(1, elems.length)]; Union union = store.getSQLFactory().newUnion 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()]));
join(refJoins, false); for (int i = 0; true; i++) { ref = getNextRef(ownerMapping, store, res, ref, refJoins); if (ref == null) { dataJoins = join(dataJoins, false); dataJoins = joinRelation(dataJoins, false, false); seq = res.getInt(field.getOrderColumn(), refJoins) + 1; res.setBaseMapping(null); Object obj = loadElement(sm, store, fetch, res, dataJoins); if (obj != null) add(store, coll, obj); if (!res.next() || res.indexOf() != typeIdx) { res.pushBack();
sel.orderByPrimaryKey(field.getDefiningMapping(), true, true); Joins joins = sel.newJoins().setVariable("*"); joins = join(joins, elem); joins = sel.outer(joins); if (!selectOid) { Column[] refs = getJoinForeignKey(elem).getColumns(); sel.orderBy(refs, true, joins, true); joins = joinElementRelation(joins, elem); if (outer) joins = sel.outer(joins); field.orderRelation(sel, elem, joins); selectElement(sel, elem, store, fetch, eagerMode, joins);
/** * Select data for loading, starting in field table. */ protected Joins selectAll(Select sel, ClassMapping elem, OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, int eagerMode) { ForeignKey fk = getJoinForeignKey(elem); Object oid = getObjectIdForJoin(fk, sm); sel.whereForeignKey(fk, oid, field.getDefiningMapping(), store); // order first, then select so that if the projection introduces // additional ordering, it will be after our required ordering field.orderLocal(sel, elem, null); Joins joins = joinElementRelation(sel.newJoins(), elem); field.orderRelation(sel, elem, joins); selectElement(sel, elem, store, fetch, eagerMode, joins); return joins; }
public void selectEagerParallel(SelectExecutor sel, final OpenJPAStateManager sm, final JDBCStore store, final JDBCFetchConfiguration fetch, final int eagerMode) { if (!(sel instanceof Union)) selectEager((Select) sel, getDefaultElementMapping(true), sm, store, fetch, eagerMode, true, false); else { final ClassMapping[] elems = getIndependentElementMappings(true); Union union = (Union) sel; if (fetch.getSubclassFetchMode(field.getElementMapping(). getTypeMapping()) != fetch.EAGER_JOIN) union.abortUnion(); union.select(new Union.Selector() { public void select(Select sel, int idx) { selectEager(sel, elems[idx], sm, store, fetch, eagerMode, true, false); } }); } }
protected ForeignKey getJoinForeignKey() { return getJoinForeignKey(getDefaultElementMapping(false)); } }
public void selectEagerJoin(Select sel, OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, int eagerMode) { // we limit further eager fetches to joins, because after this point // the select has been modified such that parallel clones may produce // invalid sql boolean outer = field.getNullValue() != FieldMapping.NULL_EXCEPTION; // force inner join for inner join fetch if (fetch.hasFetchInnerJoin(field.getFullName(false))) outer = false; selectEager(sel, getDefaultElementMapping(true), sm, store, fetch, JDBCFetchConfiguration.EAGER_JOIN, false, outer); }