Skip to content

Commit dbdb211

Browse files
authored
feat: index column ordering in migrations (#665)
Support index column ordering in migrations. Credits: @sdahps Replaces #631 Fixex #630
1 parent 519f393 commit dbdb211

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

Google.Cloud.EntityFrameworkCore.Spanner.Tests/MigrationTests/GenerateCreateScriptTest.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ INTERLEAVE IN PARENT `Albums` ON DELETE NO ACTION
169169
170170
CREATE INDEX `AlbumsByAlbumTitle2` ON `Albums` (`Title`) STORING (`MarketingBudget`, `ReleaseDate`)
171171
172+
CREATE INDEX `AlbumsBySingerIdReleaseDateMarketingBudgetTitle` ON `Albums` (`SingerId`, `ReleaseDate` DESC, `MarketingBudget` DESC, `Title`)
173+
172174
CREATE INDEX `idx_concerts_singerId_startTime` ON `Concerts` (`SingerId`, `StartTime`),
173175
INTERLEAVE IN `Singers`
174176
@@ -282,6 +284,8 @@ INTERLEAVE IN PARENT `Albums` ON DELETE NO ACTION
282284
283285
CREATE INDEX `AlbumsByAlbumTitle2` ON `Albums` (`Title`) STORING (`MarketingBudget`, `ReleaseDate`)
284286
287+
CREATE INDEX `AlbumsBySingerIdReleaseDateMarketingBudgetTitle` ON `Albums` (`SingerId`, `ReleaseDate` DESC, `MarketingBudget` DESC, `Title`)
288+
285289
CREATE INDEX `idx_concerts_singerId_startTime` ON `Concerts` (`SingerId`, `StartTime`),
286290
INTERLEAVE IN `Singers`
287291
@@ -395,6 +399,8 @@ INTERLEAVE IN PARENT `Albums` ON DELETE NO ACTION
395399
396400
CREATE INDEX `AlbumsByAlbumTitle2` ON `Albums` (`Title`) STORING (`MarketingBudget`, `ReleaseDate`)
397401
402+
CREATE INDEX `AlbumsBySingerIdReleaseDateMarketingBudgetTitle` ON `Albums` (`SingerId`, `ReleaseDate` DESC, `MarketingBudget` DESC, `Title`)
403+
398404
CREATE INDEX `idx_concerts_singerId_startTime` ON `Concerts` (`SingerId`, `StartTime`),
399405
INTERLEAVE IN `Singers`
400406

Google.Cloud.EntityFrameworkCore.Spanner.Tests/MigrationTests/Models/SpannerMigrationSampleDbContext.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
5454
entity.HasIndex(e => e.Title)
5555
.HasDatabaseName("AlbumsByAlbumTitle2")
5656
.Storing(a => new { a.MarketingBudget, a.ReleaseDate });
57+
entity.HasIndex(e => new { e.SingerId, e.ReleaseDate, e.MarketingBudget, e.Title })
58+
.IsDescending(false, true, true, false)
59+
.HasDatabaseName("AlbumsBySingerIdReleaseDateMarketingBudgetTitle");
5760

5861
entity.HasOne(d => d.Singer)
5962
.WithMany(p => p.Albums)

Google.Cloud.EntityFrameworkCore.Spanner/Migrations/SpannerMigrationsSqlGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ protected override void Generate(
133133
.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name))
134134
.Append(" ON ")
135135
.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema))
136-
.Append(" (")
137-
.Append(ColumnList(operation.Columns))
138-
.Append(")");
136+
.Append(" (");
137+
GenerateIndexColumnList(operation, model, builder);
138+
builder.Append(")");
139139

140140
if (operation[SpannerAnnotationNames.Storing] is string[] storingColumns
141141
&& storingColumns.Length > 0)

0 commit comments

Comments
 (0)