Skip to content

Commit

Permalink
0000715: Default values with underscores end up escaped (unecessarily…
Browse files Browse the repository at this point in the history
…) with a '\' or '%' character on MySQL
  • Loading branch information
chenson42 committed Jul 18, 2012
1 parent 046bb1a commit f64cd79
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 11 deletions.
Expand Up @@ -319,6 +319,16 @@ public String alterDatabase(Database currentModel, Database desiredModel) {
alterDatabase(currentModel, desiredModel, ddl);
return ddl.toString();
}

public String alterTable(Table currentTable, Table desiredTable) {
Database currentModel = new Database();
currentModel.addTable(currentTable);

Database desiredModel = new Database();
desiredModel.addTable(desiredTable);

return alterDatabase(currentModel, desiredModel);
}

/**
* Generates the DDL to modify an existing database so the schema matches
Expand Down
Expand Up @@ -23,6 +23,8 @@ public interface IDdlBuilder {

public String alterDatabase(Database currentModel, Database desiredModel);

public String alterTable(Table currentTable, Table desiredTable);

public String dropTables(Database database);

/*
Expand Down
Expand Up @@ -110,8 +110,6 @@ public MySqlDdlBuilder() {
addEscapedCharSequence("\r", "\\r");
addEscapedCharSequence("\t", "\\t");
addEscapedCharSequence("\u001A", "\\Z");
addEscapedCharSequence("%", "\\%");
addEscapedCharSequence("_", "\\_");
}

@Override
Expand Down
Expand Up @@ -44,6 +44,32 @@ public void turnOffDebug() {
Logger logger = Logger.getLogger("org.jumpmind.db");
logger.setLevel(originalLevel);
}

@Test
public void testExportDefaultValueWithUnderscores() {
Table table = new Table("TEST_DEFAULT_UNDERSCORES");
table.addColumn(new Column("ID", true));
table.getColumnWithName("ID").setTypeCode(Types.INTEGER);
table.getColumnWithName("ID").setRequired(true);
table.addColumn(new Column("NOTES"));
table.getColumnWithName("NOTES").setTypeCode(Types.VARCHAR);
table.getColumnWithName("NOTES").setSize("20");
table.getColumnWithName("NOTES").setDefaultValue("this_has_underscores");

Table tableFromDatabase = dropCreateAndThenReadTable(table);

Assert.assertEquals(table.getColumnWithName("NOTES").getDefaultValue(),
tableFromDatabase.getColumnWithName("NOTES").getDefaultValue());

}

protected Table dropCreateAndThenReadTable(Table table) {
Database database = new Database();
database.addTable(table);
platform.createDatabase(database, true, false);
return platform.getTableFromCache(table.getName(), true);

}

@Test
public void testUpgradePrimaryKeyAutoIncrementFromIntToBigInt() throws Exception {
Expand All @@ -62,14 +88,7 @@ public void testUpgradePrimaryKeyAutoIncrementFromIntToBigInt() throws Exception
table.getColumnWithName("NOTES").setTypeCode(Types.VARCHAR);
table.getColumnWithName("NOTES").setSize("100");

Database database = new Database();
database.addTable(table);

platform.createDatabase(database, true, false);

Table tableFromDatabase = platform.getTableFromCache(table.getName(), true);
Database databaseFromDatabase = new Database();
databaseFromDatabase.addTable(tableFromDatabase);
Table tableFromDatabase = dropCreateAndThenReadTable(table);

Assert.assertTrue(tableFromDatabase.getColumnWithName("ID").isPrimaryKey());

Expand All @@ -85,7 +104,7 @@ public void testUpgradePrimaryKeyAutoIncrementFromIntToBigInt() throws Exception
table.getColumnWithName("ID").setTypeCode(Types.BIGINT);

IDdlBuilder builder = platform.getDdlBuilder();
String alterSql = builder.alterDatabase(databaseFromDatabase, database);
String alterSql = builder.alterTable(tableFromDatabase, table);

Logger logger = Logger.getLogger("org.jumpmind.db");
logger.info(alterSql);
Expand Down

0 comments on commit f64cd79

Please sign in to comment.