prisma1-upgrade icon indicating copy to clipboard operation
prisma1-upgrade copied to clipboard

Last step of the prisma upgrade cli adds duplicates and unnecessary data

Open JackieJoo opened this issue 3 years ago • 1 comments

After the last step of the upgrade CLI (adding attributes and other data that is not caught by the introspection tool) the 'schema.prisma' file becomes invalid:

  • The field orderResultFormPipelineClientInfoId appears twice.
  • The attribute@map is present on the relation field.

As an example here is the model QuoteRow and how it looks in the prisma1 schema, prisma2 schema before the last step of the upgrade CLI, prisma2 schema after the last step of the upgrade CLI and a screenshot from the DB(Postgres).

  1. Prisma 1 schema
type QuoteRow {
  id: ID! @id @unique @identifier @always
  parentQuote: Quote!
  quoteResultFormPipelineClientInfo: FormPipelineClientInfo @relation(name: "QuoteRowQuoteResultFormPipelineClientInfo", onDelete: CASCADE, link: INLINE)
  orderResultFormPipelineClientInfo: FormPipelineClientInfo @relation(name: "QuoteRowOrderResultFormPipelineClientInfo", onDelete: CASCADE, link: INLINE)
  lastYieldPipelineBody: Json
  lastOfferingSubSlug: String!
  lastOfferingResult: Json!
  lastQuoteResult: Json!
}
  1. Prisma2 schema (before the last step of the upgrade CLI)
model QuoteRow {
  id                                                                                        String                  @id @default(cuid()) @db.VarChar(30)
  lastYieldPipelineBody                                                                     Json?
  lastOfferingSubSlug                                                                       String
  lastOfferingResult                                                                        Json
  lastQuoteResult                                                                           Json
  quoteResultFormPipelineClientInfo                                                         String?                 @db.VarChar(30)
  parentQuote                                                                               String?                 @db.VarChar(30)
  orderResultFormPipelineClientInfo                                                         String?                 @db.VarChar(30)
  FormPipelineClientInfo_FormPipelineClientInfoToQuoteRow_orderResultFormPipelineClientInfo FormPipelineClientInfo? @relation("FormPipelineClientInfoToQuoteRow_orderResultFormPipelineClientInfo", fields: [orderResultFormPipelineClientInfo], references: [id])
  Quote                                                                                     Quote?                  @relation(fields: [parentQuote], references: [id])
  FormPipelineClientInfo_FormPipelineClientInfoToQuoteRow_quoteResultFormPipelineClientInfo FormPipelineClientInfo? @relation("FormPipelineClientInfoToQuoteRow_quoteResultFormPipelineClientInfo", fields: [quoteResultFormPipelineClientInfo], references: [id])
  Offering                                                                                  Offering[]
}
  1. Prisma2 schema (after the last step of the upgrade CLI)
model QuoteRow {
  id                                  String                  @default(cuid()) @id @db.VarChar(30)
  lastYieldPipelineBody               Json?
  lastOfferingSubSlug                 String
  lastOfferingResult                  Json
  lastQuoteResult                     Json
  quoteResultFormPipelineClientInfoId String?                 @map("quoteResultFormPipelineClientInfo") @db.VarChar(30)
  parentQuoteId                       String?                 @map("parentQuote") @db.VarChar(30)
  orderResultFormPipelineClientInfoId String?                 @map("orderResultFormPipelineClientInfo") @db.VarChar(30)
  orderResultFormPipelineClientInfoId FormPipelineClientInfo? @map("orderResultFormPipelineClientInfo") @relation("FormPipelineClientInfoToQuoteRow_orderResultFormPipelineClientInfo", fields: [orderResultFormPipelineClientInfo], references: [id])
  parentQuote                         Quote?                  @relation(fields: [parentQuote], references: [id])
  orderResultFormPipelineClientInfo   FormPipelineClientInfo? @relation("FormPipelineClientInfoToQuoteRow_quoteResultFormPipelineClientInfo", fields: [quoteResultFormPipelineClientInfo], references: [id])
  Offering                            Offering[]
}
  1. Screenshot from the DB:
Screenshot 2021-05-30 at 16 40 46

It seems to me that this might be one of the valid variants:

model QuoteRow {
  id                                  String                  @default(cuid()) @id @db.VarChar(30)
  lastYieldPipelineBody               Json?
  lastOfferingSubSlug                 String
  lastOfferingResult                  Json
  lastQuoteResult                     Json
  orderResultFormPipelineClientInfoId String?                 @db.VarChar(30)
  quoteResultFormPipelineClientInfoId String?                 @db.VarChar(30)
  parentQuoteId                       String                  @db.VarChar(30)
  orderResultFormPipelineClientInfo   FormPipelineClientInfo? @relation("orderResultFormPipelineClientInfo", fields: [orderResultFormPipelineClientInfoId], references: [id])
  quoteResultFormPipelineClientInfo   FormPipelineClientInfo? @relation("quoteResultFormPipelineClientInfo", fields: [quoteResultFormPipelineClientInfoId], references: [id])
  parentQuote                         Quote                   @relation(fields: [parentQuoteId], references: [id])
  Offering                            Offering[]
}

JackieJoo avatar May 30 '21 13:05 JackieJoo

We forked the repo to deal with some of this (and fix some other issues). While I can't guarantee it's going to solve all your problems, it helps with many of them: https://github.com/reibus/prisma-upgrade

mattkindy avatar Jun 10 '22 18:06 mattkindy