package liquibase.database.typeconversion.core;
import liquibase.database.Database;
import liquibase.database.core.CacheDatabase;
import liquibase.database.structure.type.BlobType;
import liquibase.database.structure.type.BooleanType;
import liquibase.database.structure.type.ClobType;
import liquibase.database.structure.type.CurrencyType;
import java.text.ParseException;
public class CacheTypeConverter extends AbstractTypeConverter {
public int getPriority() {
return PRIORITY_DATABASE;
}
public boolean supports(Database database) {
return database instanceof CacheDatabase;
}
@Override
public Object convertDatabaseValueToObject(Object defaultValue, int dataType, int columnSize, int decimalDigits, Database database) throws ParseException {
if (defaultValue != null) {
if (defaultValue instanceof String) {
String stringDefaultValue = (String) defaultValue;
if (stringDefaultValue.charAt(0) == '"' && stringDefaultValue.charAt(stringDefaultValue.length() - 1) == '"') {
defaultValue = stringDefaultValue.substring(1, stringDefaultValue.length() - 1);
} else if (stringDefaultValue.startsWith("$")) {
defaultValue = "OBJECTSCRIPT '" + defaultValue + "'";
}
}
}
return super.convertDatabaseValueToObject(defaultValue, dataType, columnSize, decimalDigits, database);
}
@Override
public BlobType getBlobType() {
return new BlobType("LONGVARBINARY");
}
@Override
public BooleanType getBooleanType() {
return new BooleanType.NumericBooleanType();
}
@Override
public ClobType getClobType() {
return new ClobType("LONGVARCHAR");
}
@Override
public CurrencyType getCurrencyType() {
return new CurrencyType("MONEY");
}
}