private static IEnumerable <MigrationOperation> DetectHistoryRebuild(IEnumerable <MigrationOperation> operations) { var enumerator = operations.GetEnumerator(); while (enumerator.MoveNext()) { var sequence = HistoryRebuildOperationSequence.Detect(enumerator); yield return((sequence == null) ? enumerator.Current : sequence); } }
private static IEnumerable <MigrationOperation> DetectHistoryRebuild( IEnumerable <MigrationOperation> operations) { DebugCheck.NotNull(operations); var enumerator = operations.GetEnumerator(); while (enumerator.MoveNext()) { var sequence = HistoryRebuildOperationSequence.Detect(enumerator); yield return(sequence ?? enumerator.Current); } }
private void Generate(HistoryRebuildOperationSequence sequence) { DebugCheck.NotNull(sequence); var createTableOperationSource = sequence.DropPrimaryKeyOperation.CreateTableOperation; var createTableOperationTarget = ResolveNameConflicts(createTableOperationSource); var renameTableOperation = new RenameTableOperation( createTableOperationTarget.Name, HistoryContext.DefaultTableName); using (var writer = Writer()) { WriteCreateTable(createTableOperationTarget, writer); writer.WriteLine(); // Copy the data from the original table into the new table. writer.Write("INSERT INTO "); writer.WriteLine(Name(createTableOperationTarget.Name)); writer.Write("SELECT "); var first = true; foreach (var column in createTableOperationSource.Columns) { if (first) { first = false; } else { writer.Write(", "); } writer.Write( (column.Name == sequence.AddColumnOperation.Column.Name) ? Generate((string)sequence.AddColumnOperation.Column.DefaultValue) : (column.Type == PrimitiveTypeKind.String) ? "LEFT(" + Name(column.Name) + ", " + column.MaxLength + ")" : Name(column.Name)); } writer.Write(" FROM "); writer.WriteLine(Name(createTableOperationSource.Name)); writer.Write("DROP TABLE "); writer.WriteLine(Name(createTableOperationSource.Name)); WriteRenameTable(renameTableOperation, writer); Statement(writer); } }