001package com.avaje.ebean.config.dbplatform; 002 003/** 004 * Adds LIMIT OFFSET clauses to a SQL query. 005 */ 006public class LimitOffsetSqlLimiter implements SqlLimiter { 007 008 /** 009 * LIMIT keyword. 010 */ 011 private static final String LIMIT = "limit"; 012 013 /** 014 * OFFSET keyword. 015 */ 016 private static final String OFFSET = "offset"; 017 018 public SqlLimitResponse limit(SqlLimitRequest request) { 019 020 String dbSql = request.getDbSql(); 021 022 StringBuilder sb = new StringBuilder(50 + dbSql.length()); 023 sb.append("select "); 024 if (request.isDistinct()) { 025 sb.append("distinct "); 026 } 027 028 sb.append(dbSql); 029 030 int firstRow = request.getFirstRow(); 031 int maxRows = request.getMaxRows(); 032 033 if (maxRows > 0 || firstRow > 0) { 034 sb.append(" ").append(LIMIT).append(" ").append(maxRows); 035 if (firstRow > 0) { 036 sb.append(" ").append(OFFSET).append(" "); 037 sb.append(firstRow); 038 } 039 } 040 041 String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); 042 043 return new SqlLimitResponse(sql, false); 044 } 045 046}