Skip to content

Commit

Permalink
Merge pull request #83 from woehrl01/rename_table_support_sqlite
Browse files Browse the repository at this point in the history
0003547: Improve Sqlite DdlBuilder support
  • Loading branch information
mmichalek committed May 23, 2018
2 parents 9550abe + fb3bb19 commit c37efdb
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 8 deletions.
Expand Up @@ -821,14 +821,8 @@ protected void processTableStructureChanges(Database currentModel, Database desi

Table realTargetTable = getRealTargetTableFor(desiredModel, sourceTable, targetTable);

dropTemporaryTable(tempTable, ddl);
createTemporaryTable(tempTable, ddl);
writeCopyDataStatement(sourceTable, tempTable, ddl);
/*
* Note that we don't drop the indices here because the DROP TABLE will take
* care of that Likewise, foreign keys have already been dropped as necessary
*/
dropTable(sourceTable, ddl, false, true);
renameTable(sourceTable, tempTable, ddl);

createTable(realTargetTable, ddl, false, true);
if (canMigrateData) {
writeCopyDataStatement(tempTable, targetTable, ddl);
Expand All @@ -839,6 +833,18 @@ protected void processTableStructureChanges(Database currentModel, Database desi
ddl.append(tableDdl);
}
}

protected void renameTable(Table sourceTable, Table tempTable, StringBuilder ddl) {
dropTemporaryTable(tempTable, ddl);
createTemporaryTable(tempTable, ddl);
writeCopyDataStatement(sourceTable, tempTable, ddl);
/*
* Note that we don't drop the indices here because the DROP
* TABLE will take care of that Likewise, foreign keys have
* already been dropped as necessary
*/
dropTable(sourceTable, ddl, false, true);
}

protected Database copy(Database currentModel) {
try {
Expand Down
Expand Up @@ -22,7 +22,11 @@

import java.sql.Connection;
import java.sql.Types;
import java.util.Collection;
import java.util.Iterator;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.alter.*;
import org.jumpmind.db.model.Column;
import org.jumpmind.db.model.Database;
import org.jumpmind.db.model.ForeignKey;
Expand Down Expand Up @@ -167,6 +171,13 @@ protected String mapDefaultValue(Object defaultValue, int typeCode) {
return super.mapDefaultValue(defaultValue, typeCode);
}

@Override
protected void writeColumnDefaultValue(Table table, Column column, StringBuilder ddl) {
ddl.append("(");
super.writeColumnDefaultValue(table, column, ddl);
ddl.append(")");
}

@Override
protected void createTable(Table table, StringBuilder ddl, boolean temporary, boolean recreate) {
// SQL Lite does not allow auto increment columns on a composite primary key. Solution is to turn off
Expand All @@ -179,4 +190,47 @@ protected void createTable(Table table, StringBuilder ddl, boolean temporary, bo
super.createTable(table, ddl, temporary, recreate);
}

@Override
protected void renameTable(Table sourceTable, Table tempTable, StringBuilder ddl) {
dropTemporaryTable(tempTable, ddl);

for(IIndex index : sourceTable.getIndices()) {
writeExternalIndexDropStmt(tempTable, index, ddl);
}

ddl.append("ALTER TABLE ");
ddl.append(getFullyQualifiedTableNameShorten(sourceTable));
ddl.append(" RENAME TO ");
ddl.append(getFullyQualifiedTableNameShorten(tempTable));
printEndOfStatement(ddl);
}

@Override
protected void processTableStructureChanges(Database currentModel, Database desiredModel, Collection<TableChange> changes, StringBuilder ddl) {
for (Iterator<TableChange> changeIt = changes.iterator(); changeIt.hasNext();) {
TableChange change = changeIt.next();

if (change instanceof AddColumnChange) {
AddColumnChange addColumnChange = (AddColumnChange) change;
processChange(currentModel, desiredModel, addColumnChange, ddl);
changeIt.remove();
}
}

super.processTableStructureChanges(currentModel, desiredModel, changes, ddl);
}

/*
* Processes the addition of a column to a table.
*/
protected void processChange(Database currentModel, Database desiredModel,
AddColumnChange change, StringBuilder ddl) {
ddl.append("ALTER TABLE ");
ddl.append(getFullyQualifiedTableNameShorten(change.getChangedTable()));
printIndent(ddl);
ddl.append("ADD ");
writeColumn(change.getChangedTable(), change.getNewColumn(), ddl);
printEndOfStatement(ddl);
change.apply(currentModel, delimitedIdentifierModeOn);
}
}

0 comments on commit c37efdb

Please sign in to comment.