diff --git a/migration-engine/connectors/sql-migration-connector/src/sql_schema_differ/sql_schema_differ_flavour/postgres.rs b/migration-engine/connectors/sql-migration-connector/src/sql_schema_differ/sql_schema_differ_flavour/postgres.rs index adac95313b73..8ad23ee9f15e 100644 --- a/migration-engine/connectors/sql-migration-connector/src/sql_schema_differ/sql_schema_differ_flavour/postgres.rs +++ b/migration-engine/connectors/sql-migration-connector/src/sql_schema_differ/sql_schema_differ_flavour/postgres.rs @@ -54,7 +54,10 @@ impl SqlSchemaDifferFlavour for PostgresFlavour { fn column_type_change(&self, columns: Pair>) -> Option { // Handle the enum cases first. - match columns.map(|col| col.column_type_family().as_enum()).into_tuple() { + match columns + .map(|col| col.column_type_family_as_enum().map(|e| e.name())) + .into_tuple() + { (Some(previous_enum), Some(next_enum)) if previous_enum == next_enum => return None, (Some(_), Some(_)) => return Some(ColumnTypeChange::NotCastable), (None, Some(_)) | (Some(_), None) => return Some(ColumnTypeChange::NotCastable), diff --git a/migration-engine/migration-engine-tests/tests/single_migration_tests/mysql/enums/enum_fields.prisma b/migration-engine/migration-engine-tests/tests/single_migration_tests/mysql/enums/enum_fields.prisma new file mode 100644 index 000000000000..04286a0151b1 --- /dev/null +++ b/migration-engine/migration-engine-tests/tests/single_migration_tests/mysql/enums/enum_fields.prisma @@ -0,0 +1,32 @@ +// tags=mysql + +datasource mydb { + provider = "mysql" + url = env("TEST_DATABASE_URL") +} + +model MyTable { + id Int @id + k Kind? @default(error) + r Result @default(succeeded) +} + +enum Result { + succeeded + failed +} + +enum Kind { + info + warning + error +} +// Expected Migration: +// -- CreateTable +// CREATE TABLE `MyTable` ( +// `id` INTEGER NOT NULL, +// `k` ENUM('info', 'warning', 'error') NULL DEFAULT 'error', +// `r` ENUM('succeeded', 'failed') NOT NULL DEFAULT 'succeeded', +// +// PRIMARY KEY (`id`) +// ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/migration-engine/migration-engine-tests/tests/single_migration_tests/postgres/enums/enum_fields.prisma b/migration-engine/migration-engine-tests/tests/single_migration_tests/postgres/enums/enum_fields.prisma new file mode 100644 index 000000000000..4285e0eb71e8 --- /dev/null +++ b/migration-engine/migration-engine-tests/tests/single_migration_tests/postgres/enums/enum_fields.prisma @@ -0,0 +1,51 @@ +// tags=postgres +// exclude=cockroachdb + +datasource mydb { + provider = "postgresql" + url = env("TEST_DATABASE_URL") +} + +model MyTable { + id Int @id + a Activity @default(SLEEPING) + k Kind? @default(error) + r Result @default(succeeded) +} + +enum Result { + succeeded + failed +} + +enum Activity { + DANCING + SLEEPING + READING +} + +enum Kind { + info + warning + error +} + +// Expected Migration: +// -- CreateEnum +// CREATE TYPE "Result" AS ENUM ('succeeded', 'failed'); +// +// -- CreateEnum +// CREATE TYPE "Activity" AS ENUM ('DANCING', 'SLEEPING', 'READING'); +// +// -- CreateEnum +// CREATE TYPE "Kind" AS ENUM ('info', 'warning', 'error'); +// +// -- CreateTable +// CREATE TABLE "MyTable" ( +// "id" INTEGER NOT NULL, +// "a" "Activity" NOT NULL DEFAULT 'SLEEPING', +// "k" "Kind" DEFAULT 'error', +// "r" "Result" NOT NULL DEFAULT 'succeeded', +// +// CONSTRAINT "MyTable_pkey" PRIMARY KEY ("id") +// );