diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/DB2Platform.java b/src/main/java/com/avaje/ebean/config/dbplatform/DB2Platform.java index a5abf32bd..0ba134708 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/DB2Platform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/DB2Platform.java @@ -17,6 +17,7 @@ public class DB2Platform extends DatabasePlatform { // only support getGeneratedKeys with non-batch JDBC // so generally use SEQUENCE instead for H2 + this.sqlLimiter = new Db2SqlLimiter(); this.dbIdentity.setSupportsGetGeneratedKeys(true); this.dbIdentity.setIdType(IdType.IDENTITY); this.dbIdentity.setSupportsSequence(true); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/Db2SqlLimiter.java b/src/main/java/com/avaje/ebean/config/dbplatform/Db2SqlLimiter.java new file mode 100644 index 000000000..f4bf480a0 --- /dev/null +++ b/src/main/java/com/avaje/ebean/config/dbplatform/Db2SqlLimiter.java @@ -0,0 +1,20 @@ +package com.avaje.ebean.config.dbplatform; + +public class Db2SqlLimiter implements SqlLimiter { + + @Override + public SqlLimitResponse limit(SqlLimitRequest request) { + + StringBuilder sb = new StringBuilder(512); + sb.append("select "); + sb.append(request.getDbSql()); + + int maxRows = request.getMaxRows(); + if (maxRows > 0) { + sb.append(" ").append(NEW_LINE).append("FETCH FIRST ").append(maxRows).append(" ROWS ONLY"); + } + + String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); + return new SqlLimitResponse(sql, false); + } +} diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DatabasePlatformFactory.java b/src/main/java/com/avaje/ebeaninternal/server/core/DatabasePlatformFactory.java index 9cd940f89..98f5d39c4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DatabasePlatformFactory.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DatabasePlatformFactory.java @@ -8,17 +8,7 @@ import javax.persistence.PersistenceException; import javax.sql.DataSource; import com.avaje.ebean.config.ServerConfig; -import com.avaje.ebean.config.dbplatform.DatabasePlatform; -import com.avaje.ebean.config.dbplatform.H2Platform; -import com.avaje.ebean.config.dbplatform.HsqldbPlatform; -import com.avaje.ebean.config.dbplatform.MsSqlServer2000Platform; -import com.avaje.ebean.config.dbplatform.MsSqlServer2005Platform; -import com.avaje.ebean.config.dbplatform.MySqlPlatform; -import com.avaje.ebean.config.dbplatform.Oracle10Platform; -import com.avaje.ebean.config.dbplatform.Oracle9Platform; -import com.avaje.ebean.config.dbplatform.PostgresPlatform; -import com.avaje.ebean.config.dbplatform.SQLitePlatform; -import com.avaje.ebean.config.dbplatform.SqlAnywherePlatform; +import com.avaje.ebean.config.dbplatform.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,7 +74,9 @@ public class DatabasePlatformFactory { if (dbName.equals("sqlanywhere")) { return new SqlAnywherePlatform(); } - + if (dbName.equals("db2")) { + return new DB2Platform(); + } if (dbName.equals("mysql")) { return new MySqlPlatform(); } @@ -132,41 +124,43 @@ public class DatabasePlatformFactory { int majorVersion = metaData.getDatabaseMajorVersion(); - if (dbProductName.indexOf("oracle") > -1) { + if (dbProductName.contains("oracle")) { if (majorVersion > 9) { return new Oracle10Platform(); } else { return new Oracle9Platform(); } } - if (dbProductName.indexOf("microsoft") > -1) { + else if (dbProductName.contains("microsoft")) { if (majorVersion > 8) { return new MsSqlServer2005Platform(); } else { return new MsSqlServer2000Platform(); } } - - if (dbProductName.indexOf("mysql") > -1) { + else if (dbProductName.contains("mysql")) { return new MySqlPlatform(); } - if (dbProductName.indexOf("h2") > -1) { + else if (dbProductName.contains("h2")) { return new H2Platform(); } - if (dbProductName.indexOf("hsql database engine") > -1) { + else if (dbProductName.contains("hsql database engine")) { return new HsqldbPlatform(); } - if (dbProductName.indexOf("postgres") > -1) { + else if (dbProductName.contains("postgres")) { return new PostgresPlatform(); } - if (dbProductName.indexOf("sqlite") > -1) { + else if (dbProductName.contains("sqlite")) { return new SQLitePlatform(); } - if (dbProductName.indexOf("sql anywhere") > -1) { + else if (dbProductName.contains("db2")) { + return new DB2Platform(); + } + else if (dbProductName.contains("sql anywhere")) { return new SqlAnywherePlatform(); } - - // use the standard one + + // use the standard one return new DatabasePlatform(); } }