package liquibase.datatype.core;
import java.util.Locale;
import liquibase.database.Database;
import liquibase.database.core.*;
import liquibase.datatype.DataTypeInfo;
import liquibase.datatype.DatabaseDataType;
import liquibase.datatype.LiquibaseDataType;
import liquibase.exception.DatabaseException;
@DataTypeInfo(name = "uuid", aliases = { "uniqueidentifier", "java.util.UUID" }, minParameters = 0, maxParameters = 0, priority = LiquibaseDataType.PRIORITY_DEFAULT)
public class UUIDType extends LiquibaseDataType {
@Override
public DatabaseDataType toDatabaseDataType(Database database) {
try {
if (database instanceof H2Database
|| (database instanceof PostgresDatabase && database.getDatabaseMajorVersion() * 10 + database.getDatabaseMinorVersion() >= 83)) {
return new DatabaseDataType("UUID");
}
} catch (DatabaseException e) {
// fall back
}
if (database instanceof MSSQLDatabase) {
return new DatabaseDataType(database.escapeDataTypeName("uniqueidentifier"));
}
if (database instanceof SybaseASADatabase || database instanceof SybaseDatabase) {
return new DatabaseDataType("UNIQUEIDENTIFIER");
}
if (database instanceof OracleDatabase) {
return new DatabaseDataType("RAW",16);
}
if (database instanceof SQLiteDatabase) {
return new DatabaseDataType("TEXT");
}
return new DatabaseDataType("char", 36);
}
@Override
protected String otherToSql(Object value, Database database) {
if (value == null) {
return null;
}
if (database instanceof MSSQLDatabase) {
return "'" + value.toString().toUpperCase(Locale.ENGLISH) + "'";
}
return super.otherToSql(value, database);
}
}