Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update prisma monorepo to v2.26.0 (minor) #6027

Merged
merged 3 commits into from
Jul 4, 2021
Merged

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jun 29, 2021

WhiteSource Renovate

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@prisma/client (source) 2.25.0 -> 2.26.0 age adoption passing confidence
@prisma/migrate (source) 2.25.0 -> 2.26.0 age adoption passing confidence
@prisma/sdk (source) 2.25.0 -> 2.26.0 age adoption passing confidence
prisma (source) 2.25.0 -> 2.26.0 age adoption passing confidence

Release Notes

prisma/prisma

v2.26.0

Compare Source

Today, we are excited to share the 2.26.0 stable release 🎉

🌟 Help us spread the word about Prisma by starring the repo or tweeting about the release. 🌟 

Major improvements & new features
Referential Actions now enable cascading deletes and updates (Preview)

In this release we are introducing a new feature in Preview which enables fine-grained control over referential actions ON DELETE and ON UPDATE for the foreign keys supporting relations in Prisma models.

Current behavior

Until now, Prisma created a foreign key for each relation between Prisma models with the following defaults: ON DELETE CASCADE ON UPDATE CASCADE. In addition, when invoking the delete() or deleteAll() methods, Prisma Client performs runtime checks and will prevent the deletion of records on required relations if there are related objects referencing it, effectively preventing the cascade delete behavior. When using raw SQL queries for deletion, Prisma Client won't perform any checks, and deleting a referenced object will effectively cause the deletion of the referencing objects.

Example:

model User {
  id    String @​id
  posts Post[]
}

model Post {
  id       String @​id
  authorId String
  author   User   @​relation(fields: [authorId])
}

prisma.user.delete(...) and prisma.user.deleteAll() will fail if the user has posts.

Using raw SQL, e.g. using $queryRaw() to delete the user will trigger the deletion of its posts.

New behavior

⚠️ Turning on this feature could, when using delete() and deleteMany() operations, delete more data than before under certain circumstances. Make sure you read down below to understand why and anticipate these changes.

The feature can be enabled by setting the preview feature flag referentialActions in the generator block of Prisma Client in your Prisma schema file:

generator client {
  provider = "prisma-client-js"
  previewFeatures = ["referentialActions"]
}

With the feature enabled, the behavior is now the following:

  • It's possible to choose specific referential actions for the foreign keys in relations. Prisma Migrate, prisma db push, and introspection will set these in the database schema, e.g. @relation(... onDelete: SetNull) will set translate to ON DELETE SET NULL on the corresponding foreign key. See Syntax section below.
  • When the onDelete or onUpdate attributes in @relation are not present, default values are used:
    • ON DELETE RESTRICT (NO ACTION on SQL Server) for required relations
    • ON DELETE SET NULL for optional relations
    • ON UPDATE CASCADE for all relations regardless if optional or required.
  • Prisma Migrate, prisma db push, and introspection will rely on the syntax and default values above to keep the referential actions between Prisma schema and database schema in sync.
  • Prisma Client no longer performs any checks before deleting records when invoking delete() or deleteAll() methods. Deleting referenced objects will succeed or not depending on the underlying foreign keys of relations, e.g. by default deletion will be prevented by the database because it's set to ON DELETE RESTRICT, but will succeed if set to ON DELETE CASCADE.
  • Upgrade path: If developers don't specify custom onDelete or onUpdate attributes in the Prisma schema, the next time the database is updated with Prisma Migrate or prisma db push, the database schema will be updated to use the default values on all foreign keys, ON DELETE RESTRICT ON UPDATE CASCADE (ON DELETE NO ACTION ON UPDATE CASCADE on SQL Server).
    Please note that until then, if the database schema is managed using Prisma Migrate or prisma db push, the existing defaults are probably in place (ON DELETE CASCADE ON UPDATE CASCADE), and this could lead to deletion of records in conditions where a deletion was previously prevented by Prisma Client until the foreign key constraints are updated.
Syntax

The semantics of onDelete and onUpdate are almost exactly how SQL expresses ON UPDATE and ON DELETE. For the example below:

  • If the related author (User) of a Post is deleted (onDelete), delete all Post rows that are referencing the deleted User (Cascade).
  • If the id field of the related User is updated, also update authorId of all Posts that reference that User.
model User {
  id    String @​id
  posts Post[]
}

model Post {
  id       String @​id
  authorId String
  author   User   @​relation(fields: [authorId], onDelete: Cascade, onUpdate: Cascade)
}

Possible keywords for onDelete and onUpdate are: Cascade, Restrict (except SQL Server), NoAction, SetNull, SetDefault.

If you run into any questions or have any feedback, we're available in this issue.

Limitations
  • Certain combinations of referential actions and required/optional relations are incompatible. Example: Using SetNull on a required relation will lead to database errors when deleting referenced records because the non-nullable constraint would be violated.
  • Referential actions can not be specified on relations in implicit many-to-many relations. This limitation can be worked around by switching to explicit many-to-many relations and specifying the referential actions on the relations in the relations table.
prisma init now accepts a --datasource-provider argument

The prisma init command now accepts a --datasource-provider argument that lets you configure the default provider for the initially generated datasource block in your Prisma schema. The possible values for this argument are equivalent to the allowed values for the provider field on datasource blocks:

  • postgresql (default)
  • mysql
  • sqlite
  • sqlserver (Preview, needs the microsoftSqlServer preview feature flag)

Here's an example that shows how to configure the initial Prisma schema skeleton with a SQLite database:

npx prisma init --datasource-provider sqlite
Node-API Improvements

The Prisma Client currently communicates to Prisma's Query Engine over either HTTP or Unix domain sockets. After some experimentation, we realized we can improve this communication overhead by using Node-API, which provides direct memory access across processes.

We've been working the last couple of weeks to get ready to make Node-API the default way we communicate with the Query Engine. To prepare for this change, we fixed a bunch of bugs and we'd love for you to give it another try:

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["nApi"]
}

Right now we're still compiling benchmarks, but you should see a nice speed boost by opting into Node-API. You can reach us in this issue if you run into anything!

Fixes and improvements
Prisma Client
Prisma Migrate
Prisma
Credits

Huge thanks to @​B2o5T for helping!

🌎 Prisma Day is happening today!

Prisma Day is a two-day event of talks and workshops by members of the Prisma community, on modern application development and databases. It's taking place June 29-30th and is entirely online.

  • June 29th: Workshops
  • June 30th: Talks

We look forward to seeing you there!

📺 Join us for another "What's new in Prisma" livestream

Learn about the latest release and other news from the Prisma community by joining us for another "What's new in Prisma" livestream.

The stream takes place on Youtube on Thursday, July 01 at 5pm Berlin | 8am San Francisco.


Configuration

📅 Schedule: "before 7am on Tuesday,before 7am on Wednesday" in timezone Australia/Sydney.

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Renovate will not automatically rebase this PR, because other commits have been found.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box.

This PR has been generated by WhiteSource Renovate. View repository job log here.

@vercel
Copy link

vercel bot commented Jun 29, 2021

This pull request is being automatically deployed with Vercel (learn more).
To see the status of your deployment, click below or on the icon next to each commit.

🔍 Inspect: https://vercel.com/keystonejs/keystone-next-docs/BEfmig9iHkr5st9zV9qnBCBnHtSt
✅ Preview: https://keystone-next-docs-git-renovate-prisma-monorepo-keystonejs.vercel.app

@vercel vercel bot temporarily deployed to Preview June 29, 2021 14:33 Inactive
@changeset-bot
Copy link

changeset-bot bot commented Jun 29, 2021

🦋 Changeset detected

Latest commit: b0fd589

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 30 packages
Name Type
@keystone-next/fields Major
@keystone-next/keystone Major
@keystone-next/types Major
@keystone-next/benchmarks-legacy Patch
@keystone-next/example-blog Patch
@keystone-next/example-default-values Patch
@keystone-next/example-document-field Patch
@keystone-next/example-extend-graphql-schema Patch
@keystone-next/example-json-field Patch
@keystone-next/example-task-manager Patch
@keystone-next/example-testing Patch
@keystone-next/example-virtual-field Patch
@keystone-next/example-with-auth Patch
@keystone-next/example-assets-cloud Patch
@keystone-next/example-assets-local Patch
@keystone-next/example-auth Patch
@keystone-next/examples-app-basic Patch
@keystone-next/example-ecommerce Patch
@keystone-next/example-embedded-nextjs Patch
keystone-next-app Patch
@keystone-next/example-playground Patch
@keystone-next/example-roles Patch
@keystone-next/example-sandbox Patch
@keystone-next/auth Major
@keystone-next/cloudinary Patch
@keystone-next/fields-document Patch
@keystone-next/testing Patch
@keystone-next/api-tests-legacy Patch
@keystone-next/admin-ui-utils Patch
@keystone-next/utils Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@codesandbox-ci
Copy link

codesandbox-ci bot commented Jun 29, 2021

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

@renovate renovate bot force-pushed the renovate/prisma-monorepo branch from ee687e2 to 7fc74a5 Compare June 29, 2021 23:25
@vercel vercel bot temporarily deployed to Preview June 29, 2021 23:25 Inactive
@vercel vercel bot temporarily deployed to Preview June 29, 2021 23:46 Inactive
@renovate renovate bot force-pushed the renovate/prisma-monorepo branch from 1445e19 to 5f8e377 Compare July 4, 2021 23:07
@vercel vercel bot temporarily deployed to Preview July 4, 2021 23:07 Inactive
@vercel vercel bot temporarily deployed to Preview July 4, 2021 23:12 Inactive
@vercel vercel bot temporarily deployed to Preview July 4, 2021 23:21 Inactive
Copy link
Contributor

@timleslie timleslie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@timleslie timleslie merged commit 38b78f2 into master Jul 4, 2021
@timleslie timleslie deleted the renovate/prisma-monorepo branch July 4, 2021 23:27
Nikitoring pushed a commit to Nikitoring/keystone that referenced this pull request Sep 14, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants