@Override public boolean equals(Object o) { if (o == this) { return true; } else if (o instanceof QueryModifiers) { QueryModifiers qm = (QueryModifiers)o; return Objects.equal(qm.getLimit(), limit) && Objects.equal(qm.getOffset(), offset); } else { return false; } }
/** * Create a new SearchResults instance * * @param results paged results * @param mod limit and offset * @param total total result rows count */ public SearchResults(List<T> results, QueryModifiers mod, long total) { this(results, mod.getLimit(), mod.getOffset(), total); }
public QueryModifiers(QueryModifiers modifiers) { this.limit = modifiers.getLimit(); this.offset = modifiers.getOffset(); }
public static <T> Iterator<T> create(Iterator<T> iterator, QueryModifiers modifiers) { if (modifiers.isRestricting()) { if (modifiers.getOffset() != null) { int counter = 0; while (iterator.hasNext() && counter < modifiers.getOffset()) { counter++; iterator.next(); } } if (modifiers.getLimit() != null) { iterator = new LimitingIterator<T>(iterator, modifiers.getLimit()); } } return iterator; }
@Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { if (!metadata.getOrderBy().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else if (mod.getOffset() == null) { context.handle(limitOffsetTemplate, mod.getLimit(), 0); } else { context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset()); } } }
@Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else if (mod.getOffset() == null) { context.handle(limitTemplate, mod.getLimit()); } else { context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset()); } }
@Override public <RT> RT uniqueResult(Expression<RT> expr) { if (getMetadata().getModifiers().getLimit() == null && !expr.toString().contains("count(")) { limit(2); } CloseableIterator<RT> iterator = iterate(expr); return uniqueResult(iterator); }
@Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); if (mod.getLimit() != null) { if (mod.getOffset() != null) { context.handle(offsetLimitTemplate, mod.getOffset(), mod.getLimit()); } else { context.handle(limitTemplate, mod.getLimit()); } } else if (mod.getOffset() != null) { context.handle(offsetLimitTemplate, mod.getOffset(), Integer.MAX_VALUE); } }
@Override public <RT> RT uniqueResult(Expression<RT> expr) { if (getMetadata().getModifiers().getLimit() == null && !expr.toString().contains("count(")) { limit(2); } CloseableIterator<RT> iterator = iterate(expr); return uniqueResult(iterator); }
@Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); if (mod.isRestricting()) { if (mod.getLimit() != null) { if (mod.getOffset() != null) { context.handle(limitOffsetTemplate, mod.getOffset() + 1, mod.getOffset() + mod.getLimit()); } else { context.handle(limitTemplate, mod.getLimit()); } } else { context.handle(offsetTemplate, mod.getOffset() + 1); } } } }
/** * template method for LIMIT and OFFSET serialization * * @param metadata * @param context */ protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); if (mod.getLimit() != null) { context.handle(limitTemplate, mod.getLimit()); } else if (limitRequired) { context.handle(limitTemplate, Integer.MAX_VALUE); } if (mod.getOffset() != null) { context.handle(offsetTemplate, mod.getOffset()); } }
@Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); context.append(limitOffsetStart); if (!metadata.getOrderBy().isEmpty()) { context.handleOrderBy(metadata.getOrderBy()); } else { context.append("1"); } context.append(")"); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else if (mod.getOffset() == null) { context.handle(limitTemplate, mod.getLimit()); } else { context.handle(limitOffsetTemplate, mod.getOffset() + 1, mod.getOffset() + mod.getLimit()); } }
@Override public Tuple uniqueResult(Expression<?>... args) { queryMixin.setUnique(true); if (queryMixin.getMetadata().getModifiers().getLimit() == null) { limit(2l); } return uniqueResult(iterate(args)); }
@Override public <RT> RT uniqueResult(Expression<RT> expr) { queryMixin.setUnique(true); if (queryMixin.getMetadata().getModifiers().getLimit() == null) { limit(2l); } return uniqueResult(iterate(expr)); }
@Override public <RT> RT uniqueResult(Expression<RT> expr) { queryMixin.setUnique(true); if (queryMixin.getMetadata().getModifiers().getLimit() == null) { limit(2l); } return uniqueResult(iterate(expr)); }
private void serializeModifiersForDML(QueryMetadata metadata, SQLSerializer context) { if (metadata.getWhere() != null) { context.append(" and "); } else { context.append(getWhere()); } context.append("rownum <= "); context.visitConstant(metadata.getModifiers().getLimit()); }
@Override public void serializeDelete(QueryMetadata metadata, RelationalPath<?> entity, SQLSerializer context) { // limit QueryModifiers mod = metadata.getModifiers(); if (mod.isRestricting()) { metadata = metadata.clone(); metadata.addFlag(new QueryFlag(QueryFlag.Position.AFTER_SELECT, Expressions.template(Integer.class, topTemplate, mod.getLimit()))); } context.serializeForDelete(metadata, entity); if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); } }
@Override public void serializeUpdate(QueryMetadata metadata, RelationalPath<?> entity, List<Pair<Path<?>, Expression<?>>> updates, SQLSerializer context) { // limit QueryModifiers mod = metadata.getModifiers(); if (mod.isRestricting()) { metadata = metadata.clone(); metadata.addFlag(new QueryFlag(QueryFlag.Position.AFTER_SELECT, Expressions.template(Integer.class, topTemplate, mod.getLimit()))); } context.serializeForUpdate(metadata, entity, updates); if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); } }
@Override public <RT> SearchResults<RT> listResults(Expression<RT> p) { Expression<RT> projection = normalize(p); queryMixin.addProjection(projection); long total = count(); QueryMetadata md = queryMixin.getMetadata(); md.clearProjection(); List<RT> results = list(projection); return new SearchResults<RT>(results, md.getModifiers().getLimit(), md.getModifiers().getOffset(), total); }