/** * Execute the given select. */ private ResultObjectProvider executeSelect(Select sel, ClassMapping mapping, QueryExpressions exps, QueryExpressionsState state, ExpContext ctx, BitSet paged, long start, long end) { if (exps.projections.length > 0) return new ProjectionResultObjectProvider(sel, exps, state, ctx); if (paged != null) return new PagingResultObjectProvider(sel, mapping, _store, ctx.fetch, paged, end - start); return new InstanceResultObjectProvider(sel, mapping, _store, ctx.fetch); }
JDBCStoreManager storeMgr = (JDBCStoreManager) getStore(); ClassMapping mapping; Result res; int idx; for (int i = 0; i < _page.length; i++) { res = getResult(); idx = res.indexOf(); if (_idxs != null) _page[i] = storeMgr.load(mapping, getFetchConfiguration(), _paged[idx], res); if (i != _page.length - 1 && !getResult().next()) { setSize(_pos + i + 1); break; if (_page[0] != null) { if (_page.length > 1 && _page[1] == null) loadEagerFields(); else executeEagerSelects();
/** * When there is only one instance in a page, load fields as normal. */ private void loadEagerFields() throws SQLException { int idx = (_idxs == null) ? 0 : _idxs[0]; if (_paged[idx] == null) return; JDBCStore store = getStore(); OpenJPAStateManager sm = store.getContext().getStateManager(_page[0]); for (int i = 0, len = _paged[idx].length(); i < len; i++) { if (_paged[idx].get(i)) { _mappings[idx].getFieldMapping(i).load(sm, store, getFetchConfiguration()); } } }
executeEagerSelects(mapping.getJoinablePCSuperclassMapping(), paged, start, end); JDBCStore store = getStore(); Select sel = store.getSQLFactory().newSelect(); DBDictionary dict = store.getDBDictionary(); Column[] pks = mapping.getPrimaryKeyColumns(); if (pks.length == 1) createInContains(sel, dict, buf, mapping, pks, start, end); else orContains(sel, buf, mapping, pks, start, end); sel.where(buf); JDBCFetchConfiguration fetch = getFetchConfiguration();
/** * Create an IN clause limiting the results to the current page. */ private void inContains(Select sel, SQLBuffer buf, ClassMapping mapping, Column[] pks, int start, int end) { buf.append(sel.getColumnAlias(pks[0])).append(" IN ("); for (int i = start; i < end && _page[i] != null; i++) { if (i > start) buf.append(", "); buf.appendValue(mapping.toDataStoreValue(_page[i], pks, getStore()), pks[0]); } buf.append(")"); }
/** * Select the given mapping for use in an extent, returning paged fields. */ private BitSet selectExtent(Select sel, ClassMapping mapping, JDBCFetchConfiguration fetch, boolean subclasses) { int subs = (subclasses) ? Select.SUBS_JOINABLE : Select.SUBS_NONE; // decide between paging and standard iteration BitSet paged = PagingResultObjectProvider.getPagedFields(sel, mapping, this, fetch, JDBCFetchConfiguration.EAGER_PARALLEL, Long.MAX_VALUE); if (paged == null) sel.selectIdentifier(mapping, subs, this, fetch, JDBCFetchConfiguration.EAGER_PARALLEL); else sel.selectIdentifier(mapping, subs, this, fetch, JDBCFetchConfiguration.EAGER_JOIN); return paged; }
/** * Based on the DBDictionary, create the needed IN clauses. */ private void createInContains(Select sel, DBDictionary dict, SQLBuffer buf, ClassMapping mapping, Column[] pks, int start, int end) { int inClauseLimit = dict.inClauseLimit; if (inClauseLimit <= 0 || end - start <= inClauseLimit) inContains(sel, buf, mapping, pks, start, end); else { buf.append("("); for (int low = start, high; low < end; low = high) { if (low > start) buf.append(" OR "); high = Math.min(low + inClauseLimit, end); inContains(sel, buf, mapping, pks, low, high); } buf.append(")"); } }
public ResultList<?> newResultList(ResultObjectProvider rop) { // if built around a list, just use a simple wrapper if (rop instanceof ListResultObjectProvider) return new SimpleResultList(rop); // if built around a paging list, use a window provider with the // same window size if (rop instanceof PagingResultObjectProvider) return new WindowResultList(rop, ((PagingResultObjectProvider) rop).getPageSize()); // if fetch size < 0 just read in all results immediately if (getFetchBatchSize() < 0) return new EagerResultList(rop); // if foward only or forward direction use a forward window if (_state.type == ResultSet.TYPE_FORWARD_ONLY || _state.direction == ResultSet.FETCH_FORWARD || !rop.supportsRandomAccess()) { if (getFetchBatchSize() > 0 && getFetchBatchSize() <= 50) return new WindowResultList(rop, getFetchBatchSize()); return new WindowResultList(rop, 50); } // if skipping around use a caching random access list if (_state.direction == ResultSet.FETCH_UNKNOWN) return new SoftRandomAccessResultList(rop); // scrolling reverse... just use non-caching simple result list return new SimpleResultList(rop); }
/** * Load eager batch selects for current page of results. */ private void executeEagerSelects() throws SQLException { if (_idxs == null) { executeEagerSelects(_mappings[0], _paged[0], 0, _page.length); return; } int start = 0; int idx = _idxs[0]; int pos = 0; for (; pos < _page.length && _page[pos] != null; pos++) { if (idx != _idxs[pos]) { if (_paged[idx] != null) executeEagerSelects(_mappings[idx], _paged[idx], start, pos); start = pos; idx = _idxs[pos]; } } if (start < pos && _paged[idx] != null) // cleanup remainder executeEagerSelects(_mappings[idx], _paged[idx], start, pos); }
int batch = getFetchConfiguration().getFetchBatchSize(); int pageSize; if (batch < 0)
executeEagerSelects(mapping.getJoinablePCSuperclassMapping(), paged, start, end); JDBCStore store = getStore(); Select sel = store.getSQLFactory().newSelect(); DBDictionary dict = store.getDBDictionary(); Column[] pks = mapping.getPrimaryKeyColumns(); if (pks.length == 1) createInContains(sel, dict, buf, mapping, pks, start, end); else orContains(sel, buf, mapping, pks, start, end); sel.where(buf); JDBCFetchConfiguration fetch = getFetchConfiguration();
/** * When there is only one instance in a page, load fields as normal. */ private void loadEagerFields() throws SQLException { int idx = (_idxs == null) ? 0 : _idxs[0]; if (_paged[idx] == null) return; JDBCStore store = getStore(); OpenJPAStateManager sm = store.getContext().getStateManager(_page[0]); for (int i = 0, len = _paged[idx].length(); i < len; i++) { if (_paged[idx].get(i)) { _mappings[idx].getFieldMapping(i).load(sm, store, getFetchConfiguration()); } } }
/** * Create an IN clause limiting the results to the current page. */ private void inContains(Select sel, SQLBuffer buf, ClassMapping mapping, Column[] pks, int start, int end) { buf.append(sel.getColumnAlias(pks[0])).append(" IN ("); for (int i = start; i < end && _page[i] != null; i++) { if (i > start) buf.append(", "); buf.appendValue(mapping.toDataStoreValue(_page[i], pks, getStore()), pks[0]); } buf.append(")"); }
/** * Select the given mapping for use in an extent, returning paged fields. */ private BitSet selectExtent(Select sel, ClassMapping mapping, JDBCFetchConfiguration fetch, boolean subclasses) { int subs = (subclasses) ? Select.SUBS_JOINABLE : Select.SUBS_NONE; // decide between paging and standard iteration BitSet paged = PagingResultObjectProvider.getPagedFields(sel, mapping, this, fetch, JDBCFetchConfiguration.EAGER_PARALLEL, Long.MAX_VALUE); if (paged == null) sel.selectIdentifier(mapping, subs, this, fetch, JDBCFetchConfiguration.EAGER_PARALLEL); else sel.selectIdentifier(mapping, subs, this, fetch, JDBCFetchConfiguration.EAGER_JOIN); return paged; }
/** * Based on the DBDictionary, create the needed IN clauses. */ private void createInContains(Select sel, DBDictionary dict, SQLBuffer buf, ClassMapping mapping, Column[] pks, int start, int end) { int inClauseLimit = dict.inClauseLimit; if (inClauseLimit <= 0 || end - start <= inClauseLimit) inContains(sel, buf, mapping, pks, start, end); else { buf.append("("); for (int low = start, high; low < end; low = high) { if (low > start) buf.append(" OR "); high = Math.min(low + inClauseLimit, end); inContains(sel, buf, mapping, pks, low, high); } buf.append(")"); } }
public ResultList<?> newResultList(ResultObjectProvider rop) { // if built around a list, just use a simple wrapper if (rop instanceof ListResultObjectProvider) return new SimpleResultList(rop); // if built around a paging list, use a window provider with the // same window size if (rop instanceof PagingResultObjectProvider) return new WindowResultList(rop, ((PagingResultObjectProvider) rop).getPageSize()); // if fetch size < 0 just read in all results immediately if (getFetchBatchSize() < 0) return new EagerResultList(rop); // if foward only or forward direction use a forward window if (_state.type == ResultSet.TYPE_FORWARD_ONLY || _state.direction == ResultSet.FETCH_FORWARD || !rop.supportsRandomAccess()) { if (getFetchBatchSize() > 0 && getFetchBatchSize() <= 50) return new WindowResultList(rop, getFetchBatchSize()); return new WindowResultList(rop, 50); } // if skipping around use a caching random access list if (_state.direction == ResultSet.FETCH_UNKNOWN) return new SoftRandomAccessResultList(rop); // scrolling reverse... just use non-caching simple result list return new SimpleResultList(rop); }
/** * Load eager batch selects for current page of results. */ private void executeEagerSelects() throws SQLException { if (_idxs == null) { executeEagerSelects(_mappings[0], _paged[0], 0, _page.length); return; } int start = 0; int idx = _idxs[0]; int pos = 0; for (; pos < _page.length && _page[pos] != null; pos++) { if (idx != _idxs[pos]) { if (_paged[idx] != null) executeEagerSelects(_mappings[idx], _paged[idx], start, pos); start = pos; idx = _idxs[pos]; } } if (start < pos && _paged[idx] != null) // cleanup remainder executeEagerSelects(_mappings[idx], _paged[idx], start, pos); }
int batch = getFetchConfiguration().getFetchBatchSize(); int pageSize; if (batch < 0)
JDBCStoreManager storeMgr = (JDBCStoreManager) getStore(); ClassMapping mapping; Result res; int idx; for (int i = 0; i < _page.length; i++) { res = getResult(); idx = res.indexOf(); if (_idxs != null) _page[i] = storeMgr.load(mapping, getFetchConfiguration(), _paged[idx], res); if (i != _page.length - 1 && !getResult().next()) { setSize(_pos + i + 1); break; if (_page[0] != null) { if (_page.length > 1 && _page[1] == null) loadEagerFields(); else executeEagerSelects();