Skip to content

Commit

Permalink
0001606: Create dialect for DB2 z/OS
Browse files Browse the repository at this point in the history
  • Loading branch information
erilong committed Mar 5, 2014
1 parent cb2ddb0 commit 7f3ce15
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 3 deletions.
Expand Up @@ -23,6 +23,7 @@
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.platform.ase.AseDatabasePlatform;
import org.jumpmind.db.platform.db2.Db2DatabasePlatform;
import org.jumpmind.db.platform.db2.Db2zOsDatabasePlatform;
import org.jumpmind.db.platform.derby.DerbyDatabasePlatform;
import org.jumpmind.db.platform.firebird.FirebirdDatabasePlatform;
import org.jumpmind.db.platform.greenplum.GreenplumPlatform;
Expand All @@ -42,6 +43,7 @@
import org.jumpmind.symmetric.db.ase.AseSymmetricDialect;
import org.jumpmind.symmetric.db.db2.Db2SymmetricDialect;
import org.jumpmind.symmetric.db.db2.Db2v9SymmetricDialect;
import org.jumpmind.symmetric.db.db2.Db2zOsSymmetricDialect;
import org.jumpmind.symmetric.db.derby.DerbySymmetricDialect;
import org.jumpmind.symmetric.db.firebird.FirebirdSymmetricDialect;
import org.jumpmind.symmetric.db.h2.H2SymmetricDialect;
Expand Down Expand Up @@ -115,6 +117,8 @@ public ISymmetricDialect create() {
} else {
dialect = new Db2v9SymmetricDialect(parameterService, platform);
}
} else if (platform instanceof Db2zOsDatabasePlatform) {
dialect = new Db2zOsSymmetricDialect(parameterService, platform);
} else if (platform instanceof FirebirdDatabasePlatform) {
dialect = new FirebirdSymmetricDialect(parameterService, platform);
} else if (platform instanceof AseDatabasePlatform) {
Expand Down
Expand Up @@ -61,7 +61,7 @@ protected boolean doesTriggerExistOnPlatform(String catalog, String schema, Stri
schema = schema == null ? (platform.getDefaultSchema() == null ? null : platform
.getDefaultSchema()) : schema;
return platform.getSqlTemplate().queryForInt(
"select count(*) from syscat.triggers where trigname = ? and trigschema = ?",
"SELECT COUNT(*) FROM SYSIBM.SYSTRIGGERS WHERE NAME = ? AND SCHEMA = ?",
new Object[] { triggerName.toUpperCase(), schema.toUpperCase() }) > 0;
}

Expand Down
@@ -0,0 +1,18 @@
package org.jumpmind.symmetric.db.db2;

import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.symmetric.db.ISymmetricDialect;
import org.jumpmind.symmetric.service.IParameterService;

public class Db2zOsSymmetricDialect extends Db2SymmetricDialect implements ISymmetricDialect {

public Db2zOsSymmetricDialect(IParameterService parameterService, IDatabasePlatform platform) {
super(parameterService, platform);
}

// TODO: add check to trigger template if CURRENT SQLID = '${db.user}'
//public String getSyncTriggersExpression() {
// return "CURRENT SQLID = ";
//}

}
Expand Up @@ -38,6 +38,7 @@ private DatabaseNamesConstants() {
public final static String ORACLE = "oracle";
public final static String MYSQL = "mysql";
public final static String DB2 = "db2";
public final static String DB2ZOS = "db2zos";
public final static String POSTGRESQL = "postgres";
public final static String ASE = "ase";
public final static String SQLANYWHERE = "sqlanywhere";
Expand Down
Expand Up @@ -33,6 +33,7 @@
import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.platform.ase.AseDatabasePlatform;
import org.jumpmind.db.platform.db2.Db2DatabasePlatform;
import org.jumpmind.db.platform.db2.Db2zOsDatabasePlatform;
import org.jumpmind.db.platform.derby.DerbyDatabasePlatform;
import org.jumpmind.db.platform.firebird.FirebirdDatabasePlatform;
import org.jumpmind.db.platform.greenplum.GreenplumPlatform;
Expand Down Expand Up @@ -92,6 +93,7 @@ public class JdbcDatabasePlatformFactory {
addPlatform(platforms, "Adaptive Server Anywhere", SqlAnywhereDatabasePlatform.class);
addPlatform(platforms, "SQL Anywhere", SqlAnywhereDatabasePlatform.class);
addPlatform(platforms, "DB2", Db2DatabasePlatform.class);
addPlatform(platforms, DatabaseNamesConstants.DB2ZOS, Db2zOsDatabasePlatform.class);
addPlatform(platforms, "SQLite", SqliteDatabasePlatform.class);

jdbcSubProtocolToPlatform.put(Db2DatabasePlatform.JDBC_SUBPROTOCOL, Db2DatabasePlatform.class);
Expand Down Expand Up @@ -209,6 +211,12 @@ protected static String[] determineDatabaseNameVersionSubprotocol(DataSource dat
}
}

if (nameVersion[0].equalsIgnoreCase(DatabaseNamesConstants.DB2)) {
if (nameVersion[0].toUpperCase().indexOf("Z") != -1) {
nameVersion[0] = DatabaseNamesConstants.DB2ZOS;
}
}

return nameVersion;
} catch (SQLException ex) {
throw new SqlException("Error while reading the database metadata: "
Expand Down
Expand Up @@ -76,9 +76,9 @@ protected Table readTable(Connection connection, DatabaseMetaDataWrapper metaDat
if (table != null) {
// DB2 does not return the auto-increment status via the database
// metadata
String sql = "SELECT COLNAME FROM SYSCAT.COLUMNS WHERE TABNAME=? AND IDENTITY=?";
String sql = "SELECT NAME FROM SYSIBM.SYSCOLUMNS WHERE TBNAME=? AND IDENTITY=?";
if (StringUtils.isNotBlank(metaData.getSchemaPattern())) {
sql = sql + " AND TABSCHEMA=?";
sql = sql + " AND TBCREATOR=?";
}

PreparedStatement pstmt = null;
Expand Down
@@ -0,0 +1,13 @@
package org.jumpmind.db.platform.db2;

import javax.sql.DataSource;

import org.jumpmind.db.sql.SqlTemplateSettings;

public class Db2zOsDatabasePlatform extends Db2DatabasePlatform {

public Db2zOsDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
}

}

0 comments on commit 7f3ce15

Please sign in to comment.