Skip to content

Commit

Permalink
0001805: Add support for mysql enums in dbfill
Browse files Browse the repository at this point in the history
  • Loading branch information
chenson42 committed Jul 13, 2014
1 parent 070fee0 commit d8fac50
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
14 changes: 14 additions & 0 deletions symmetric-db/src/main/java/org/jumpmind/db/model/Column.java
Expand Up @@ -104,6 +104,8 @@ public class Column implements Cloneable, Serializable {
private int precisionRadix;

private Map<String, PlatformColumn> platformColumns;

private String[] enumValues;

public Column() {
}
Expand Down Expand Up @@ -701,5 +703,17 @@ public boolean isTimestampWithTimezone() {
public boolean containsJdbcTypes() {
return jdbcTypeCode != Integer.MIN_VALUE && jdbcTypeName != null;
}

public void setEnumValues(String[] enumValues) {
this.enumValues = enumValues;
}

public String[] getEnumValues() {
return enumValues;
}

public boolean isEnum() {
return enumValues != null && enumValues.length > 0;
}

}
Expand Up @@ -560,7 +560,9 @@ private void generateRandomValues(Map<String, Object> columnValues, Table table)
private Object generateRandomValueForColumn(Column column) {
Object objectValue = null;
int type = column.getMappedTypeCode();
if (column.isTimestampWithTimezone()) {
if (column.isEnum()) {
objectValue = column.getEnumValues()[new Random().nextInt(column.getEnumValues().length)];
} else if (column.isTimestampWithTimezone()) {
objectValue = String.format("%s %s",
FormatUtils.TIMESTAMP_FORMATTER.format(randomDate()),
AppUtils.getTimezoneOffset());
Expand Down
Expand Up @@ -37,6 +37,7 @@
import org.jumpmind.db.platform.AbstractJdbcDdlReader;
import org.jumpmind.db.platform.DatabaseMetaDataWrapper;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.sql.ISqlTemplate;

/*
* Reads a database model from a MySql database.
Expand Down Expand Up @@ -116,6 +117,36 @@ protected Column readColumn(DatabaseMetaDataWrapper metaData, Map<String, Object
column.getJdbcTypeName().equalsIgnoreCase(TypeMap.POLYGON) ) {
column.setJdbcTypeName(TypeMap.GEOMETRY);
}

if (column.getJdbcTypeName().equalsIgnoreCase("enum")) {
ISqlTemplate template = platform.getSqlTemplate();
String unParsedEnums = template.queryForString("SELECT SUBSTRING(COLUMN_TYPE,5) FROM information_schema.COLUMNS"
+ " WHERE TABLE_SCHEMA=? AND TABLE_NAME=? AND COLUMN_NAME=?", metaData.getCatalog(), (String) values.get("TABLE_NAME"), column.getName());
if (unParsedEnums != null) {
unParsedEnums = unParsedEnums.trim();
if (unParsedEnums.startsWith("(")) {
unParsedEnums = unParsedEnums.substring(1);
if (unParsedEnums.endsWith(")")) {
unParsedEnums = unParsedEnums.substring(0, unParsedEnums.length()-1);
}
}

String[] parsedEnums = unParsedEnums.split(",");
for (int i = 0; i < parsedEnums.length; i++) {
String parsedEnum = parsedEnums[i];
if (parsedEnum.startsWith("'")) {
parsedEnum = parsedEnum.substring(1);
if (parsedEnum.endsWith("'")) {
parsedEnum = parsedEnum.substring(0, parsedEnum.length() - 1);
}
}

parsedEnums[i] = parsedEnum;
}

column.setEnumValues(parsedEnums);
}
}
return column;
}

Expand Down

0 comments on commit d8fac50

Please sign in to comment.