Today, we are excited to share the 3.6.0
stable release 🎉
🌟 Help us spread the word about Prisma by starring the repo or tweeting about the release. 🌟
Major improvements & new features
Prisma Migrate
Full-text index support in MySQL and MongoDB (Preview)
In this version we introduce support for full-text indexes in the db pull
, db push
and migrate
commands for MySQL and MongoDB databases as a Preview feature. This allows using them in the Prisma schema and prevents validation errors in some database schemas.
For now we do not enable the full-text search commands in the Prisma Client. They will be implemented separately, and the progress can be followed in the MongoDB and MySQL issues.
Add the preview feature fullTextIndex
to the Prisma schema, after which the @@fulltext
attribute is allowed in the Prisma schema:
generator js {
provider = "prisma-client-js"
previewFeatures = ["fullTextIndex"]
}
model A {
id Int @id
title String @db.VarChar(255)
content String @db.Text
@@fulltext([title, content])
}
Please note that it is mandatory to do db pull
with the preview feature enabled before using Prisma Migrate on existing MySQL databases, so the index types can be converted and will not get overwritten in the next migration.
For more details check out our documentation.
Hash index support for PostgreSQL (Preview)
With the extendedIndexes
preview feature, it is now possible to use Hash
instead of the default BTree
as the index algorithm on PostgreSQL databases. A hash index can be much faster for inserts, but it only supports equals operation in the database.
An example of using a hash index:
generator js {
provider = "prisma-client-js"
previewFeatures = ["extendedIndexes"]
}
model A {
id Int @id
value Int
@@index([value], type: Hash)
}
For more details check out our documentation.
VS Code extension now uses a Wasm module
Until this release, the language server powering the Prisma VS Code extension relied on logic from the Prisma engines in the form of a native binary. Downloading and running the native binary required a large amount of custom logic and led to problems due to network failures, operating system permissions and malicious code detection issues.
Starting with 3.6.0
, the language server and the VS Code extension use logic compiled to WebAssembly and distributed through npm. There is no runtime binary download and no external process involved anymore. We expect this new distribution model to be more robust and hence provide a better experience for our users.
If you have any feedback, please leave an issue in the prisma/language-tools
repository.
Prisma Client
Bytes
can now be filtered with in
and notIn
You can now use in
and notIn
operations on the Bytes
type:
const audioTracks = raws.map(raw => {
return Buffer.from(raw)
})
const result = await prisma.audio.find({
where: {
track:
in: audioTracks
}
}
})
Thanks @serejkaaa512 for your contribution!
Json
fields now accept read-only types
This is a small quality-of-life improvement. You can now pass immutable values into Json
fields. In the following example, audit
is a Json
field that accepts a read-only array:
const trail = [
{ event: "signup" },
{ event: "subscribe" },
{ event: "invite friend" }
] as const
await prisma.user.create({
data: {
audit: trail
}
})
Learn more in this issue.
Reducing interactive transactions timeouts for binary engine
If you've spent some time using the new Interactive Transaction API with the binary engine, you may have encountered this timeout error:
Transaction API error: Transaction already closed: Transaction is no longer valid. Last state: 'Expired'.
This could happen if you had two concurrent requests modifying the same resource at the same time using the binary engine type.
It took us a while to track down the source of this error, but it turned out to be a low-level misconfiguration in our HTTP client. We disabled HTTP pipelining to fix this problem.
Fix notIn
filters for large queries
This most likely didn't affect you, but if you ever tried using notIn
with a large query, you may have received an incorrect result.
The query engine automatically breaks up large queries into smaller queries and intersects the results. Most of the time this works as expected but for certain queries like notIn
, the intersection of results is incorrect.
We fixed this in 3.6.0
. You can now use in
and notIn
operations on the Bytes
type:
const denyList = [/* ... large list of user ids ... */]
const result = await prisma.user.findMany({
where: {
id: {
notIn: denyList
}
}
})
This query will break up the query into chunks that your database can manage:
select * where User not in ($1,$2, ..., $5000)
select * where User not in ($1000,$1001, ..., $6000)
... and return the correct results. Learn more in this issue.
Fixes and improvements
Prisma Client
- interactiveTransactions: 2 concurrent writes to the same row will cause it to hang until expiring
- Please support having
in
natively for bytes - [MongoDB] Can not query data from MongoDB Atlas serverless cluster/database, weird error
The provided database string is invalid. Invalid MongoDB connection string in database URL.
instead - Know when the Client is using the data proxy
- PCO: Setup an example Node.js application with OpenTelemetry that posts to a Tracing UI
- Support order by relevance
- JSONValue not accepting readonly array or objects
- Downloading binaries fails with wrong sha256 checksum
Prisma Migrate
- Full-Text Search Index support for MySQL
- Specification of Index Type
- Add timing information to Migration CLI output
- Seeding fails in
prisma migrate dev
with timeout but works withprisma db seed
dbgenerated
migrations in MySQL are broken (since 3.4.x)- seed.sh is executed before migration has completed when using prisma migrate dev
Language tools (e.g. VS Code)
- Missing License.md
- Re-introduce error handling to referentialActions() and nativeTypes() methods in prisma-fmt
Prisma engines
Credits
Huge thanks to @Akxe, @safareli for helping!
📺 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, December 02 at 5pm Berlin | 8am San Francisco.