Skip to content

Commit

Permalink
0001706: Expanded out MSQLSever builders, ddlDataTypes, and platforms…
Browse files Browse the repository at this point in the history
… for versions 2000, 2005, 2008, and 2012.
  • Loading branch information
jhicks committed May 1, 2014
1 parent 2d24f7c commit 7c07c1c
Show file tree
Hide file tree
Showing 20 changed files with 206 additions and 95 deletions.
Expand Up @@ -33,8 +33,9 @@
import org.jumpmind.db.platform.informix.InformixDatabasePlatform;
import org.jumpmind.db.platform.interbase.InterbaseDatabasePlatform;
import org.jumpmind.db.platform.mariadb.MariaDBDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSqlDatabasePlatform;
import org.jumpmind.db.platform.mssql2000.MsSql2000DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2000DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2005DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2008DatabasePlatform;
import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform;
import org.jumpmind.db.platform.oracle.OracleDatabasePlatform;
import org.jumpmind.db.platform.postgresql.PostgreSqlDatabasePlatform;
Expand Down Expand Up @@ -93,7 +94,9 @@ public ISymmetricDialect create() {
dialect = new OracleSymmetricDialect(parameterService, platform);
} else if (platform instanceof MsSql2000DatabasePlatform) {
dialect = new MsSql2000SymmetricDialect(parameterService, platform);
} else if (platform instanceof MsSqlDatabasePlatform) {
} else if (platform instanceof MsSql2005DatabasePlatform) {
dialect = new MsSqlSymmetricDialect(parameterService, platform);
} else if (platform instanceof MsSql2008DatabasePlatform) {
dialect = new MsSqlSymmetricDialect(parameterService, platform);
} else if (platform instanceof GreenplumPlatform) {
dialect = new GreenplumSymmetricDialect(parameterService, platform);
Expand Down
Expand Up @@ -57,7 +57,9 @@ public void setSymmetricEngine(ISymmetricEngine engine) {
}

public boolean isPlatformSupported(IDatabasePlatform platform) {
return DatabaseNamesConstants.MSSQL.equals(platform.getName());
return (DatabaseNamesConstants.MSSQL2000.equals(platform.getName())
|| DatabaseNamesConstants.MSSQL2005.equals(platform.getName())
|| DatabaseNamesConstants.MSSQL2008.equals(platform.getName()));
}

}
Expand Up @@ -5,7 +5,9 @@
import org.jumpmind.db.DbTestUtils;
import org.jumpmind.db.model.Table;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSqlDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2000DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2005DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2008DatabasePlatform;
import org.jumpmind.db.util.BasicDataSourcePropertyConstants;
import org.jumpmind.symmetric.io.data.CsvData;
import org.jumpmind.symmetric.io.stage.IStagingManager;
Expand Down Expand Up @@ -34,7 +36,10 @@ public void setupTest() {
}

protected boolean shouldTestRun(IDatabasePlatform platform) {
return platform != null && platform instanceof MsSqlDatabasePlatform;
return platform != null && (
platform instanceof MsSql2000DatabasePlatform ||
platform instanceof MsSql2005DatabasePlatform ||
platform instanceof MsSql2008DatabasePlatform);
}

protected long writeData(List<CsvData> data) {
Expand Down
Expand Up @@ -1380,7 +1380,11 @@ public CsvData next() {

data.setNoBinaryOldData(requiresLobSelectedFromSource
|| symmetricDialect.getName().equals(
DatabaseNamesConstants.MSSQL));
DatabaseNamesConstants.MSSQL2000)
|| symmetricDialect.getName().equals(
DatabaseNamesConstants.MSSQL2005)
|| symmetricDialect.getName().equals(
DatabaseNamesConstants.MSSQL2008));

outgoingBatch.incrementDataEventCount();
} else {
Expand Down
Expand Up @@ -555,7 +555,11 @@ public void testColumnMatchSubtableRoutingToNode1() {
trigger2.getRouter().setRouterType("column");
trigger2.getRouter().setRouterExpression("EXTERNAL_DATA=:NODE_ID");
String name = getPlatform().getName();
if (name.equals(DatabaseNamesConstants.DERBY) || name.equals(DatabaseNamesConstants.MSSQL) || name.equals(DatabaseNamesConstants.SQLANYWHERE)) {
if (name.equals(DatabaseNamesConstants.DERBY)
|| name.equals(DatabaseNamesConstants.MSSQL2000)
|| name.equals(DatabaseNamesConstants.MSSQL2005)
|| name.equals(DatabaseNamesConstants.MSSQL2008)
|| name.equals(DatabaseNamesConstants.SQLANYWHERE)) {
// TODO could not get subselect to work in trigger text for derby or
// mssql. probably need to work on derby's support of
// external_select a bit more
Expand Down
Expand Up @@ -34,7 +34,9 @@ private DatabaseNamesConstants() {
public final static String FIREBIRD = "firebird";
public final static String SQLITE = "sqlite";
public final static String INTERBASE = "interbase";
public final static String MSSQL = "mssql";
public final static String MSSQL2000 = "mssql2000";
public final static String MSSQL2005 = "mssql2005";
public final static String MSSQL2008 = "mssql2008";
public final static String ORACLE = "oracle";
public final static String MYSQL = "mysql";
public final static String DB2 = "db2";
Expand Down
Expand Up @@ -30,7 +30,9 @@
import org.jumpmind.db.platform.hsqldb2.HsqlDb2DdlBuilder;
import org.jumpmind.db.platform.informix.InformixDdlBuilder;
import org.jumpmind.db.platform.interbase.InterbaseDdlBuilder;
import org.jumpmind.db.platform.mssql.MsSqlDdlBuilder;
import org.jumpmind.db.platform.mssql.MsSql2000DdlBuilder;
import org.jumpmind.db.platform.mssql.MsSql2005DdlBuilder;
import org.jumpmind.db.platform.mssql.MsSql2008DdlBuilder;
import org.jumpmind.db.platform.mysql.MySqlDdlBuilder;
import org.jumpmind.db.platform.oracle.OracleDdlBuilder;
import org.jumpmind.db.platform.postgresql.PostgreSqlDdlBuilder;
Expand Down Expand Up @@ -68,8 +70,12 @@ public static final IDdlBuilder createDdlBuilder(String databaseName) {
return new InformixDdlBuilder();
} else if (DatabaseNamesConstants.INTERBASE.equalsIgnoreCase(databaseName)) {
return new InterbaseDdlBuilder();
} else if (DatabaseNamesConstants.MSSQL.equalsIgnoreCase(databaseName)) {
return new MsSqlDdlBuilder();
} else if (DatabaseNamesConstants.MSSQL2000.equalsIgnoreCase(databaseName)) {
return new MsSql2000DdlBuilder();
} else if (DatabaseNamesConstants.MSSQL2005.equalsIgnoreCase(databaseName)) {
return new MsSql2005DdlBuilder();
} else if (DatabaseNamesConstants.MSSQL2008.equalsIgnoreCase(databaseName)) {
return new MsSql2008DdlBuilder();
} else if (DatabaseNamesConstants.MYSQL.equalsIgnoreCase(databaseName)) {
return new MySqlDdlBuilder();
} else if (DatabaseNamesConstants.ORACLE.equalsIgnoreCase(databaseName)) {
Expand Down
Expand Up @@ -57,22 +57,30 @@
/*
* The SQL Builder for the Microsoft SQL Server.
*/
public class MsSqlDdlBuilder extends AbstractDdlBuilder {
public class MsSql2000DdlBuilder extends AbstractDdlBuilder {

/* We use a generic date format. */
private DateFormat _genericDateFormat = new SimpleDateFormat("yyyy-MM-dd");

/* We use a generic date format. */
private DateFormat _genericTimeFormat = new SimpleDateFormat("HH:mm:ss");

public MsSqlDdlBuilder() {

super(DatabaseNamesConstants.MSSQL);

public MsSql2000DdlBuilder(String databaseName) {
super(databaseName);
setup();
}

public MsSql2000DdlBuilder() {
super(DatabaseNamesConstants.MSSQL2000);
setup();
}

protected void setup() {
databaseInfo.setMaxIdentifierLength(128);
databaseInfo.addNativeTypeMapping(Types.ARRAY, "IMAGE", Types.LONGVARBINARY);
// BIGINT will be mapped back to BIGINT by the model reader
databaseInfo.addNativeTypeMapping(Types.BIGINT, "DECIMAL(19,0)");
//databaseInfo.addNativeTypeMapping(Types.BIGINT, "DECIMAL(19,0)");
databaseInfo.addNativeTypeMapping(Types.BIGINT, "BIGINT", Types.BIGINT);
databaseInfo.addNativeTypeMapping(Types.BLOB, "IMAGE", Types.LONGVARBINARY);
databaseInfo.addNativeTypeMapping(Types.CLOB, "TEXT", Types.LONGVARCHAR);
databaseInfo.addNativeTypeMapping(Types.DATE, "DATETIME", Types.TIMESTAMP);
Expand Down
@@ -0,0 +1,14 @@
package org.jumpmind.db.platform.mssql;

import org.jumpmind.db.platform.DatabaseNamesConstants;

public class MsSql2005DdlBuilder extends MsSql2000DdlBuilder {

public MsSql2005DdlBuilder() {
super(DatabaseNamesConstants.MSSQL2005);
}

public MsSql2005DdlBuilder(String databaseName) {
super(databaseName);
}
}
Expand Up @@ -22,10 +22,20 @@

import java.sql.Types;

public class MsSql10DdlBuilder extends MsSqlDdlBuilder {
import org.jumpmind.db.platform.DatabaseNamesConstants;

public class MsSql2008DdlBuilder extends MsSql2005DdlBuilder {

public MsSql2008DdlBuilder(String databaseName) {
super(databaseName);
}

public MsSql10DdlBuilder() {
public MsSql2008DdlBuilder() {
super(DatabaseNamesConstants.MSSQL2008);

databaseInfo.addNativeTypeMapping(Types.DATE, "DATE", Types.DATE);
databaseInfo.addNativeTypeMapping(Types.DATE, "TIME", Types.TIME);
// TODO add MSSQL 2008 types for time, datetimeoffset, and datetime2
}

}
Expand Up @@ -35,7 +35,9 @@
import org.jumpmind.db.platform.AbstractDatabasePlatform;
import org.jumpmind.db.platform.ase.AseDatabasePlatform;
import org.jumpmind.db.platform.informix.InformixDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSqlDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2000DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2005DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2008DatabasePlatform;
import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform;
import org.jumpmind.db.platform.oracle.OracleDatabasePlatform;
import org.jumpmind.db.platform.postgresql.PostgreSqlDatabasePlatform;
Expand Down Expand Up @@ -620,7 +622,9 @@ private String[] massageExpectectedResultsForDialect(String[] values) {

if (values[5] != null
&& (!(platform instanceof OracleDatabasePlatform
|| platform instanceof MsSqlDatabasePlatform
|| platform instanceof MsSql2000DatabasePlatform
|| platform instanceof MsSql2005DatabasePlatform
|| platform instanceof MsSql2008DatabasePlatform
|| platform instanceof AseDatabasePlatform
|| platform instanceof SqlAnywhereDatabasePlatform))) {
values[5] = values[5].replaceFirst(" \\d\\d:\\d\\d:\\d\\d\\.?0?", " 00:00:00.0");
Expand Down
Expand Up @@ -43,8 +43,9 @@
import org.jumpmind.db.platform.informix.InformixDatabasePlatform;
import org.jumpmind.db.platform.interbase.InterbaseDatabasePlatform;
import org.jumpmind.db.platform.mariadb.MariaDBDatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSqlDatabasePlatform;
import org.jumpmind.db.platform.mssql2000.MsSql2000DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2000DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2005DatabasePlatform;
import org.jumpmind.db.platform.mssql.MsSql2008DatabasePlatform;
import org.jumpmind.db.platform.mysql.MySqlDatabasePlatform;
import org.jumpmind.db.platform.oracle.OracleDatabasePlatform;
import org.jumpmind.db.platform.postgresql.PostgreSqlDatabasePlatform;
Expand Down Expand Up @@ -86,10 +87,11 @@ public class JdbcDatabasePlatformFactory {
addPlatform(platforms, "HSQL Database Engine2", HsqlDb2DatabasePlatform.class);
addPlatform(platforms, "Interbase", InterbaseDatabasePlatform.class);
addPlatform(platforms, "MariaDB", MariaDBDatabasePlatform.class);
addPlatform(platforms, "MsSQL", MsSqlDatabasePlatform.class);
addPlatform(platforms, "microsoft sql server8", MsSql2000DatabasePlatform.class);
addPlatform(platforms, "microsoft sql server11", MsSqlDatabasePlatform.class);
addPlatform(platforms, "microsoft sql server", MsSqlDatabasePlatform.class);
addPlatform(platforms, "microsoft sql server9", MsSql2005DatabasePlatform.class);
addPlatform(platforms, "microsoft sql server10", MsSql2008DatabasePlatform.class);
addPlatform(platforms, "microsoft sql server11", MsSql2008DatabasePlatform.class);
addPlatform(platforms, "microsoft sql server", MsSql2008DatabasePlatform.class);
addPlatform(platforms, "MySQL", MySqlDatabasePlatform.class);
addPlatform(platforms, "Oracle", OracleDatabasePlatform.class);
addPlatform(platforms, "PostgreSql", PostgreSqlDatabasePlatform.class);
Expand All @@ -107,8 +109,9 @@ public class JdbcDatabasePlatformFactory {
jdbcSubProtocolToPlatform.put(HsqlDbDatabasePlatform.JDBC_SUBPROTOCOL, HsqlDbDatabasePlatform.class);
jdbcSubProtocolToPlatform.put(InterbaseDatabasePlatform.JDBC_SUBPROTOCOL,
InterbaseDatabasePlatform.class);
jdbcSubProtocolToPlatform.put(MsSqlDatabasePlatform.JDBC_SUBPROTOCOL, MsSqlDatabasePlatform.class);
jdbcSubProtocolToPlatform.put(MsSql2000DatabasePlatform.JDBC_SUBPROTOCOL, MsSql2000DatabasePlatform.class);
jdbcSubProtocolToPlatform.put(MsSql2005DatabasePlatform.JDBC_SUBPROTOCOL, MsSql2005DatabasePlatform.class);
jdbcSubProtocolToPlatform.put(MsSql2008DatabasePlatform.JDBC_SUBPROTOCOL, MsSql2008DatabasePlatform.class);
jdbcSubProtocolToPlatform.put(MySqlDatabasePlatform.JDBC_SUBPROTOCOL, MySqlDatabasePlatform.class);
jdbcSubProtocolToPlatform.put(OracleDatabasePlatform.JDBC_SUBPROTOCOL_THIN,
OracleDatabasePlatform.class);
Expand Down
@@ -1,15 +1,15 @@
package org.jumpmind.db.platform.mssql;

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
/**
* Licensed to JumpMind Inc under one or more contributor
* license agreements. See the NOTICE file distributed
* with this work for additional information regarding
* copyright ownership. JumpMind Inc licenses this file
* to you under the GNU General Public License, version 3.0 (GPLv3)
* (the "License"); you may not use this file except in compliance
* with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
* You should have received a copy of the GNU General Public License,
* version 3.0 (GPLv3) along with this library; if not, see
* <http://www.gnu.org/licenses/>.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
Expand All @@ -18,6 +18,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.jumpmind.db.platform.mssql;

import javax.sql.DataSource;

Expand All @@ -28,9 +29,9 @@
import org.jumpmind.db.sql.SqlTemplateSettings;

/*
* The platform implementation for the Microsoft SQL Server database.
* The platform implementation for the Microsoft SQL Server 2000 database.
*/
public class MsSqlDatabasePlatform extends AbstractJdbcDatabasePlatform {
public class MsSql2000DatabasePlatform extends AbstractJdbcDatabasePlatform {

/* The standard SQLServer jdbc driver. */
public static final String JDBC_DRIVER = "net.sourceforge.jtds.jdbc.Driver";
Expand All @@ -41,20 +42,20 @@ public class MsSqlDatabasePlatform extends AbstractJdbcDatabasePlatform {
/*
* Creates a new platform instance.
*/
public MsSqlDatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
public MsSql2000DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
// override the ddl builder based on the version
if (this.sqlTemplate.getDatabaseMajorVersion() >= 10) {
this.ddlBuilder = new MsSql10DdlBuilder();
this.ddlBuilder = new MsSql2008DdlBuilder();
} else {
this.ddlBuilder = new MsSqlDdlBuilder();
this.ddlBuilder = new MsSql2000DdlBuilder();
}

}

@Override
protected MsSqlDdlBuilder createDdlBuilder() {
return new MsSqlDdlBuilder();
protected MsSql2000DdlBuilder createDdlBuilder() {
return new MsSql2000DdlBuilder();
}

@Override
Expand All @@ -68,7 +69,7 @@ protected MsSqlJdbcSqlTemplate createSqlTemplate() {
}

public String getName() {
return DatabaseNamesConstants.MSSQL;
return DatabaseNamesConstants.MSSQL2000;
}

public String getDefaultCatalog() {
Expand All @@ -80,11 +81,7 @@ public String getDefaultCatalog() {
}

public String getDefaultSchema() {
if (StringUtils.isBlank(defaultSchema)) {
defaultSchema = (String) getSqlTemplate().queryForObject("select SCHEMA_NAME()",
String.class);
}
return defaultSchema;
return "dbo";
}

@Override
Expand All @@ -100,3 +97,5 @@ public boolean canColumnBeUsedInWhereClause(Column column) {
}

}


@@ -0,0 +1,34 @@
package org.jumpmind.db.platform.mssql;

import javax.sql.DataSource;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.platform.DatabaseNamesConstants;
import org.jumpmind.db.sql.SqlTemplateSettings;

/*
* The platform implementation for the Microsoft SQL Server 2005 database.
*/
public class MsSql2005DatabasePlatform extends MsSql2000DatabasePlatform {

/*
* Creates a new platform instance.
*/
public MsSql2005DatabasePlatform(DataSource dataSource, SqlTemplateSettings settings) {
super(dataSource, settings);
}

@Override
public String getName() {
return DatabaseNamesConstants.MSSQL2005;
}

@Override
public String getDefaultSchema() {
if (StringUtils.isBlank(defaultSchema)) {
defaultSchema = (String) getSqlTemplate().queryForObject("select SCHEMA_NAME()",
String.class);
}
return defaultSchema;
}
}

0 comments on commit 7c07c1c

Please sign in to comment.