diff --git a/internal/db/schema/internal/edition/edition.go b/internal/db/schema/internal/edition/edition.go index ba84d5c9f..f4a717281 100644 --- a/internal/db/schema/internal/edition/edition.go +++ b/internal/db/schema/internal/edition/edition.go @@ -121,6 +121,9 @@ func New(name string, dialect Dialect, m embed.FS, priority int) Edition { } contents = strings.TrimSpace(contents) + if _, exists := migrations[fullV]; exists { + panic(fmt.Sprintf("migration file for version %d already exists", fullV)) + } migrations[fullV] = []byte(contents) return nil diff --git a/internal/db/schema/internal/edition/edition_test.go b/internal/db/schema/internal/edition/edition_test.go index d0e6810f4..d28a7cffc 100644 --- a/internal/db/schema/internal/edition/edition_test.go +++ b/internal/db/schema/internal/edition/edition_test.go @@ -74,6 +74,8 @@ var ( noMinorVersion embed.FS //go:embed testdata/invalid/no-major-version noMajorVersion embed.FS + //go:embed testdata/invalid/duplicate-versions + duplicateVersions embed.FS ) func TestNewPanics(t *testing.T) { @@ -103,6 +105,10 @@ func TestNewPanics(t *testing.T) { "noMajorVersion", noMajorVersion, }, + { + "duplicateVersions", + duplicateVersions, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/internal/db/schema/internal/edition/testdata/invalid/duplicate-versions/0/01_initial.up.sql b/internal/db/schema/internal/edition/testdata/invalid/duplicate-versions/0/01_initial.up.sql new file mode 100644 index 000000000..cda8bcced --- /dev/null +++ b/internal/db/schema/internal/edition/testdata/invalid/duplicate-versions/0/01_initial.up.sql @@ -0,0 +1,5 @@ +begin; + create table one ( + id bigint primary key + ); +commit; diff --git a/internal/db/schema/internal/edition/testdata/invalid/duplicate-versions/0/01_initial_also.up.sql b/internal/db/schema/internal/edition/testdata/invalid/duplicate-versions/0/01_initial_also.up.sql new file mode 100644 index 000000000..90f0b5fbd --- /dev/null +++ b/internal/db/schema/internal/edition/testdata/invalid/duplicate-versions/0/01_initial_also.up.sql @@ -0,0 +1,5 @@ +begin; + create table one_also ( + id bigint primary key + ); +commit;