Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1428,6 +1428,31 @@ private enum ParsingState
/// <param name="builder">The command builder to use to build the commands.</param>
protected override void Generate(SqlOperation operation, IModel? model, MigrationCommandListBuilder builder)
{
if (Options.HasFlag(MigrationsSqlGenerationOptions.Script))
{
var scriptLines = operation.Sql
.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);

var builderSql = new StringBuilder();

foreach (var line in scriptLines)
{
builderSql.AppendLine(line);

var trimmed = line.Trim();

if (trimmed.StartsWith("GO", StringComparison.OrdinalIgnoreCase)
&& (trimmed.Length == 2 || char.IsWhiteSpace(trimmed[2])))
{
builderSql.AppendLine();
}
}

builder.Append(builderSql.ToString());
EndStatement(builder, operation.SuppressTransaction);
return;
}

var preBatched = operation.Sql
.Replace("\\\n", "")
.Replace("\\\r\n", "")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1798,6 +1798,31 @@ public void Invalid_column_type_for_unmappable_clr_type_throws_meaningful_except
Assert.Equal(RelationalStrings.UnsupportedTypeForColumn("TestTable", "TestColumn", "FileStream"), ex.Message);
}

[ConditionalFact]
public virtual void Script_migration_does_not_treat_GO_as_batch_delimiter()
{
var sqlInput =
"CREATE TABLE T1 (Id int);" + Environment.NewLine +
"GO" + Environment.NewLine +
"INSERT INTO T1 VALUES (1);" + Environment.NewLine +
"GO 2" + Environment.NewLine +
"INSERT INTO T1 VALUES (2);";

Generate(
modelBuilder => { },
migrationBuilder => migrationBuilder.Sql(sqlInput),
options: MigrationsSqlGenerationOptions.Script);

var expected =
"CREATE TABLE T1 (Id int);" + Environment.NewLine +
"GO" + Environment.NewLine + Environment.NewLine +
"INSERT INTO T1 VALUES (1);" + Environment.NewLine +
"GO 2" + Environment.NewLine + Environment.NewLine +
"INSERT INTO T1 VALUES (2);";

AssertSql(expected);
}

private static void CreateGotModel(ModelBuilder b)
=> b.HasDefaultSchema("dbo").Entity(
"Person", pb =>
Expand Down