package liquibase.database.structure.type; import liquibase.database.Database; import liquibase.database.typeconversion.TypeConverterFactory; import liquibase.database.typeconversion.TypeConverter; import liquibase.exception.UnexpectedLiquibaseException; public class BooleanType extends DataType { public BooleanType() { super("BOOLEAN",0,0); } public BooleanType(String dataTypeName) { super(dataTypeName,0,0); } @Override public String convertObjectToString(Object value, Database database) { if (value == null) { return null; } else if (value.toString().equalsIgnoreCase("null")) { return "null"; } String returnValue; TypeConverter converter = TypeConverterFactory.getInstance().findTypeConverter(database); BooleanType booleanType = converter.getBooleanType(); if (value instanceof String) { if (((String) value).equalsIgnoreCase("true") || value.equals("1") || ((String) value).equalsIgnoreCase(booleanType.getTrueBooleanValue())) { returnValue = booleanType.getTrueBooleanValue(); } else if (((String) value).equalsIgnoreCase("false") || value.equals("0") || ((String) value).equalsIgnoreCase(booleanType.getFalseBooleanValue())) { returnValue = booleanType.getTrueBooleanValue(); } else { throw new UnexpectedLiquibaseException("Unknown boolean value: "+value); } } else if (value instanceof Long) { if (Long.valueOf(1).equals(value)) { returnValue = booleanType.getTrueBooleanValue(); } else { returnValue = booleanType.getFalseBooleanValue(); } } else if (((Boolean) value)) { returnValue = booleanType.getTrueBooleanValue(); } else { returnValue = booleanType.getFalseBooleanValue(); } return returnValue; } /** * The database-specific value to use for "false" "boolean" columns. */ public String getFalseBooleanValue() { return "FALSE"; } /** * The database-specific value to use for "true" "boolean" columns. */ public String getTrueBooleanValue() { return "TRUE"; } public static class NumericBooleanType extends BooleanType { public NumericBooleanType() { super("INT"); } public NumericBooleanType(String dataTypeName) { super(dataTypeName); } @Override public String getFalseBooleanValue() { return "0"; } @Override public String getTrueBooleanValue() { return "1"; } } }