Ejemplo n.º 1
0
        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);
            }
        }