Skip to content

Commit

Permalink
0001298: The conflict resolution target table value should only be ca…
Browse files Browse the repository at this point in the history
…se sensitive on case sensitive databases.
  • Loading branch information
abrougher committed Jul 22, 2013
1 parent 7ec3564 commit e5d678c
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 30 deletions.
Expand Up @@ -109,15 +109,20 @@ protected DatabaseWriterSettings buildDatabaseWriterSettings(
settings.setTreatDateTimeFieldsAsVarchar(parameterService
.is(ParameterConstants.DATA_LOADER_TREAT_DATETIME_AS_VARCHAR));
settings.setSaveCurrentValueOnError(parameterService.is(ParameterConstants.DATA_LOADER_ERROR_RECORD_CUR_VAL, false));
settings.setMetadataIgnoreCase(parameterService
.is(ParameterConstants.DB_METADATA_IGNORE_CASE));

Map<String, Conflict> byChannel = new HashMap<String, Conflict>();
Map<String, Conflict> byTable = new HashMap<String, Conflict>();
boolean multipleDefaultSettingsFound = false;
if (conflictSettings != null) {
for (Conflict conflictSetting : conflictSettings) {
String qualifiedTableName = conflictSetting.toQualifiedTableName();
if (parameterService.is(ParameterConstants.DB_METADATA_IGNORE_CASE)) {
qualifiedTableName = qualifiedTableName.toUpperCase();
}
if (StringUtils.isNotBlank(qualifiedTableName)) {
byTable.put(qualifiedTableName, conflictSetting); // ADB
byTable.put(qualifiedTableName, conflictSetting);
} else if (StringUtils.isNotBlank(conflictSetting.getTargetChannelId())) {
byChannel.put(conflictSetting.getTargetChannelId(), conflictSetting);
} else {
Expand Down
Expand Up @@ -31,7 +31,7 @@
public class DatabaseWriterSettings {

protected long maxRowsBeforeCommit = 10000;

// Milliseconds to sleep between commits.
protected long commitSleepInterval = 5;

Expand All @@ -40,49 +40,51 @@ public class DatabaseWriterSettings {
protected boolean usePrimaryKeysFromSource = true;

protected Conflict defaultConflictSetting;

protected boolean createTableFailOnError = true;

protected boolean alterTable = true;

protected boolean createTableDropFirst = false;

protected boolean createTableAlterCaseToMatchDatabaseDefault = false;

protected boolean ignoreMissingTables = true;

protected boolean saveCurrentValueOnError = false;

protected Map<String, Conflict> conflictSettingsByChannel;

protected Map<String, Conflict> conflictSettingsByTable;

protected List<IDatabaseWriterFilter> databaseWriterFilters;

protected List<IDatabaseWriterErrorHandler> databaseWriterErrorHandlers;

protected List<ResolvedData> resolvedData;


protected boolean metadataIgnoreCase;

public boolean isAlterTable() {
return alterTable;
}

public void setAlterTable(boolean alterTable) {
this.alterTable = alterTable;
}

public boolean isCreateTableDropFirst() {
return createTableDropFirst;
}

public void setCreateTableDropFirst(boolean createTableDropFirst) {
this.createTableDropFirst = createTableDropFirst;
}

public boolean isCreateTableFailOnError() {
return createTableFailOnError;
}

public void setCreateTableFailOnError(boolean createTableFailOnError) {
this.createTableFailOnError = createTableFailOnError;
}
Expand Down Expand Up @@ -118,11 +120,11 @@ public Conflict getDefaultConflictSetting() {
public void setDefaultConflictSetting(Conflict defaultConflictSetting) {
this.defaultConflictSetting = defaultConflictSetting;
}

public boolean isCreateTableAlterCaseToMatchDatabaseDefault() {
return createTableAlterCaseToMatchDatabaseDefault;
}

public void setCreateTableAlterCaseToMatchDatabaseDefault(
boolean createTableAlterCaseToMatchDatabaseDefault) {
this.createTableAlterCaseToMatchDatabaseDefault = createTableAlterCaseToMatchDatabaseDefault;
Expand Down Expand Up @@ -151,7 +153,7 @@ public List<IDatabaseWriterFilter> getDatabaseWriterFilters() {
public void setDatabaseWriterFilters(List<IDatabaseWriterFilter> databaseWriterFilters) {
this.databaseWriterFilters = databaseWriterFilters;
}

public void setResolvedData(ResolvedData... resolvedData) {
this.resolvedData = new ArrayList<ResolvedData>();
if (resolvedData != null) {
Expand All @@ -160,24 +162,24 @@ public void setResolvedData(ResolvedData... resolvedData) {
}
}
}

public void setResolvedData(List<ResolvedData> resolvedData) {
this.resolvedData = resolvedData;
}

public List<ResolvedData> getResolvedData() {
return resolvedData;
}

public void setDatabaseWriterErrorHandlers(
List<IDatabaseWriterErrorHandler> databaseWriterErrorHandlers) {
this.databaseWriterErrorHandlers = databaseWriterErrorHandlers;
}

public List<IDatabaseWriterErrorHandler> getDatabaseWriterErrorHandlers() {
return databaseWriterErrorHandlers;
}

public ResolvedData getResolvedData (long rowNumber) {
if (resolvedData != null) {
for (ResolvedData data : resolvedData) {
Expand All @@ -188,15 +190,15 @@ public ResolvedData getResolvedData (long rowNumber) {
}
return null;
}

public void setIgnoreMissingTables(boolean ignoreMissingTables) {
this.ignoreMissingTables = ignoreMissingTables;
}

public boolean isIgnoreMissingTables() {
return ignoreMissingTables;
}

public void addErrorHandler(IDatabaseWriterErrorHandler handler) {
if (this.databaseWriterErrorHandlers == null) {
this.databaseWriterErrorHandlers = new ArrayList<IDatabaseWriterErrorHandler>();
Expand All @@ -206,12 +208,20 @@ public void addErrorHandler(IDatabaseWriterErrorHandler handler) {

public Conflict pickConflict(Table table, Batch batch) {
Conflict settings = null;
String fullyQualifiedName = table.getFullyQualifiedTableName();
if (conflictSettingsByTable != null) {
Conflict found = conflictSettingsByTable.get(fullyQualifiedName);

String tableName = table.getFullyQualifiedTableName();
if (metadataIgnoreCase) {
tableName = tableName.toUpperCase();
}
Conflict found = conflictSettingsByTable.get(tableName);

if (found == null) {
found = conflictSettingsByTable.get(table.getName());
tableName = table.getName();
if (metadataIgnoreCase) {
tableName = tableName.toUpperCase();
}
found = conflictSettingsByTable.get(tableName);
}

if (found != null
Expand Down Expand Up @@ -253,4 +263,12 @@ public void setSaveCurrentValueOnError(boolean saveCurrentValueOnError) {
this.saveCurrentValueOnError = saveCurrentValueOnError;
}

public boolean isMetadataIgnoreCase() {
return metadataIgnoreCase;
}

public void setMetadataIgnoreCase(boolean metadataIgnoreCase) {
this.metadataIgnoreCase = metadataIgnoreCase;
}

}

0 comments on commit e5d678c

Please sign in to comment.