@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(); }
@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); } }
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.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); } } } }
@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 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()); } }
/** * 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()); } }
private Query createQuery(String queryString, @Nullable QueryModifiers modifiers) { Query query = sessionHolder.createQuery(queryString); JPAUtil.setConstants(query, getConstants(), getMetadata().getParams()); if (modifiers != null && modifiers.isRestricting()) { if (modifiers.getLimit() != null) { query.setMaxResults(modifiers.getLimit().intValue()); } if (modifiers.getOffset() != null) { query.setFirstResult(modifiers.getOffset().intValue()); } } // set transformer, if necessary // List<? extends Expr<?>> projection = getMetadata().getProjection(); // if (projection.size() == 1){ // Expr<?> expr = projection.get(0); // if (expr instanceof EConstructor<?> && !(expr.getClass().equals(EConstructor.class))){ // if (query instanceof HibernateQuery){ // ((HibernateQuery)query).getHibernateQuery().setResultTransformer( // new ConstructorTransformer((EConstructor<?>) projection.get(0))); // } // } // } return query; }
int index = 0; QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); Long offset = modifiers.getOffset(); if (offset != null) { index = offset.intValue();
@Override public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer context) { if (!forCountRow && metadata.getModifiers().isRestricting() && !metadata.getJoins().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); if (mod.getOffset() == null) { context.append(limitQueryStart); context.serializeForQuery(metadata, forCountRow); context.handle(limitQueryEnd, mod.getLimit()); } else { context.append(outerQueryStart); context.serializeForQuery(metadata, forCountRow); context.append(outerQueryEnd); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else { context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit()); } } } else { context.serializeForQuery(metadata, forCountRow); } if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); } }
@Override public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer context) { if (!forCountRow && metadata.getModifiers().isRestricting() && metadata.getOrderBy().isEmpty() && !metadata.getJoins().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); // use top if order by is empty if (mod.getOffset() == null) { // select top ... metadata = metadata.clone(); metadata.addFlag(new QueryFlag(QueryFlag.Position.AFTER_SELECT, Expressions.template(Integer.class, topTemplate, mod.getLimit()))); context.serializeForQuery(metadata, forCountRow); } else { throw new IllegalStateException("offset not supported without order by"); } } else { context.serializeForQuery(metadata, forCountRow); } if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); } }
@Override public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer context) { if (!forCountRow && metadata.getModifiers().isRestricting() && !metadata.getJoins().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); if (mod.getOffset() == null) { // select top ... metadata = metadata.clone(); metadata.addFlag(new QueryFlag(QueryFlag.Position.AFTER_SELECT, Expressions.template(Integer.class, topTemplate, mod.getLimit()))); context.serializeForQuery(metadata, forCountRow); } else { throw new IllegalStateException("offset not supported"); } } else { context.serializeForQuery(metadata, forCountRow); } if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); } }
if (!forCountRow && metadata.getModifiers().isRestricting() && !metadata.getJoins().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); if (mod.getOffset() == null) { context.serializeForQuery(metadata, forCountRow); context.handle(limitTemplate, mod.getLimit()); context.append(outerQueryEnd); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else { context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset());
if (!forCountRow && metadata.getModifiers().isRestricting() && !metadata.getJoins().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); if (mod.getOffset() == null) { context.append(outerQueryEnd); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else { context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset());
@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); }