/** * Return all the vertical mappings to select separately. Depends on * subclass fetch mode and the type of query. */ private ClassMapping[] getVerticalMappings(ClassMapping mapping, boolean subclasses, QueryExpressions exps, int subclassMode) { if (!subclasses || exps.projections.length > 0) return new ClassMapping[] { mapping }; if (subclassMode != JDBCFetchConfiguration.EAGER_PARALLEL || !hasVerticalSubclasses(mapping)) return new ClassMapping[] { mapping }; List subs = new ArrayList(4); addSubclasses(mapping, subs); return (ClassMapping[]) subs.toArray(new ClassMapping[subs.size()]); }
protected Number executeDelete(Executor ex, ClassMetaData base, ClassMetaData[] metas, boolean subclasses, ExpressionFactory[] facts, QueryExpressions[] exps, Object[] params) { return executeBulkOperation(metas, subclasses, facts, exps, params, null); }
/** * Return the single table for the given fields, or INVALID if they * use multiple tables. */ private Table getTable(FieldMapping[] fields, Table table) { for (int i = 0; i < fields.length; i++) { table = getTable(fields[i], table); if (table == INVALID) break; } return table; }
int eager = calculateEagerMode(exps[0], range.start, range.end); int subclassMode = fetch.getSubclassFetchMode((ClassMapping) base); DBDictionary dict = _store.getDBDictionary(); BitSet subclassBits = new BitSet(); BitSet nextBits = new BitSet(); boolean unionable = createWhereSelects(sels, mappings, selMappings, subclasses, subclassBits, nextBits, facts, exps, states, ctx, subclassMode) Union union = _store.getSQLFactory().newUnion( (Select[]) sels.toArray(new Select[sels.size()])); BitSet[] paged = populateUnion(union, mappings, subclasses, facts, exps, states, ctx, lrs, eager, start, end); union.setLRS(lrs); rop = executeUnion(union, mappings, exps, states, ctx, paged); } else { if (sels.size() > 1) for (int i = 0, idx = 0; i < sels.size(); i++) { sel = (Select) sels.get(i); paged = populateSelect(sel, (ClassMapping) selMappings.get(i), subclassBits.get(i), (JDBCExpressionFactory) facts[idx], exps[idx], states[idx], ctx, lrs, eager, start, end); rop = executeSelect(sel, (ClassMapping) selMappings.get(i), exps[idx], states[idx], ctx, paged, start, end); if (rops != null)
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); ClassMapping[] mappings = (ClassMapping[]) metas; JDBCFetchConfiguration fetch = (JDBCFetchConfiguration) ctx. int eager = calculateEagerMode(exps[0], range.start, range.end); eager = Math.min(eager, JDBCFetchConfiguration.EAGER_JOIN); int subclassMode = fetch.getSubclassFetchMode((ClassMapping) base); BitSet subclassBits = new BitSet(); BitSet nextBits = new BitSet(); boolean unionable = createWhereSelects(sels, mappings, selMappings, subclasses, subclassBits, nextBits, facts, exps, states, ctx, subclassMode) && subclassMode == JDBCFetchConfiguration.EAGER_JOIN; Union union = _store.getSQLFactory().newUnion( (Select[]) sels.toArray(new Select[sels.size()])); populateUnion(union, mappings, subclasses, facts, exps, states, ctx, false, eager, start, end); if (union.isUnion()) for (int i = 0, idx = 0; i < sels.size(); i++) { sel = (Select) sels.get(i); populateSelect(sel, (ClassMapping) selMappings.get(i), subclassBits.get(i), (JDBCExpressionFactory) facts[idx], exps[idx], states[idx], ctx, false, eager, start, end);
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); if (!isSingleTableMapping(mappings[i], subclasses) && !isUpdate) return null; stmnt = null; try { stmnt = prepareStatement(conn, sql[i]); dict.setTimeouts(stmnt, fetch, true); count += executeUpdate(conn, stmnt, sql[i], isUpdate); } catch (SQLException se) { throw SQLExceptions.getStore(se, sql[i].getSQL(),
while (root.getJoinablePCSuperclassMapping() != null) root = root.getJoinablePCSuperclassMapping(); if (hasVerticalSubclasses(root)) return false; Table table = getTable(mapping.getFieldMappings(), null); if (table == INVALID) return false; table = getTable(subs[i].getDefinedFieldMappings(), table); if (table == INVALID) return false;
if (!isSingleTableMapping(mappings[i], subclasses) && !isUpdate) return null; stmnt = null; try { stmnt = prepareStatement(conn, sql[i]); count += executeUpdate(conn, stmnt, sql[i], isUpdate); } catch (SQLException se) { throw SQLExceptions.getStore(se, sql[i].getSQL(),
for (int i = 0; i < mappings.length; i++) { verts = getVerticalMappings(mappings[i], subclasses, exps[i], subclassMode); if (verts.length == 1 && subclasses) sel.setExpectedResultCount(1, false); List selectFrom = getJoinedTableMeta(sel); int size = 0; if (selectFrom != null) {
public StoreQuery newQuery(String language) { ExpressionParser ep = QueryLanguages.parserForLanguage(language); if (ep != null) return new JDBCStoreQuery(this, ep); if (QueryLanguages.LANG_SQL.equals(language)) return new SQLStoreQuery(this); return null; }
for (int i = 0; i < mappings.length; i++) { verts = getVerticalMappings(mappings[i], subclasses, exps[i], subclassMode); if (verts.length == 1 && subclasses)
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); if (metas.length > 1 && exps[0].isAggregate()) throw new UserException(Localizer.forPackage(JDBCStoreQuery.class). int eager = calculateEagerMode(exps[0], range.start, range.end); int subclassMode = fetch.getSubclassFetchMode((ClassMapping) base); DBDictionary dict = _store.getDBDictionary(); BitSet subclassBits = new BitSet(); BitSet nextBits = new BitSet(); boolean unionable = createWhereSelects(sels, mappings, selMappings, subclasses, subclassBits, nextBits, facts, exps, states, ctx, subclassMode) Union union = _store.getSQLFactory().newUnion( (Select[]) sels.toArray(new Select[sels.size()])); BitSet[] paged = populateUnion(union, mappings, subclasses, facts, exps, states, ctx, lrs, eager, start, end); union.setLRS(lrs); rop = executeUnion(union, mappings, exps, states, ctx, paged); } else { if (sels.size() > 1) for (int i = 0, idx = 0; i < sels.size(); i++) { sel = (Select) sels.get(i); paged = populateSelect(sel, (ClassMapping) selMappings.get(i), subclassBits.get(i), (JDBCExpressionFactory) facts[idx],
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); ClassMapping[] mappings = (ClassMapping[]) metas; JDBCFetchConfiguration fetch = (JDBCFetchConfiguration) ctx. int eager = calculateEagerMode(exps[0], range.start, range.end); eager = Math.min(eager, JDBCFetchConfiguration.EAGER_JOIN); int subclassMode = fetch.getSubclassFetchMode((ClassMapping) base); BitSet subclassBits = new BitSet(); BitSet nextBits = new BitSet(); boolean unionable = createWhereSelects(sels, mappings, selMappings, subclasses, subclassBits, nextBits, facts, exps, states, ctx, subclassMode) && subclassMode == JDBCFetchConfiguration.EAGER_JOIN; Union union = _store.getSQLFactory().newUnion( (Select[]) sels.toArray(new Select[sels.size()])); populateUnion(union, mappings, subclasses, facts, exps, states, ctx, false, eager, start, end); if (union.isUnion()) for (int i = 0, idx = 0; i < sels.size(); i++) { sel = (Select) sels.get(i); populateSelect(sel, (ClassMapping) selMappings.get(i), subclassBits.get(i), (JDBCExpressionFactory) facts[idx], exps[idx], states[idx], ctx, false, eager, start, end);
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); if (!isSingleTableMapping(mappings[i], subclasses) && !isUpdate) return null; stmnt = null; try { stmnt = prepareStatement(conn, sql[i]); dict.setTimeouts(stmnt, fetch, true); count += executeUpdate(conn, stmnt, sql[i], isUpdate); } catch (SQLException se) { throw SQLExceptions.getStore(se, sql[i].getSQL(),
while (root.getJoinablePCSuperclassMapping() != null) root = root.getJoinablePCSuperclassMapping(); if (hasVerticalSubclasses(root)) return false; Table table = getTable(mapping.getFieldMappings(), null); if (table == INVALID) return false; table = getTable(subs[i].getDefinedFieldMappings(), table); if (table == INVALID) return false;
for (int i = 0; i < mappings.length; i++) { verts = getVerticalMappings(mappings[i], subclasses, exps[i], subclassMode); if (verts.length == 1 && subclasses) sel.setExpectedResultCount(1, false); List selectFrom = getJoinedTableMeta(sel); int size = 0; if (selectFrom != null) {
private StoreQuery newStoreQuery(String language) { ExpressionParser ep = QueryLanguages.parserForLanguage(language); if (ep != null) { return new JDBCStoreQuery(this, ep); } if (QueryLanguages.LANG_SQL.equals(language)) { return new SQLStoreQuery(this); } if (QueryLanguages.LANG_PREPARED_SQL.equals(language)) { return new PreparedSQLStoreQuery(this); } return null; }
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); if (metas.length > 1 && exps[0].isAggregate()) throw new UserException(Localizer.forPackage(JDBCStoreQuery.class). int eager = calculateEagerMode(exps[0], range.start, range.end); int subclassMode = fetch.getSubclassFetchMode((ClassMapping) base); DBDictionary dict = _store.getDBDictionary(); BitSet subclassBits = new BitSet(); BitSet nextBits = new BitSet(); boolean unionable = createWhereSelects(sels, mappings, selMappings, subclasses, subclassBits, nextBits, facts, exps, states, ctx, subclassMode) Union union = _store.getSQLFactory().newUnion( (Select[]) sels.toArray(new Select[sels.size()])); BitSet[] paged = populateUnion(union, mappings, subclasses, facts, exps, states, ctx, lrs, eager, start, end); union.setLRS(lrs); rop = executeUnion(union, mappings, exps, states, ctx, paged); } else { if (sels.size() > 1) for (int i = 0, idx = 0; i < sels.size(); i++) { sel = (Select) sels.get(i); paged = populateSelect(sel, (ClassMapping) selMappings.get(i), subclassBits.get(i), (JDBCExpressionFactory) facts[idx],
fetch.addFetchInnerJoins(Arrays.asList(exps[0].fetchInnerPaths)); int eager = calculateEagerMode(exps[0], range.start, range.end); eager = Math.min(eager, JDBCFetchConfiguration.EAGER_JOIN); int subclassMode = fetch.getSubclassFetchMode((ClassMapping) base); BitSet subclassBits = new BitSet(); BitSet nextBits = new BitSet(); boolean unionable = createWhereSelects(sels, mappings, selMappings, subclasses, subclassBits, nextBits, facts, exps, states, ctx, subclassMode) && subclassMode == JDBCFetchConfiguration.EAGER_JOIN; Union union = _store.getSQLFactory().newUnion( (Select[]) sels.toArray(new Select[sels.size()])); populateUnion(union, mappings, subclasses, facts, exps, states, ctx, false, eager, start, end); if (union.isUnion()) for (int i = 0, idx = 0; i < sels.size(); i++) { sel = (Select) sels.get(i); populateSelect(sel, (ClassMapping) selMappings.get(i), subclassBits.get(i), (JDBCExpressionFactory) facts[idx], exps[idx], states[idx], ctx, false, eager, start, end);
for (int i = 0; i < exps.length; i++) ctxs[i] = exps[i].ctx(); localContext.set(clone(ctxs, null)); if (!isSingleTableMapping(mappings[i], subclasses) && !isUpdate) return null; stmnt = null; try { stmnt = prepareStatement(conn, sql[i]); dict.setTimeouts(stmnt, fetch, true); count += executeUpdate(conn, stmnt, sql[i], isUpdate); } catch (SQLException se) { throw SQLExceptions.getStore(se, sql[i].getSQL(),