protected void WriteClassStart(string @namespace, string className, IndentedTextWriter writer, string @base, bool designer = false) { var baseClassName = @base == typeof (IMigrationMetadata).Name ? @base : typeof (nTestSwarmDbMigration).FullName; base.WriteClassStart(@namespace, className, writer, baseClassName, designer); }
protected override void Generate(AddForeignKeyOperation addForeignKeyOperation, IndentedTextWriter writer) { var isReadonly = ReadonlyEntities.Contains(addForeignKeyOperation.PrincipalTable) || ReadonlyEntities.Contains(addForeignKeyOperation.DependentTable); ; //if (!isReadonly) { base.Generate(addForeignKeyOperation, writer); } }
protected override void Generate(DropIndexOperation dropIndexOperation, IndentedTextWriter writer) { var isReadonly = ReadonlyEntities.Contains(dropIndexOperation.Table); if (!isReadonly) { base.Generate(dropIndexOperation, writer); } }
protected override void Generate(CreateTableOperation createTableOperation, IndentedTextWriter writer) { var isReadonly = ReadonlyEntities.Contains(createTableOperation.Name); if (!isReadonly) { base.Generate(createTableOperation, writer); } }
public void Random_access_of_indents_works() { var writer = new IndentedTextWriter(new StringWriter(), " "); foreach (var i in new[] { 4, 2, 5, -7, 0, 5, -1, 9, 0, 0 }) { writer.Indent = i; var j = i < 0 ? 0 : i; Assert.Equal(j * 3, writer.CurrentIndentation().Length); Assert.Equal(j * 3, writer.CurrentIndentation().Length); } }
protected override void Generate(AlterColumnOperation alterColumnOperation, IndentedTextWriter writer) { AlterColumnOperation alter = null; if (alterColumnOperation.Inverse != null) alter = new AlterColumnOperation(TrimSchemaPrefix(alterColumnOperation.Table), alterColumnOperation.Column, alterColumnOperation.IsDestructiveChange, (AlterColumnOperation)alterColumnOperation.Inverse); else alter = new AlterColumnOperation(TrimSchemaPrefix(alterColumnOperation.Table), alterColumnOperation.Column, alterColumnOperation.IsDestructiveChange); if (alter != null) base.Generate(alter, writer); else base.Generate(alterColumnOperation); }
protected virtual string Generate( IEnumerable<MigrationOperation> operations, string @namespace, string className) { Contract.Requires(operations != null); Contract.Requires(!string.IsNullOrWhiteSpace(className)); using (var stringWriter = new StringWriter(CultureInfo.InvariantCulture)) { using (var writer = new IndentedTextWriter(stringWriter, " ")) { WriteClassStart( @namespace, className, writer, "DbMigration", designer: false, namespaces: GetNamespaces(operations)); writer.WriteLine("public override void Up()"); writer.WriteLine("{"); writer.Indent++; operations .Except(_newTableForeignKeys.Select(t => t.Item2)) .Except(_newTableIndexes.Select(t => t.Item2)) .Each<dynamic>(o => Generate(o, writer)); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.WriteLine("public override void Down()"); writer.WriteLine("{"); writer.Indent++; operations .Select(o => o.Inverse) .Where(o => o != null) .Reverse() .Each<dynamic>(o => Generate(o, writer)); writer.Indent--; writer.WriteLine("}"); WriteClassEnd(@namespace, writer); } return stringWriter.ToString(); } }
protected override void Generate(ColumnModel column, IndentedTextWriter writer) { writer.Write(Quote(column.Name)); writer.Write(" "); writer.Write(BuildColumnType(column)); var collation = TryGetCollation(column.Annotations); if (collation != null && column.ClrType == typeof(string)) { writer.Write(" COLLATE " + collation.CollationName + " "); } if ((column.IsNullable != null) && !column.IsNullable.Value) { writer.Write(" NOT NULL"); } if (column.DefaultValue != null) { writer.Write(" DEFAULT "); writer.Write(Generate((dynamic)column.DefaultValue)); } else if (!string.IsNullOrWhiteSpace(column.DefaultValueSql)) { writer.Write(" DEFAULT "); writer.Write(column.DefaultValueSql); } else if (column.IsIdentity) { if ((column.Type == PrimitiveTypeKind.Guid) && (column.DefaultValue == null)) { writer.Write(" DEFAULT " + GuidColumnDefault); } else { writer.Write(" IDENTITY"); } } }
[Fact] // CodePlex 1603 public void Extreme_indentation_does_not_overflow_buffer_size() { var output = new StringWriter(); var writer = new IndentedTextWriter(output, " "); var totalLength = 0; // Run once, filling the cache for (var i = 0; i < 500; i++) { writer.Indent = i; Assert.Equal(i * 3, writer.CurrentIndentation().Length); writer.WriteLine("OhNo!"); totalLength += i * 3 + 7; Assert.Equal(totalLength, output.ToString().Length); } // Run again, this time using the cache for (var i = 0; i < 500; i++) { writer.Indent = i; Assert.Equal(i * 3, writer.CurrentIndentation().Length); } }
protected override void Generate(AddColumnOperation addColumnOperation, IndentedTextWriter writer) { var add = new AddColumnOperation(TrimSchemaPrefix(addColumnOperation.Table), addColumnOperation.Column); base.Generate(add, writer); }
protected override void Generate(RenameTableOperation renameTableOperation, IndentedTextWriter writer) { var rename = new RenameTableOperation(TrimSchemaPrefix(renameTableOperation.Name), renameTableOperation.NewName); base.Generate(rename, writer); }
protected override void Generate(MoveTableOperation moveTableOperation, IndentedTextWriter writer) { var move = new MoveTableOperation(TrimSchemaPrefix(moveTableOperation.Name), moveTableOperation.NewSchema); base.Generate(move, writer); }
protected override void Generate(DropTableOperation dropTableOperation, IndentedTextWriter writer) { var drop = new DropTableOperation(TrimSchemaPrefix(dropTableOperation.Name)); base.Generate(drop, writer); }
protected override void Generate(DropPrimaryKeyOperation dropPrimaryKeyOperation, IndentedTextWriter writer) { dropPrimaryKeyOperation.Table = TrimSchemaPrefix(dropPrimaryKeyOperation.Table); base.Generate(dropPrimaryKeyOperation, writer); }
protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation, IndentedTextWriter writer) { dropForeignKeyOperation.PrincipalTable = TrimSchemaPrefix(dropForeignKeyOperation.PrincipalTable); dropForeignKeyOperation.DependentTable = TrimSchemaPrefix(dropForeignKeyOperation.DependentTable); base.Generate(dropForeignKeyOperation, writer); }
/// <summary> /// Generates code to perform an <see cref="AddPrimaryKeyOperation" /> as part of a <see cref="CreateTableOperation" />. /// </summary> /// <param name="addPrimaryKeyOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void GenerateInline(AddPrimaryKeyOperation addPrimaryKeyOperation, IndentedTextWriter writer) { Check.NotNull(writer, "writer"); if (addPrimaryKeyOperation != null) { writer.WriteLine(" _"); writer.Write(".PrimaryKey("); Generate(addPrimaryKeyOperation.Columns, writer); if (!addPrimaryKeyOperation.HasDefaultName) { writer.Write(", name := "); writer.Write(Quote(addPrimaryKeyOperation.Name)); } if (!addPrimaryKeyOperation.IsClustered) { writer.Write(", clustered := False"); } writer.Write(")"); } }
/// <summary> /// Generates code to perform a <see cref="CreateTableOperation" />. /// </summary> /// <param name="createTableOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(CreateTableOperation createTableOperation, IndentedTextWriter writer) { Check.NotNull(createTableOperation, "createTableOperation"); Check.NotNull(writer, "writer"); writer.WriteLine("CreateTable("); writer.Indent++; writer.Write(Quote(createTableOperation.Name)); writer.WriteLine(","); writer.WriteLine("Function(c) New With"); writer.Indent++; writer.WriteLine("{"); writer.Indent++; var columnCount = createTableOperation.Columns.Count(); createTableOperation.Columns.Each( (c, i) => { var scrubbedName = ScrubName(c.Name); writer.Write("."); writer.Write(scrubbedName); writer.Write(" ="); Generate(c, writer, !string.Equals(c.Name, scrubbedName, StringComparison.Ordinal)); if (i < columnCount - 1) { writer.Write(","); } writer.WriteLine(); }); writer.Indent--; writer.Write("}"); writer.Indent--; if (createTableOperation.Annotations.Any()) { writer.WriteLine(","); writer.Write("annotations := "); GenerateAnnotations(createTableOperation.Annotations, writer); } writer.Write(")"); GenerateInline(createTableOperation.PrimaryKey, writer); _newTableForeignKeys .Where(t => t.Item1 == createTableOperation) .Each(t => GenerateInline(t.Item2, writer)); _newTableIndexes .Where(t => t.Item1 == createTableOperation) .Each(t => GenerateInline(t.Item2, writer)); writer.WriteLine(); writer.Indent--; writer.WriteLine(); }
/// <summary> /// Generates code to specify a set of column names using a lambda expression. /// </summary> /// <param name="columns"> The columns to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(IEnumerable<string> columns, IndentedTextWriter writer) { Check.NotNull(columns, "columns"); Check.NotNull(writer, "writer"); writer.Write("Function(t) "); if (columns.Count() == 1) { writer.Write("t." + ScrubName(columns.Single())); } else { writer.Write("New With { " + columns.Join(c => "t." + ScrubName(c)) + " }"); } }
/// <summary> /// Generates code to perform an <see cref="AddForeignKeyOperation" />. /// </summary> /// <param name="addForeignKeyOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(AddForeignKeyOperation addForeignKeyOperation, IndentedTextWriter writer) { Check.NotNull(addForeignKeyOperation, "addForeignKeyOperation"); Check.NotNull(writer, "writer"); writer.Write("AddForeignKey("); writer.Write(Quote(addForeignKeyOperation.DependentTable)); writer.Write(", "); var compositeKey = addForeignKeyOperation.DependentColumns.Count() > 1; if (compositeKey) { writer.Write("New String() { "); } writer.Write(addForeignKeyOperation.DependentColumns.Join(Quote)); if (compositeKey) { writer.Write(" }"); } writer.Write(", "); writer.Write(Quote(addForeignKeyOperation.PrincipalTable)); if (addForeignKeyOperation.PrincipalColumns.Any()) { writer.Write(", "); if (compositeKey) { writer.Write("New String() { "); } writer.Write(addForeignKeyOperation.PrincipalColumns.Join(Quote)); if (compositeKey) { writer.Write(" }"); } } if (addForeignKeyOperation.CascadeDelete) { writer.Write(", cascadeDelete := True"); } if (!addForeignKeyOperation.HasDefaultName) { writer.Write(", name := "); writer.Write(Quote(addForeignKeyOperation.Name)); } writer.WriteLine(")"); }
protected virtual string Generate( IEnumerable<MigrationOperation> operations, string @namespace, string className) { Check.NotNull(operations, "operations"); Check.NotEmpty(className, "className"); using (var stringWriter = new StringWriter(CultureInfo.InvariantCulture)) { using (var writer = new IndentedTextWriter(stringWriter)) { WriteClassStart( @namespace, className, writer, "Inherits DbMigration", designer: false, namespaces: GetNamespaces(operations)); writer.WriteLine("Public Overrides Sub Up()"); writer.Indent++; operations .Except(_newTableForeignKeys.Select(t => t.Item2)) .Except(_newTableIndexes.Select(t => t.Item2)) .Each<dynamic>(o => Generate(o, writer)); writer.Indent--; writer.WriteLine("End Sub"); writer.WriteLine(); writer.WriteLine("Public Overrides Sub Down()"); writer.Indent++; operations = operations .Select(o => o.Inverse) .Where(o => o != null) .Reverse(); var hasUnsupportedOperations = operations.Any(o => o is NotSupportedOperation); operations .Where(o => !(o is NotSupportedOperation)) .Each<dynamic>(o => Generate(o, writer)); if (hasUnsupportedOperations) { writer.Write("Throw New NotSupportedException("); writer.Write(Generate(Strings.ScaffoldSprocInDownNotSupported)); writer.WriteLine(")"); } writer.Indent--; writer.WriteLine("End Sub"); WriteClassEnd(@namespace, writer); } return stringWriter.ToString(); } }
/// <summary> /// Generates code to perform a <see cref="CreateIndexOperation" /> as part of a <see cref="CreateTableOperation" />. /// </summary> /// <param name="createIndexOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void GenerateInline(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { Check.NotNull(createIndexOperation, "createIndexOperation"); Check.NotNull(writer, "writer"); writer.WriteLine(" _"); writer.Write(".Index("); Generate(createIndexOperation.Columns, writer); WriteIndexParameters(createIndexOperation, writer); writer.Write(")"); }
/// <summary> /// Generates code to perform an <see cref="AddForeignKeyOperation" /> as part of a <see cref="CreateTableOperation" />. /// </summary> /// <param name="addForeignKeyOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void GenerateInline(AddForeignKeyOperation addForeignKeyOperation, IndentedTextWriter writer) { Check.NotNull(addForeignKeyOperation, "addForeignKeyOperation"); Check.NotNull(writer, "writer"); writer.WriteLine(" _"); writer.Write(".ForeignKey(" + Quote(addForeignKeyOperation.PrincipalTable) + ", "); Generate(addForeignKeyOperation.DependentColumns, writer); if (addForeignKeyOperation.CascadeDelete) { writer.Write(", cascadeDelete := True"); } writer.Write(")"); }
protected override void Generate(AddForeignKeyOperation addForeignKeyOperation, IndentedTextWriter writer) { addForeignKeyOperation.PrincipalTable = TrimSchemaPrefix(addForeignKeyOperation.PrincipalTable); addForeignKeyOperation.DependentTable = TrimSchemaPrefix(addForeignKeyOperation.DependentTable); base.Generate(addForeignKeyOperation, writer); }
/// <summary>Generates code to perform a <see cref="T:System.Data.Entity.Migrations.Model.DropProcedureOperation" />.</summary> /// <param name="dropProcedureOperation">The operation to generate code for.</param> /// <param name="writer">Text writer to add the generated code to.</param> protected virtual void Generate(DropProcedureOperation dropProcedureOperation, IndentedTextWriter writer) { Check.NotNull(dropProcedureOperation, "dropProcedureOperation"); Check.NotNull(writer, "writer"); writer.Write("DropStoredProcedure("); writer.Write(Quote(dropProcedureOperation.Name)); writer.WriteLine(")"); }
protected override void Generate(AddPrimaryKeyOperation addPrimaryKeyOperation, IndentedTextWriter writer) { addPrimaryKeyOperation.Table = TrimSchemaPrefix(addPrimaryKeyOperation.Table); base.Generate(addPrimaryKeyOperation, writer); }
/// <summary> /// Generates code for an <see cref="AlterTableOperation"/>. /// </summary> /// <param name="alterTableOperation">The operation for which code should be generated.</param> /// <param name="writer">The writer to which generated code should be written.</param> protected internal virtual void Generate(AlterTableOperation alterTableOperation, IndentedTextWriter writer) { Check.NotNull(alterTableOperation, "alterTableOperation"); Check.NotNull(writer, "writer"); writer.WriteLine("AlterTableAnnotations("); writer.Indent++; writer.Write(Quote(alterTableOperation.Name)); writer.WriteLine(","); writer.WriteLine("Function(c) New With"); writer.Indent++; writer.WriteLine("{"); writer.Indent++; var columnCount = alterTableOperation.Columns.Count(); alterTableOperation.Columns.Each( (c, i) => { var scrubbedName = ScrubName(c.Name); writer.Write("."); writer.Write(scrubbedName); writer.Write(" ="); Generate(c, writer, !string.Equals(c.Name, scrubbedName, StringComparison.Ordinal)); if (i < columnCount - 1) { writer.Write(","); } writer.WriteLine(); }); writer.Indent--; writer.Write("}"); writer.Indent--; if (alterTableOperation.Annotations.Any()) { writer.WriteLine(","); writer.Write("annotations := "); GenerateAnnotations(alterTableOperation.Annotations, writer); } writer.Write(")"); writer.WriteLine(); writer.Indent--; writer.WriteLine(); }
protected override void Generate(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { createIndexOperation.Table = TrimSchemaPrefix(createIndexOperation.Table); base.Generate(createIndexOperation, writer); }
/// <summary> /// Generates code to perform an <see cref="AddPrimaryKeyOperation" />. /// </summary> /// <param name="addPrimaryKeyOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(AddPrimaryKeyOperation addPrimaryKeyOperation, IndentedTextWriter writer) { Check.NotNull(addPrimaryKeyOperation, "addPrimaryKeyOperation"); Check.NotNull(writer, "writer"); writer.Write("AddPrimaryKey("); writer.Write(Quote(addPrimaryKeyOperation.Table)); writer.Write(", "); var compositeIndex = addPrimaryKeyOperation.Columns.Count() > 1; if (compositeIndex) { writer.Write("New String() { "); } writer.Write(addPrimaryKeyOperation.Columns.Join(Quote)); if (compositeIndex) { writer.Write(" }"); } if (!addPrimaryKeyOperation.HasDefaultName) { writer.Write(", name := "); writer.Write(Quote(addPrimaryKeyOperation.Name)); } if (!addPrimaryKeyOperation.IsClustered) { writer.Write(", clustered := False"); } writer.WriteLine(")"); }
/// <summary> /// Generates code to perform a <see cref="DropForeignKeyOperation" />. /// </summary> /// <param name="dropForeignKeyOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(DropForeignKeyOperation dropForeignKeyOperation, IndentedTextWriter writer) { Check.NotNull(dropForeignKeyOperation, "dropForeignKeyOperation"); Check.NotNull(writer, "writer"); writer.Write("DropForeignKey("); writer.Write(Quote(dropForeignKeyOperation.DependentTable)); writer.Write(", "); if (!dropForeignKeyOperation.HasDefaultName) { writer.Write(Quote(dropForeignKeyOperation.Name)); } else { var compositeKey = dropForeignKeyOperation.DependentColumns.Count() > 1; if (compositeKey) { writer.Write("New String() { "); } writer.Write(dropForeignKeyOperation.DependentColumns.Join(Quote)); if (compositeKey) { writer.Write(" }"); } writer.Write(", "); writer.Write(Quote(dropForeignKeyOperation.PrincipalTable)); } writer.WriteLine(")"); }
protected override void Generate(CreateTableOperation createTableOperation, IndentedTextWriter writer) { var create = new CreateTableOperation(TrimSchemaPrefix(createTableOperation.Name)); foreach (var item in createTableOperation.Columns) create.Columns.Add(item); create.PrimaryKey = createTableOperation.PrimaryKey; base.Generate(create, writer); }