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

chore(deps): update prisma monorepo to v5.5.2 #188

Merged
merged 1 commit into from
Oct 31, 2023

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Oct 16, 2023

Mend Renovate

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@prisma/client (source) 5.3.1 -> 5.5.2 age adoption passing confidence
prisma (source) 5.3.1 -> 5.5.2 age adoption passing confidence

Release Notes

prisma/prisma (@​prisma/client)

v5.5.2

Compare Source

Today, we are issuing the 5.5.2 patch release.

Fix in Prisma CLI

v5.5.1

Compare Source

Today, we are issuing the 5.5.1 patch release.

Fix in Prisma Client

v5.5.0

Compare Source

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

Highlights
Serverless database drivers improvements and request for feedback (Preview)

In version 5.4.0, we released driverAdapters into Preview. The driverAdapter feature enables Prisma Client to access your database using other JavaScript or Serverless database drivers such as Neon, PlanetScale, and Turso.

The driver adapters allow Prisma Client to connect to your database using protocols besides TCP, such as HTTP (PlanetScale and Turso) and WebSockets (Neon). You can learn more about the Preview feature from the announcement blog post.

In this release, we focused our efforts on fixing bugs and improving the stability of the Preview feature.

We encourage you to try it out and share your feedback to help us move it to General Availability in either of the following GitHub discussions:

New flags for the prisma init command

This release introduces 3 new flags you can provide when initializing Prisma in your project using the prisma init command:

  • --generator-provider: Defines the default generator to use
  • --preview-features: Specifies the default Preview features to use in your project
  • --output: Specifies the default output location for the generated client
Fixes and improvements
Prisma CLI
Prisma Client
Credits

Huge thanks to @​onichandame, @​fqazi, @​KhooHaoYit, @​alencardc, @​Oreilles, @​christianledgard, @​skyzh, @​alula, @​michaelpoellath, @​lukahartwig, @​steebchen, @​icanipa, @​jiashengguo, @​stephenwade for helping!

v5.4.2

Compare Source

Today, we are issuing the 5.4.2 patch release.

Fix in Prisma Client

v5.4.1

Compare Source

Today, we are issuing the 5.4.1 patch release.

Fix in Prisma Client
Fix in @prisma/adapter-planetscale

v5.4.0

Compare Source

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

Highlights

Preview support for PlanetScale and Neon serverless database drivers

We’re excited to announce Preview support for the Neon and PlanetScale serverless database drivers. The PlanetScale and Neon serverless database drivers allow Prisma to connect to your database using protocols besides TCP — HTTP (PlanetScale) or WebSockets (Neon).

To get started with the serverless database drivers, first enable the driverAdapters Preview feature flag in your Prisma schema:

// schema.prisma
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["driverAdapters"]
}

Next, to set up Prisma Client to use the serverless database drivers:

PlanetScale

Install the Prisma adapter for PlanetScale and PlanetScale serverless database driver, and undici:

npm install @​prisma/adapter-planetscale @​planetscale/database undici

Prisma ORM supports Node 16 and up. In Node 18 and up, undici is not needed.

Ensure you update the host value in your connection string to aws.connect.psdb.cloud. You can learn more about this here.

DATABASE_URL='mysql://johndoe:[email protected]/clear_nightsky?sslaccept=strict'

Update your Prisma Client instance to use the PlanetScale database driver:

// Import required dependencies
import { connect } from '@​planetscale/database';
import { PrismaPlanetScale } from '@​prisma/adapter-planetscale';
import { PrismaClient } from '@​prisma/client';
import { fetch as undiciFetch } from 'undici';

// Initialize Prisma Client with the PlanetScale serverless database driver
const connection = connect({ url: connectionString, fetch: undiciFetch });
const adapter = new PrismaPlanetScale(connection);
const prisma = new PrismaClient({ adapter });
Neon

Install the Prisma adapter for Neon, Neon serverless database driver and undici (WebSockets):

npm install @​prisma/adapter-neon @​neondatabase/serverless undici

Update your Prisma Client instance to use the Neon serverless database driver:

// Import required dependencies
import { Pool, neonConfig } from '@​neondatabase/serverless';
import { PrismaNeon } from '@​prisma/adapter-neon';
import { PrismaClient } from '@​prisma/client';
import { WebSocket } from 'undici'

neonConfig.webSocketConstructor = WebSocket;

// Initialize Prisma Client with the Neon serverless database driver
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const adapter = new PrismaNeon(pool);
const prisma = new PrismaClient({ adapter });

Let us know your feedback about the Neon or Planetscale serverless database drivers in the linked GitHub discussions. Create a bug report if you run into any issues.

Early Access support for Turso

Turso is an edge-hosted, distributed database that's based on libSQL, an open-source and open-contribution fork of SQLite, enabling you to bring data closer to your application and minimize query latency.

Since support for Turso is in Early Access, there may be some rough edges which we’re still working on it to improve the API and overall support. Additionally, it is behind the driverAdapters Preview feature flag. Enable it to get started using Turso in your project:

// schema.prisma
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["driverAdapters"]
}

Next, install the Prisma Client adapter for Turso and the libSQL database client

npm install @​prisma/adapter-libsql @​libsql/client

Update your Prisma Client instance:

// Import required dependencies
import { PrismaClient } from '@​prisma/client'
import { PrismaLibSQL } from '@​prisma/adapter-libsql'
import { createClient } from '@​libsql/client'

// Create a new instance of the libSQL database client
const libsql = createClient({
  // @​ts-expect-error
  url: process.env.TURSO_DATABASE_URL,
  authToken: process.env.TURSO_AUTH_TOKEN 
})

// Create a Prisma "adapter" for libSQL
const adapter = new PrismaLibSQL(libsql)
// Pass the adapter option to the Prisma Client instance
const prisma = new PrismaClient({ adapter })

You can learn more on how to use Prisma together with Turso in the announcement blog post.

Try it out! Let us know what you think and create a bug report if you run into any issues.

Query performance improvements

In our continued efforts to make Prisma Client faster, we identified and improved the performance of different types of queries.

Relation filters improvements

We made the following improvements to relation filters:

  • Removed an unnecessary INNER JOIN used in relation filter queries (Big thank you to @​KhooHaoYit for helping out)
  • Use of LEFT JOIN's for to-one relations. Previously, Prisma made use of sub-queries to fetch data.

Example Prisma Client query

prisma.comment.findMany({
  where: {
    post: {
      author: {
        name: "John"
      }
    }
  }
})

Before 5.4.0

SELECT
  "Comment"."id"
FROM
  "Comment"
WHERE
  ("Comment"."id") IN (
    SELECT
      "t0"."id"
    FROM
      "Comment" AS "t0"
      INNER JOIN "Post" AS "j0" ON ("j0"."id") = ("t0"."postId")
    WHERE
      (
        ("j0"."id") IN (
          SELECT
            "t1"."id"
          FROM
            "Post" AS "t1"
            INNER JOIN "User" AS "j1" ON ("j1"."id") = ("t1"."userId")
          WHERE
            (
              "j1"."name" = $ 1
              AND "t1"."id" IS NOT NULL
            )
        )
        AND "t0"."id" IS NOT NULL
      )
  );

After 5.4.0

SELECT
  "Comment"."id"
FROM
  "Comment"
  LEFT JOIN "Post" AS "j1" ON ("j1"."id") = ("Comment"."postId")
  LEFT JOIN "User" AS "j2" ON ("j2"."id") = ("j1"."userId")
WHERE
  (
    "j2"."name" = $ 1
    AND ("j2"."id" IS NOT NULL)
    AND ("j1"."id" IS NOT NULL)
  );

If you’re interested in more details on the relation query filter improvements, you can take a look at this pull request.

Enum improvements on PostgreSQL and CockroachDB

Previously, when an enum value was used in a query, our Postgres driver would make additional queries to resolve the enum types that were used.

In this release, we’re making improvements by casting enums to TEXT to avoid the additional roundtrips when resolving the types.

This change should have the most impact if you’re using pgBouncer or if you’re running Prisma in a serverless environment, where our Postgres driver can’t cache enum types information.

Prisma schema

model User {
  id   Int  @​id @​default(cuid())
  role Role
}

enum Role {
  User
  Admin
}

Prisma Client query

await prisma.user.findMany({ 
  where: {
    role: "Admin"
  }
})

Before 5.4.0

-- Internal driver query
SELECT t.typname, t.typtype, t.typelem, r.rngsubtype, t.typbasetype, n.nspname, t.typrelid FROM pg_catalog.pg_type t LEFT OUTER JOIN pg_catalog.pg_range r ON r.rngtypid = t.oid INNER JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid WHERE t.oid = $1;

-- Internal driver query
SELECT enumlabel FROM pg_catalog.pg_enum WHERE enumtypid = $1 ORDER BY enumsortorder;

-- Prisma Client query
SELECT id, role FROM "User" WHERE role = $1;

After 5.4.0

-- Prisma Client query
SELECT id, role::text FROM "User" WHERE role = CAST($1::text AS "Role);
Bulk delete improvements

We optimized the deleteMany operation by:

  • Removing all SELECT queries used to fetch data that would be used as input for the DELETE operation. In some cases, this also improves index usage.
  • Removing the transaction previously used as it’s now a single atomic operation.

Prisma Client query

await prisma.post.deleteMany({
  where: {
    id: {
      gt: 1,
      lt: 10,
    }
  }
})

Before 5.4.0

BEGIN
SELECT id FROM "Post" WHERE id > 1 AND id < 10;
SELECT id FROM "Post" WHERE id > 1 AND id < 10 AND id IN (<...select ids>);
DELETE FROM "Post" WHERE id IN (<...select ids>) AND id > 1 AND id < 10;
COMMIT

After 5.4.0

DELETE FROM "Post" WHERE id > 1 AND id < 10;
Upsert improvements

We improved the upsert operation (non-native database upsert) by removing a redundant SELECT query:

Prisma Client query

await prisma.user.upsert({
  where: { email: "[email protected]" },
  create: { email: "[email protected]", firstName: "John" },
  update: { firstName: "Johnny" },
})

Before 5.4.0

SELECT `User`.`id` FROM `User` WHERE `User`.`email` = ?;
SELECT `User`.`id` FROM `User` WHERE `User`.`email` = ?;
UPDATE `prisma`.`User` SET `firstName` = ? WHERE `prisma`.`User`.`id` IN (?) AND `prisma`.`User`.`email` = ?;
SELECT `User`.`id` FROM `User` WHERE `User`.`id` = ?;

After 5.4.0

SELECT `User`.`id` FROM `User` WHERE `User`.`email` = ?;
UPDATE `prisma`.`User` SET `firstName` = ? WHERE `prisma`.`User`.`id` IN (?) AND `prisma`.`User`.`email` = ?;
SELECT `User`.`id` FROM `User` WHERE `User`.`id` = ?;

Fixes and improvements

Prisma Client
Language tools (e.g. VS Code)
Prisma Engines

Credits

Huge thanks to @​onichandame, @​fqazi, @​KhooHaoYit, @​alencardc, @​Oreilles, @​christianledgard, @​skyzh, @​alula, @​michaelpoellath, @​RobertCraigie, @​icanipa, @​jiashengguo, @​stephenwade, @​darthmaim, @​ludralph, @​Gerschtli, @​andyjy for helping!

💼 We're hiring!

If you're interested in joining our growing team to help empower developers to build data-intensive applications, Prisma is the place for you.

We're currently hiring for the following roles:

Feel free to read the job descriptions and apply using the links provided.


Configuration

📅 Schedule: Branch creation - "before 3am on Monday" (UTC), Automerge - At any time (no schedule defined).

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

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 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 Mend Renovate. View repository job log here.

@renovate renovate bot added the dependencies Pull requests that update a dependency file label Oct 16, 2023
@renovate renovate bot force-pushed the renovate/prisma-monorepo branch from 1cc163f to 6b9593d Compare October 24, 2023 12:57
@renovate renovate bot changed the title chore(deps): update prisma monorepo to v5.4.2 chore(deps): update prisma monorepo to v5.5.0 Oct 24, 2023
@renovate renovate bot changed the title chore(deps): update prisma monorepo to v5.5.0 chore(deps): update prisma monorepo to v5.5.1 Oct 25, 2023
@renovate renovate bot force-pushed the renovate/prisma-monorepo branch from 6b9593d to 37c2685 Compare October 25, 2023 15:02
@renovate renovate bot changed the title chore(deps): update prisma monorepo to v5.5.1 chore(deps): update prisma monorepo to v5.5.2 Oct 25, 2023
@renovate renovate bot force-pushed the renovate/prisma-monorepo branch from 37c2685 to d0dfddb Compare October 25, 2023 20:28
@renovate renovate bot force-pushed the renovate/prisma-monorepo branch from d0dfddb to 921889d Compare October 31, 2023 22:23
@Snazzah Snazzah merged commit 9454f80 into master Oct 31, 2023
1 check passed
@renovate renovate bot deleted the renovate/prisma-monorepo branch October 31, 2023 22:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dependencies Pull requests that update a dependency file
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant