public void Append_line_in_middle_when_no_new_line() { var indentedStringBuilder = new IndentedStringBuilder(); indentedStringBuilder.AppendLine("Foo"); using (indentedStringBuilder.Indent()) { indentedStringBuilder.AppendLine("Foo"); } Assert.Equal($"Foo{_nl} Foo{_nl}", indentedStringBuilder.ToString()); }
public void Append_line_at_start_with_indent() { var indentedStringBuilder = new IndentedStringBuilder(); using (indentedStringBuilder.Indent()) { indentedStringBuilder.AppendLine("Foo"); } Assert.Equal(" Foo" + _nl, indentedStringBuilder.ToString()); }
public bool TryPrintConstant(object value, IndentedStringBuilder stringBuilder) { var shaperCommandContext = value as ShaperCommandContext; if (shaperCommandContext != null) { stringBuilder.AppendLine("SelectExpression: "); stringBuilder.IncrementIndent(); var querySqlGenerator = shaperCommandContext.QuerySqlGeneratorFactory(); var sql = querySqlGenerator.GenerateSql(new Dictionary<string, object>()).CommandText; var lines = sql.Split(new[] { Environment.NewLine }, StringSplitOptions.None); foreach (var line in lines) { stringBuilder.AppendLine(line); } stringBuilder.DecrementIndent(); return true; } return false; }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual string WriteCode( [NotNull] EntityConfiguration entityConfiguration) { Check.NotNull(entityConfiguration, nameof(entityConfiguration)); _entity = entityConfiguration; _sb = new IndentedStringBuilder(); _sb.AppendLine("using System;"); _sb.AppendLine("using System.Collections.Generic;"); if (!_entity.ModelConfiguration.CustomConfiguration.UseFluentApiOnly) { _sb.AppendLine("using System.ComponentModel.DataAnnotations;"); _sb.AppendLine("using System.ComponentModel.DataAnnotations.Schema;"); } foreach (var ns in _entity.EntityType.GetProperties() .Select(p => p.ClrType.Namespace) .Where(ns => ns != "System" && ns != "System.Collections.Generic") .Distinct()) { _sb .Append("using ") .Append(ns) .AppendLine(';'); } _sb.AppendLine(); _sb.AppendLine("namespace " + _entity.ModelConfiguration.Namespace()); _sb.AppendLine("{"); using (_sb.Indent()) { AddClass(); } _sb.AppendLine("}"); return _sb.ToString(); }
private static void SerializeEnumerable(IEnumerable en, IndentedStringBuilder sb) { sb.AppendLine("["); using (sb.Indent()) { var e = en.GetEnumerator(); var next = e.MoveNext(); while (next) { SerializeObject(e.Current, sb); if ((next = e.MoveNext())) { sb.AppendLine(","); } else { sb.AppendLine(); } } } sb.Append("]"); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual string WriteCode( [NotNull] ModelConfiguration modelConfiguration) { Check.NotNull(modelConfiguration, nameof(modelConfiguration)); _model = modelConfiguration; _sb = new IndentedStringBuilder(); _sb.AppendLine("using System;"); // Guid default values require new Guid() which requires this using _sb.AppendLine("using Microsoft.EntityFrameworkCore;"); _sb.AppendLine("using Microsoft.EntityFrameworkCore.Metadata;"); _sb.AppendLine(); _sb.AppendLine("namespace " + _model.Namespace()); _sb.AppendLine("{"); using (_sb.Indent()) { AddClass(); } _sb.Append("}"); return _sb.ToString(); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual string GenerateScript( string fromMigration = null, string toMigration = null, bool idempotent = false) { var skippedMigrations = _migrationsAssembly.Migrations .Where(t => string.Compare(t.Key, fromMigration, StringComparison.OrdinalIgnoreCase) < 0) .Select(t => t.Key); IReadOnlyList<Migration> migrationsToApply, migrationsToRevert; PopulateMigrations( skippedMigrations, toMigration, out migrationsToApply, out migrationsToRevert); var builder = new IndentedStringBuilder(); if (fromMigration == Migration.InitialDatabase || string.IsNullOrEmpty(fromMigration)) { builder.AppendLine(_historyRepository.GetCreateIfNotExistsScript()); builder.Append(_sqlGenerationHelper.BatchTerminator); } for (var i = 0; i < migrationsToRevert.Count; i++) { var migration = migrationsToRevert[i]; var previousMigration = i != migrationsToRevert.Count - 1 ? migrationsToRevert[i + 1] : null; _logger.LogDebug(RelationalStrings.GeneratingDown(migration.GetId())); foreach (var command in GenerateDownSql(migration, previousMigration)) { if (idempotent) { builder.AppendLine(_historyRepository.GetBeginIfExistsScript(migration.GetId())); using (builder.Indent()) { builder.AppendLines(command.CommandText); } builder.AppendLine(_historyRepository.GetEndIfScript()); } else { builder.AppendLine(command.CommandText); } builder.Append(_sqlGenerationHelper.BatchTerminator); } } foreach (var migration in migrationsToApply) { _logger.LogDebug(RelationalStrings.GeneratingUp(migration.GetId())); foreach (var command in GenerateUpSql(migration)) { if (idempotent) { builder.AppendLine(_historyRepository.GetBeginIfNotExistsScript(migration.GetId())); using (builder.Indent()) { builder.AppendLines(command.CommandText); } builder.AppendLine(_historyRepository.GetEndIfScript()); } else { builder.AppendLine(command.CommandText); } builder.Append(_sqlGenerationHelper.BatchTerminator); } } return builder.ToString(); }
public void Append_line_with_indent_only() { var indentedStringBuilder = new IndentedStringBuilder(); using (indentedStringBuilder.Indent()) { indentedStringBuilder.AppendLine(); } Assert.Equal(Environment.NewLine, indentedStringBuilder.ToString()); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public override string GetCreateIfNotExistsScript() { var builder = new IndentedStringBuilder(); builder.Append("IF OBJECT_ID(N'"); if (TableSchema != null) { builder .Append(SqlGenerationHelper.EscapeLiteral(TableSchema)) .Append("."); } builder .Append(SqlGenerationHelper.EscapeLiteral(TableName)) .AppendLine("') IS NULL") .AppendLine("BEGIN"); using (builder.Indent()) { builder.AppendLines(GetCreateScript()); } builder.AppendLine("END;"); return builder.ToString(); }
private static void SerializeClass(object obj, IndentedStringBuilder sb) { sb.AppendLine("{"); using (sb.Indent()) { var typeInfo = obj.GetType().GetTypeInfo(); var e = typeInfo.DeclaredProperties.GetEnumerator(); var next = e.MoveNext(); while (next) { var p = e.Current; SerializeString(p.Name, sb); sb.Append(": "); SerializeObject(p.GetValue(obj), sb); if ((next = e.MoveNext())) { sb.AppendLine(","); } else { sb.AppendLine(); } } } sb.Append("}"); }
public override string GenerateMigration( string migrationNamespace, string migrationName, IReadOnlyList<MigrationOperation> upOperations, IReadOnlyList<MigrationOperation> downOperations) { Check.NotEmpty(migrationNamespace, nameof(migrationNamespace)); Check.NotEmpty(migrationName, nameof(migrationName)); Check.NotNull(upOperations, nameof(upOperations)); Check.NotNull(downOperations, nameof(downOperations)); var builder = new IndentedStringBuilder(); var namespaces = new List<string> { "System", "System.Collections.Generic", "Microsoft.EntityFrameworkCore.Migrations" }; namespaces.AddRange(GetNamespaces(upOperations.Concat(downOperations))); foreach (var n in namespaces.Distinct()) { builder .Append("using ") .Append(n) .AppendLine(";"); } builder .AppendLine() .Append("namespace ").AppendLine(_code.Namespace(migrationNamespace)) .AppendLine("{"); using (builder.Indent()) { builder .Append("public partial class ").Append(_code.Identifier(migrationName)).AppendLine(" : Migration") .AppendLine("{"); using (builder.Indent()) { builder .AppendLine("protected override void Up(MigrationBuilder migrationBuilder)") .AppendLine("{"); using (builder.Indent()) { _operationGenerator.Generate("migrationBuilder", upOperations, builder); } builder .AppendLine() .AppendLine("}") .AppendLine() .AppendLine("protected override void Down(MigrationBuilder migrationBuilder)") .AppendLine("{"); using (builder.Indent()) { _operationGenerator.Generate("migrationBuilder", downOperations, builder); } builder .AppendLine() .AppendLine("}"); } builder.AppendLine("}"); } builder.AppendLine("}"); return builder.ToString(); }
public override string GenerateSnapshot( string modelSnapshotNamespace, Type contextType, string modelSnapshotName, IModel model) { Check.NotEmpty(modelSnapshotNamespace, nameof(modelSnapshotNamespace)); Check.NotNull(contextType, nameof(contextType)); Check.NotEmpty(modelSnapshotName, nameof(modelSnapshotName)); Check.NotNull(model, nameof(model)); var builder = new IndentedStringBuilder(); var namespaces = new List<string> { "System", "Microsoft.EntityFrameworkCore", "Microsoft.EntityFrameworkCore.Infrastructure", "Microsoft.EntityFrameworkCore.Metadata", "Microsoft.EntityFrameworkCore.Migrations", contextType.Namespace }; namespaces.AddRange(GetNamespaces(model)); foreach (var n in namespaces.Distinct()) { builder .Append("using ") .Append(n) .AppendLine(";"); } builder .AppendLine() .Append("namespace ").AppendLine(_code.Namespace(modelSnapshotNamespace)) .AppendLine("{"); using (builder.Indent()) { builder .Append("[DbContext(typeof(").Append(_code.Reference(contextType)).AppendLine("))]") .Append("partial class ").Append(_code.Identifier(modelSnapshotName)).AppendLine(" : ModelSnapshot") .AppendLine("{"); using (builder.Indent()) { builder .AppendLine("protected override void BuildModel(ModelBuilder modelBuilder)") .AppendLine("{"); using (builder.Indent()) { _modelGenerator.Generate("modelBuilder", model, builder); } builder.AppendLine("}"); } builder.AppendLine("}"); } builder.AppendLine("}"); return builder.ToString(); }
public override string GenerateMetadata( string migrationNamespace, Type contextType, string migrationName, string migrationId, IModel targetModel) { Check.NotEmpty(migrationNamespace, nameof(migrationNamespace)); Check.NotNull(contextType, nameof(contextType)); Check.NotEmpty(migrationName, nameof(migrationName)); Check.NotEmpty(migrationId, nameof(migrationId)); Check.NotNull(targetModel, nameof(targetModel)); var builder = new IndentedStringBuilder(); var namespaces = new List<string> { "System", "Microsoft.EntityFrameworkCore", "Microsoft.EntityFrameworkCore.Infrastructure", "Microsoft.EntityFrameworkCore.Metadata", "Microsoft.EntityFrameworkCore.Migrations", contextType.Namespace }; namespaces.AddRange(GetNamespaces(targetModel)); foreach (var n in namespaces.Distinct()) { builder .Append("using ") .Append(n) .AppendLine(";"); } builder .AppendLine() .Append("namespace ").AppendLine(_code.Namespace(migrationNamespace)) .AppendLine("{"); using (builder.Indent()) { builder .Append("[DbContext(typeof(").Append(_code.Reference(contextType)).AppendLine("))]") .Append("[Migration(").Append(_code.Literal(migrationId)).AppendLine(")]") .Append("partial class ").AppendLine(_code.Identifier(migrationName)) .AppendLine("{"); using (builder.Indent()) { builder .AppendLine("protected override void BuildTargetModel(ModelBuilder modelBuilder)") .AppendLine("{"); using (builder.Indent()) { // TODO: Optimize. This is repeated below _modelGenerator.Generate("modelBuilder", targetModel, builder); } builder.AppendLine("}"); } builder.AppendLine("}"); } builder.AppendLine("}"); return builder.ToString(); }