001package com.avaje.ebean.config.dbplatform;
002
003/**
004 * Use top xx and start at xx to limit sql results. Based on
005 * MsSqlServer2005SqlLimiter and LimitOffsetSqlLimiter
006 */
007public class SqlAnywhereLimiter implements SqlLimiter {
008
009  public SqlLimitResponse limit(SqlLimitRequest request) {
010
011    String dbSql = request.getDbSql();
012    
013    StringBuilder sb = new StringBuilder(60 + dbSql.length());
014
015    int firstRow = request.getFirstRow();
016    int maxRows = request.getMaxRows();
017
018    /*
019     * SELECT TOP xx START AT xx ... FROM ...
020     */
021    sb.append("select ");
022    if (request.isDistinct()) {
023      sb.append("distinct ");
024    }
025    if (maxRows > 0) {
026      sb.append("top ").append(maxRows).append(" ");
027    }
028    if (firstRow > 0) {
029      sb.append("start at ").append(firstRow + 1).append(" ");
030    }
031    sb.append(dbSql);
032
033    String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery());
034
035    return new SqlLimitResponse(sql, false);
036  }
037
038}