support db2 and write sqllimiter for db2

This commit is contained in:
AndersHA
2013-11-20 11:07:23 +01:00
parent 9d8fe97de0
commit f62bc9a35f
3 changed files with 38 additions and 23 deletions
@@ -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);
@@ -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);
}
}
@@ -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();
}
}