public DuplicateManager(DuplicateItemContainer container) { var director = new DuplicateDirector(); var builder = new ConcreteSqlDuplicateBuilder(container); director.Construct(builder); DuplicateStatement duplicateStatement = builder.GetResult(); duplicateStatement.FinishedStatement(); Statement = duplicateStatement.Statement; }
/// <summary> /// Get columns to perform duplicate check /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks> /// As coded columns should not be binary or similar type /// such as image, if so this will fail. Check types if unsure /// /// SELECT COLUMN_NAME, DATA_TYPE /// FROM INFORMATION_SCHEMA.COLUMNS /// WHERE TABLE_NAME = 'SomeTable' /// /// </remarks> private void cmdCheckForDuplicates_Click(object sender, EventArgs e) { if (SelectedTableColumnCheckedListBox.Items.Count == 0) { return; } var columns = SelectedTableColumnCheckedListBox.Items.OfType <SqlColumn>(); // ReSharper disable once PossibleMultipleEnumeration var identityColumn = columns.FirstOrDefault(sqlColumn => sqlColumn.IsIdentity); var sqlColumns = SelectedTableColumnCheckedListBox.CheckedIColumnDetailsList(); if (sqlColumns.Count > 0) { if (identityColumn != null) { var evaluateContains = sqlColumns.Contains(identityColumn); if (evaluateContains) { sqlColumns.Remove(identityColumn); } } } var container = new DuplicateItemContainer() { Columns = sqlColumns, OrderBy = OrderByComboBox.SelectedIndex == 0 ? "" : OrderByComboBox.Text }; var manager = new DuplicateManager(container); // ReSharper disable once PossibleMultipleEnumeration var ops = new DataOperations(columns.First().Schema); var duplicatesDataTable = ops.Duplicates(manager.Statement); if (!ops.IsSuccessFul) { if (ops.HasException && !string.IsNullOrWhiteSpace(ops.LastExceptionMessage)) { MessageBox.Show($"Failure\n{ops.LastExceptionMessage}"); } return; } if (duplicatesDataTable.Rows.Count == 0) { MessageBox.Show("There are no duplicates in the selected table"); return; } if (identityColumn != null) { var f = new ResultsForm( DatabaseTableNamesListBox.Text, duplicatesDataTable, identityColumn.ColumnName); try { f.ShowDialog(); } finally { f.Dispose(); } } else { MessageBox.Show("No identity column, can not continue"); } }
public ConcreteSqlDuplicateBuilder(DuplicateItemContainer pColumnsInformation) { _sqlColumnList = pColumnsInformation.Columns; _tableName = _sqlColumnList.First().TableName; _orderBy = pColumnsInformation.OrderBy; }