use of org.jumpmind.db.model.Column in project symmetric-ds by JumpMind.
the class AbstractTriggerTemplate method createInitalLoadSql.
public String createInitalLoadSql(Node node, TriggerRouter triggerRouter, Table originalTable, TriggerHistory triggerHistory, Channel channel, String overrideSelectSql) {
IParameterService parameterService = symmetricDialect.getParameterService();
boolean dateTimeAsString = parameterService.is(ParameterConstants.DATA_LOADER_TREAT_DATETIME_AS_VARCHAR);
boolean concatInCsv = parameterService.is(ParameterConstants.INITIAL_LOAD_CONCAT_CSV_IN_SQL_ENABLED);
Table table = originalTable.copyAndFilterColumns(triggerHistory.getParsedColumnNames(), triggerHistory.getParsedPkColumnNames(), true);
Column[] columns = table.getColumns();
String textColumnExpression = parameterService.getString(ParameterConstants.DATA_EXTRACTOR_TEXT_COLUMN_EXPRESSION);
String sql = null;
String tableAlias = symmetricDialect.getInitialLoadTableAlias();
if (concatInCsv) {
sql = sqlTemplates.get(INITIAL_LOAD_SQL_TEMPLATE);
String columnsText = buildColumnsString(tableAlias, tableAlias, "", columns, DataEventType.INSERT, false, channel, triggerRouter.getTrigger()).columnString;
if (isNotBlank(textColumnExpression)) {
columnsText = textColumnExpression.replace("$(columnName)", columnsText);
}
sql = FormatUtils.replace("columns", columnsText, sql);
} else {
sql = "select $(columns) from $(schemaName)$(tableName) t where $(whereClause)";
StringBuilder columnList = new StringBuilder();
for (int i = 0; i < columns.length; i++) {
Column column = columns[i];
if (column != null) {
if (i > 0) {
columnList.append(",");
}
boolean isLob = symmetricDialect.getPlatform().isLob(column.getMappedTypeCode());
if (!(isLob && triggerRouter.getTrigger().isUseStreamLobs())) {
String columnExpression = null;
if (useTriggerTemplateForColumnTemplatesDuringInitialLoad()) {
ColumnString columnString = fillOutColumnTemplate(tableAlias, tableAlias, "", column, DataEventType.INSERT, false, channel, triggerRouter.getTrigger());
columnExpression = columnString.columnString;
if (isNotBlank(textColumnExpression) && TypeMap.isTextType(column.getMappedTypeCode())) {
columnExpression = textColumnExpression.replace("$(columnName)", columnExpression);
}
} else {
columnExpression = SymmetricUtils.quote(symmetricDialect, column.getName());
if (dateTimeAsString && TypeMap.isDateTimeType(column.getMappedTypeCode())) {
columnExpression = castDatetimeColumnToString(column.getName());
} else if (isNotBlank(textColumnExpression) && TypeMap.isTextType(column.getMappedTypeCode())) {
columnExpression = textColumnExpression.replace("$(columnName)", columnExpression);
}
}
columnList.append(columnExpression).append(" as ").append("x__").append(i);
} else {
columnList.append(" ").append(emptyColumnTemplate).append(" as ").append("x__").append(i);
}
}
}
sql = FormatUtils.replace("columns", columnList.toString(), sql);
}
String initialLoadSelect = StringUtils.isBlank(triggerRouter.getInitialLoadSelect()) ? Constants.ALWAYS_TRUE_CONDITION : triggerRouter.getInitialLoadSelect();
if (StringUtils.isNotBlank(overrideSelectSql)) {
initialLoadSelect = overrideSelectSql;
}
sql = FormatUtils.replace("whereClause", initialLoadSelect, sql);
sql = FormatUtils.replace("tableName", SymmetricUtils.quote(symmetricDialect, table.getName()), sql);
sql = FormatUtils.replace("schemaName", triggerHistory == null ? getSourceTablePrefix(originalTable) : getSourceTablePrefix(triggerHistory), sql);
sql = FormatUtils.replace("primaryKeyWhereString", getPrimaryKeyWhereString(symmetricDialect.getInitialLoadTableAlias(), table.hasPrimaryKey() ? table.getPrimaryKeyColumns() : table.getColumns()), sql);
// Replace these parameters to give the initiaLoadContition a chance to
// reference the node that is being loaded
sql = FormatUtils.replace("groupId", node.getNodeGroupId(), sql);
sql = FormatUtils.replace("externalId", node.getExternalId(), sql);
sql = FormatUtils.replace("nodeId", node.getNodeId(), sql);
sql = replaceDefaultSchemaAndCatalog(sql);
sql = FormatUtils.replace("prefixName", symmetricDialect.getTablePrefix(), sql);
sql = FormatUtils.replace("oracleToClob", triggerRouter.getTrigger().isUseCaptureLobs() ? "to_clob('')||" : "", sql);
return sql;
}
use of org.jumpmind.db.model.Column in project symmetric-ds by JumpMind.
the class AseDdlBuilder method processChange.
/*
* Processes the change of the default value of a column. Note that this
* method is only used if it is the only change to that column.
*/
protected void processChange(Database currentModel, Database desiredModel, ColumnDefaultValueChange change, StringBuilder ddl) {
ddl.append("ALTER TABLE ");
ddl.append(getFullyQualifiedTableNameShorten(change.getChangedTable()));
printIndent(ddl);
ddl.append("REPLACE ");
printIdentifier(getColumnName(change.getChangedColumn()), ddl);
Table curTable = currentModel.findTable(change.getChangedTable().getName(), delimitedIdentifierModeOn);
Column curColumn = curTable.findColumn(change.getChangedColumn().getName(), delimitedIdentifierModeOn);
ddl.append(" DEFAULT ");
if (isValidDefaultValue(change.getNewDefaultValue(), curColumn.getMappedTypeCode())) {
printDefaultValue(change.getNewDefaultValue(), curColumn.getMappedTypeCode(), ddl);
} else {
ddl.append("NULL");
}
printEndOfStatement(ddl);
change.apply(currentModel, delimitedIdentifierModeOn);
}
use of org.jumpmind.db.model.Column in project symmetric-ds by JumpMind.
the class AseDdlBuilder method processTableStructureChanges.
@Override
protected void processTableStructureChanges(Database currentModel, Database desiredModel, Table sourceTable, Table targetTable, List<TableChange> changes, StringBuilder ddl) {
// First we drop primary keys as necessary
for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
TableChange change = (TableChange) changeIt.next();
if (change instanceof RemovePrimaryKeyChange) {
processChange(currentModel, desiredModel, (RemovePrimaryKeyChange) change, ddl);
changeIt.remove();
} else if (change instanceof PrimaryKeyChange) {
PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
RemovePrimaryKeyChange removePkChange = new RemovePrimaryKeyChange(pkChange.getChangedTable(), pkChange.getOldPrimaryKeyColumns());
processChange(currentModel, desiredModel, removePkChange, ddl);
}
}
HashMap columnChanges = new HashMap();
// Next we add/remove columns
for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
TableChange change = (TableChange) changeIt.next();
if (change instanceof AddColumnChange) {
AddColumnChange addColumnChange = (AddColumnChange) change;
// Sybase can only add not insert columns
if (addColumnChange.isAtEnd()) {
processChange(currentModel, desiredModel, addColumnChange, ddl);
changeIt.remove();
}
} else if (change instanceof CopyColumnValueChange) {
CopyColumnValueChange copyColumnChange = (CopyColumnValueChange) change;
processChange(currentModel, desiredModel, copyColumnChange, ddl);
changeIt.remove();
} else if (change instanceof RemoveColumnChange) {
processChange(currentModel, desiredModel, (RemoveColumnChange) change, ddl);
changeIt.remove();
} else if (change instanceof ColumnAutoIncrementChange) {
// Sybase has no way of adding or removing an IDENTITY
// constraint
// Thus we have to rebuild the table anyway and can ignore all
// the other
// column changes
columnChanges = null;
} else if ((change instanceof ColumnChange) && (columnChanges != null)) {
// we gather all changed columns because we can use the ALTER
// TABLE ALTER COLUMN
// statement for them
ColumnChange columnChange = (ColumnChange) change;
ArrayList changesPerColumn = (ArrayList) columnChanges.get(columnChange.getChangedColumn());
if (changesPerColumn == null) {
changesPerColumn = new ArrayList();
columnChanges.put(columnChange.getChangedColumn(), changesPerColumn);
}
changesPerColumn.add(change);
}
}
if (columnChanges != null) {
for (Iterator changesPerColumnIt = columnChanges.entrySet().iterator(); changesPerColumnIt.hasNext(); ) {
Map.Entry entry = (Map.Entry) changesPerColumnIt.next();
Column sourceColumn = (Column) entry.getKey();
ArrayList changesPerColumn = (ArrayList) entry.getValue();
// different handler
if ((changesPerColumn.size() == 1) && (changesPerColumn.get(0) instanceof ColumnDefaultValueChange)) {
processChange(currentModel, desiredModel, (ColumnDefaultValueChange) changesPerColumn.get(0), ddl);
} else {
Column targetColumn = targetTable.findColumn(sourceColumn.getName(), delimitedIdentifierModeOn);
processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, ddl);
}
for (Iterator changeIt = changesPerColumn.iterator(); changeIt.hasNext(); ) {
((ColumnChange) changeIt.next()).apply(currentModel, delimitedIdentifierModeOn);
}
}
}
// Finally we add primary keys
for (Iterator changeIt = changes.iterator(); changeIt.hasNext(); ) {
TableChange change = (TableChange) changeIt.next();
if (change instanceof AddPrimaryKeyChange) {
processChange(currentModel, desiredModel, (AddPrimaryKeyChange) change, ddl);
changeIt.remove();
} else if (change instanceof PrimaryKeyChange) {
PrimaryKeyChange pkChange = (PrimaryKeyChange) change;
AddPrimaryKeyChange addPkChange = new AddPrimaryKeyChange(pkChange.getChangedTable(), pkChange.getNewPrimaryKeyColumns());
processChange(currentModel, desiredModel, addPkChange, ddl);
changeIt.remove();
}
}
}
use of org.jumpmind.db.model.Column in project symmetric-ds by JumpMind.
the class OracleDdlBuilder method processChange.
protected void processChange(Database currentModel, Database desiredModel, ColumnRequiredChange change, StringBuilder ddl) {
boolean required = !change.getChangedColumn().isRequired();
writeTableAlterStmt(change.getChangedTable(), ddl);
ddl.append(" MODIFY (");
Column column = change.getChangedColumn();
printIdentifier(getColumnName(column), ddl);
if (required) {
ddl.append(" NOT NULL ");
} else {
ddl.append(" NULL ");
}
ddl.append(" )");
printEndOfStatement(ddl);
}
use of org.jumpmind.db.model.Column in project symmetric-ds by JumpMind.
the class OracleDdlBuilder method writeAlterColumnDataTypeToBigInt.
@Override
protected boolean writeAlterColumnDataTypeToBigInt(ColumnDataTypeChange change, StringBuilder ddl) {
writeTableAlterStmt(change.getChangedTable(), ddl);
ddl.append("MODIFY (");
Column column = change.getChangedColumn();
column.setTypeCode(change.getNewTypeCode());
printIdentifier(getColumnName(column), ddl);
ddl.append(" ");
ddl.append(getSqlType(column));
ddl.append(")");
printEndOfStatement(ddl);
return true;
}
Aggregations