@Override void toSQL(StringBuilder buf, SqlFragments fragments, SqlParams params, int[] loopIndex) { int oldLen = buf.length(); super.toSQL(buf, fragments, params, loopIndex); int newLen = buf.length(); String select = buf.substring(oldLen, newLen); if (select.startsWith("SELECT ")) { buf.setLength(oldLen); buf.append(applyPaging(select, fragments, params)); } }
/** * Applies the paging. * * @param selectToPage the contents of the enclosed block, not null * @param fragments the SQL fragments for context, not null * @param params the SQL arguments, not null */ String applyPaging(String selectToPage, SqlFragments fragments, SqlParams params) { int offset = extractVariableOrLiteral(params, _offsetVariable); int fetchLimit = extractVariableOrLiteral(params, _fetchVariable); return fragments.getConfig().addPaging(selectToPage, offset, fetchLimit == Integer.MAX_VALUE ? 0 : fetchLimit); }
@Override public String toString() { return getClass().getSimpleName() + " " + getFragments(); }
throw new IllegalArgumentException("@PAGING found with invalid format: " + line); PagingSqlFragment whereFragment = new PagingSqlFragment(pagingMatcher.group(1), pagingMatcher.group(2)); parseContainerSection(whereFragment, lineIterator, line.indent()); if (whereFragment.getFragments().size() == 0) { throw new IllegalArgumentException("@PAGING found with no subsequent indented lines: " + line);