liquibase.datatype.core.TimeType Maven / Gradle / Ivy
package liquibase.datatype.core;
import liquibase.database.core.*;
import liquibase.datatype.DataTypeInfo;
import liquibase.datatype.DatabaseDataType;
import liquibase.datatype.LiquibaseDataType;
import liquibase.exception.DatabaseException;
import liquibase.statement.DatabaseFunction;
import liquibase.database.Database;
@DataTypeInfo(name="time", aliases = {"java.sql.Types.TIME", "java.sql.Time"}, minParameters = 0, maxParameters = 0, priority = LiquibaseDataType.PRIORITY_DEFAULT)
public class TimeType extends LiquibaseDataType {
@Override
public DatabaseDataType toDatabaseDataType(Database database) {
if (database instanceof InformixDatabase) {
return new DatabaseDataType("INTERVAL HOUR TO FRACTION", 5);
}
if (database instanceof MSSQLDatabase) {
try {
if (database.getDatabaseMajorVersion() <= 9) {
return new DatabaseDataType("DATETIME");
}
} catch (DatabaseException e) {
//assume greater than sql 2008 and TIME will work
}
}
if (database instanceof OracleDatabase) {
return new DatabaseDataType("DATE");
}
return new DatabaseDataType(getName());
}
@Override
public String objectToSql(Object value, Database database) {
if (value == null || value.toString().equalsIgnoreCase("null")) {
return null;
} else if (value instanceof DatabaseFunction) {
return database.generateDatabaseFunctionValue((DatabaseFunction) value);
} else if (value instanceof java.sql.Time) {
return database.getTimeLiteral(((java.sql.Time) value));
} else {
return "'"+((String) value).replaceAll("'","''")+"'";
}
}
@Override
public Object sqlToObject(String value, Database database) {
if (database instanceof DB2Database) {
return value.replaceFirst("^\"SYSIBM\".\"TIME\"\\('", "").replaceFirst("'\\)", "");
}
if (database instanceof DerbyDatabase) {
return value.replaceFirst("^TIME\\('", "").replaceFirst("'\\)", "");
}
return super.sqlToObject(value, database);
}
}