fix(deps): update dependency drizzle-orm to ^0.38.2#163
Merged
renovate[bot] merged 1 commit intomainfrom Dec 30, 2024
Merged
Conversation
697c7b6 to
368ef7f
Compare
368ef7f to
4b0bc42
Compare
|
Contributor
|
🎉 This PR is included in version 0.16.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



This PR contains the following updates:
^0.33.0->^0.38.2Release Notes
drizzle-team/drizzle-orm (drizzle-orm)
v0.38.2Compare Source
New features
USE INDEX,FORCE INDEXandIGNORE INDEXfor MySQLIn MySQL, the statements USE INDEX, FORCE INDEX, and IGNORE INDEX are hints used in SQL queries to influence how the query optimizer selects indexes. These hints provide fine-grained control over index usage, helping optimize performance when the default behavior of the optimizer is not ideal.
Use Index
The
USE INDEXhint suggests to the optimizer which indexes to consider when processing the query. The optimizer is not forced to use these indexes but will prioritize them if they are suitable.Ignore Index
The
IGNORE INDEXhint tells the optimizer to avoid using specific indexes for the query. MySQL will consider all other indexes (if any) or perform a full table scan if necessary.Force Index
The
FORCE INDEXhint forces the optimizer to use the specified index(es) for the query. If the specified index cannot be used, MySQL will not fall back to other indexes; it might resort to a full table scan instead.You can also combine those hints and use multiple indexes in a query if you need
v0.38.1Compare Source
v0.38.0Compare Source
Types breaking changes
A few internal types were changed and extra generic types for length of column types were added in this release. It won't affect anyone, unless you are using those internal types for some custom wrappers, logic, etc. Here is a list of all types that were changed, so if you are relying on those, please review them before upgrading
MySqlCharBuilderInitialMySqlVarCharBuilderInitialPgCharBuilderInitialPgArrayBuilderPgArrayPgVarcharBuilderInitialPgBinaryVectorBuilderInitialPgBinaryVectorBuilderPgBinaryVectorPgHalfVectorBuilderInitialPgHalfVectorBuilderPgHalfVectorPgVectorBuilderInitialPgVectorBuilderPgVectorSQLiteTextBuilderInitialNew Features
getViewSelectedFields$inferSelectfunction to viewsInferSelectViewModeltype for viewsisViewfunctionValidator packages updates
drizzle-zodhas been completely rewritten. You can find detailed information about it heredrizzle-valibothas been completely rewritten. You can find detailed information about it heredrizzle-typeboxhas been completely rewritten. You can find detailed information about it hereThanks to @L-Mario564 for making more updates than we expected to be shipped in this release. We'll copy his message from a PR regarding improvements made in this release:
And a set of new features
createSelectSchemafunction now also accepts views and enums.createUpdateSchema, for use in updating queries.createSchemaFactory, to provide more advanced options and to avoid bloating the parameters of the other schema functionsBug fixes
v0.37.0Compare Source
New Dialects
🎉
SingleStoredialect is now available in DrizzleThanks to the SingleStore team for creating a PR with all the necessary changes to support the MySQL-compatible part of SingleStore. You can already start using it with Drizzle. The SingleStore team will also help us iterate through updates and make more SingleStore-specific features available in Drizzle
You can check out our Getting started guides to try SingleStore!
New Drivers
🎉
SQLite Durable Objectsdriver is now available in DrizzleYou can now query SQLite Durable Objects in Drizzle!
For the full example, please check our Get Started Section
Bug fixes
v0.36.4Compare Source
New Package:
drizzle-seedFull Reference
The full API reference and package overview can be found in our official documentation
Basic Usage
In this example we will create 10 users with random names and ids
Options
countBy default, the
seedfunction will create 10 entities.However, if you need more for your tests, you can specify this in the seed options object
seedIf you need a seed to generate a different set of values for all subsequent runs, you can define a different number
in the
seedoption. Any new number will generate a unique set of valuesThe full API reference and package overview can be found in our official documentation
Features
Added
OVERRIDING SYSTEM VALUEapi to db.insert()If you want to force you own values for
GENERATED ALWAYS AS IDENTITYcolumns, you can useOVERRIDING SYSTEM VALUEAs PostgreSQL docs mentions
Added
.$withAuth()API for Neon HTTP driverUsing this API, Drizzle will send you an auth token to authorize your query. It can be used with any query available in Drizzle by simply adding
.$withAuth()before it. This token will be used for a specific queryExamples
Bug Fixes
v0.36.3Compare Source
New Features
Support for
UPDATE ... FROMin PostgreSQL and SQLiteAs the SQLite documentation mentions:
Similarly, the PostgreSQL documentation states:
Drizzle also supports this feature starting from this version
For example, current query:
Will generate this sql
You can also alias tables that are joined (in PG, you can also alias the updating table too).
Will generate this sql
In PostgreSQL, you can also return columns from the joined tables.
Will generate this sql
Support for
INSERT INTO ... SELECTin all dialectsAs the SQLite documentation mentions:
As the PostgreSQL documentation mentions:
And as the MySQL documentation mentions:
Drizzle supports the current syntax for all dialects, and all of them share the same syntax. Let's review some common scenarios and API usage.
There are several ways to use select inside insert statements, allowing you to choose your preferred approach:
Query Builder
Callback
SQL template tag
v0.36.2Compare Source
New Features
Bug and typo fixes
Fixed typos in repository: thanks @armandsalle, @masto, @wackbyte, @Asher-JH, @MaxLeiter
Fixed .generated behavior with non-strict tsconfig
Fix Drizzle ORM for expo-sqlite
Fixed lack of schema name on columns in sql
fix: Adjust neon http driver entity kind
Export PgIntegerBuilderInitial type
[MySQL] Correct $returningId() implementation to correctly store selected fields
v0.36.1Compare Source
Bug Fixes
v0.36.0Compare Source
New Features
Row-Level Security (RLS)
With Drizzle, you can enable Row-Level Security (RLS) for any Postgres table, create policies with various options, and define and manage the roles those policies apply to.
Drizzle supports a raw representation of Postgres policies and roles that can be used in any way you want. This works with popular Postgres database providers such as
NeonandSupabase.In Drizzle, we have specific predefined RLS roles and functions for RLS with both database providers, but you can also define your own logic.
Enable RLS
If you just want to enable RLS on a table without adding policies, you can use
.enableRLS()As mentioned in the PostgreSQL documentation:
Roles
Currently, Drizzle supports defining roles with a few different options, as shown below. Support for more options will be added in a future release.
If a role already exists in your database, and you don’t want drizzle-kit to ‘see’ it or include it in migrations, you can mark the role as existing.
Policies
To fully leverage RLS, you can define policies within a Drizzle table.
Example of pgPolicy with all available properties
Link Policy to an existing table
There are situations where you need to link a policy to an existing table in your database.
The most common use case is with database providers like
NeonorSupabase, where you need to add a policyto their existing tables. In this case, you can use the
.link()APIMigrations
If you are using drizzle-kit to manage your schema and roles, there may be situations where you want to refer to roles that are not defined in your Drizzle schema. In such cases, you may want drizzle-kit to skip managing these roles without having to define each role in your drizzle schema and marking it with
.existing().In these cases, you can use
entities.rolesindrizzle.config.ts. For a complete reference, refer to the thedrizzle.config.tsdocumentation.By default,
drizzle-kitdoes not manage roles for you, so you will need to enable this feature indrizzle.config.ts.In case you need additional configuration options, let's take a look at a few more examples.
You have an
adminrole and want to exclude it from the list of manageable rolesYou have an
adminrole and want to include it in the list of manageable rolesIf you are using
Neonand want to exclude Neon-defined roles, you can use the provider optionIf you are using
Supabaseand want to exclude Supabase-defined roles, you can use the provider optionRLS on views
With Drizzle, you can also specify RLS policies on views. For this, you need to use
security_invokerin the view's WITH options. Here is a small example:Using with Neon
The Neon Team helped us implement their vision of a wrapper on top of our raw policies API. We defined a specific
/neonimport with thecrudPolicyfunction that includes predefined functions and Neon's default roles.Here's an example of how to use the
crudPolicyfunction:This policy is equivalent to:
Neonexposes predefinedauthenticatedandanaonymousroles and related functions. If you are usingNeonfor RLS, you can use these roles, which are marked as existing, and the related functions in your RLS queries.For example, you can use the
Neonpredefined roles and functions like this:Using with Supabase
We also have a
/supabaseimport with a set of predefined roles marked as existing, which you can use in your schema.This import will be extended in a future release with more functions and helpers to make using RLS and
Supabasesimpler.For example, you can use the
Supabasepredefined roles like this:The
/supabaseimport also includes predefined tables and functions that you can use in your applicationThis allows you to use it in your code, and Drizzle Kit will treat them as existing databases,
using them only as information to connect to other entities
Let's check an example of adding a policy to a table that exists in
SupabaseBug fixes
v0.35.3Compare Source
New LibSQL driver modules
Drizzle now has native support for all
@libsql/clientdriver variations:@libsql/client- defaults to node import, automatically changes to web if target or platform is set for bundler, e.g.esbuild --platform=browser@libsql/client/nodenode compatible module, supports :memory:, file, wss, http and turso connection protocols@libsql/client/webmodule for fullstack web frameworks like next, nuxt, astro, etc.@libsql/client/httpmodule for http and https connection protocols@libsql/client/wsmodule for ws and wss connection protocols@libsql/client/sqlite3module for :memory: and file connection protocols@libsql/client-wasmSeparate experimental package for WASMv0.35.2Compare Source
We've added approximately 240 tests to check the ESM and CJS builds for all the drivers we have. You can check them here
v0.35.1Compare Source
v0.35.0Compare Source
Important change after 0.34.0 release
Updated the init Drizzle database API
The API from version 0.34.0 turned out to be unusable and needs to be changed. You can read more about our decisions in this discussion
If you still want to use the new API introduced in 0.34.0, which can create driver clients for you under the hood, you can now do so
in order to not introduce breaking change - we will still leave support for deprecated API until V1 release.
It will degrade autocomplete performance in connection params due to
DatabaseDriver|ConnectionParamstypes collision,but that's a decent compromise against breaking changes
New Features
New .orderBy() and .limit() functions in update and delete statements SQLite and MySQL
You now have more options for the
updateanddeletequery builders in MySQL and SQLiteExample
New
drizzle.mock()functionThere were cases where you didn't need to provide a driver to the Drizzle object, and this served as a workaround
Now you can do this using a mock function
There is no valid production use case for this, but we used it in situations where we needed to check types, etc., without making actual database calls or dealing with driver creation. If anyone was using it, please switch to using mocks now
Internal updates
Bug fixes
v0.34.1Compare Source
/connectmodulev0.34.0Compare Source
Breaking changes and migrate guide for Turso users
If you are using Turso and libsql, you will need to upgrade your
drizzle.configand@libsql/clientpackage.@libsql/client@0.10.0or higher if you are using themigratefunction. For other use cases, you can continue using previous versions(But the suggestion is to upgrade)To install the latest version, use the command:
drizzle.configfor SQLite and Turso users, which allowed a shared strategy for both dialects. Starting with this release, we are introducing the turso dialect in drizzle-kit. We will evolve and improve Turso as a separate dialect with its own migration strategies.Before
After
If you are using only SQLite, you can use
dialect: "sqlite"LibSQL/Turso and Sqlite migration updates
SQLite "generate" and "push" statements updates
Starting from this release, we will no longer generate comments like this:
We will generate a set of statements, and you can decide if it's appropriate to create data-moving statements instead. Here is an example of the SQL file you'll receive now:
LibSQL/Turso "generate" and "push" statements updates
Since LibSQL supports more ALTER statements than SQLite, we can generate more statements without recreating your schema and moving all the data, which can be potentially dangerous for production environments.
LibSQL and Turso will now have a separate dialect in the Drizzle config file, meaning that we will evolve Turso and LibSQL independently from SQLite and will aim to support as many features as Turso/LibSQL offer.
With the updated LibSQL migration strategy, you will have the ability to:
You can find more information in the LibSQL documentation
LIMITATIONS
This is because LibSQL/Turso does not support dropping this type of foreign key.
If the table has indexes, altering columns will cause index recreation:
Drizzle-Kit will drop the indexes, modify the columns, and then create the indexes.
Adding or dropping composite foreign keys is not supported and will cause table recreation.
Primary key columns can not be altered and will cause table recreation.
Altering columns that are part of foreign key will cause table recreation.
NOTES
See more: https://www.sqlite.org/foreignkeys.html
A new and easy way to start using drizzle
Current and the only way to do, is to define client yourself and pass it to drizzle
But we want to introduce you to a new API, which is a simplified method in addition to the existing one.
Most clients will have a few options to connect, starting with the easiest and most common one, and allowing you to control your client connection as needed.
Let's use
node-postgresas an example, but the same pattern can be applied to all other clientsA few clients will have a slightly different API due to their specific behavior. Let's take a look at them:
For
aws-data-api-pg, Drizzle will requireresourceArn,database, andsecretArn, along with any other AWS Data API client types for the connection, such as credentials, region, etc.For
d1, the CloudFlare Worker types as described in the documentation here will be required.For
vercel-postgres, nothing is needed since Vercel automatically retrieves thePOSTGRES_URLfrom the.envfile. You can check this documentation for more infoOptional names for columns and callback in drizzle table
We believe that schema definition in Drizzle is extremely powerful and aims to be as close to SQL as possible while adding more helper functions for JS runtime values.
However, there are a few areas that could be improved, which we addressed in this release. These include:
Let's look at an example with PostgreSQL (this applies to all the dialects supported by Drizzle)
Previously
The previous table definition will still be valid in the new release, but it can be replaced with this instead
New
casingparam indrizzle-ormanddrizzle-kitThere are more improvements you can make to your schema definition. The most common way to name your variables in a database and in TypeScript code is usually
snake_casein the database andcamelCasein the code. For this case, in Drizzle, you can now define a naming strategy in your database to help Drizzle map column keys automatically. Let's take a table from the previous example and make it work with the new casing API in DrizzleTable can now become:
As you can see,
inStockdoesn't have a database name alias, but by defining the casing configuration at the connection level, all queries will automatically map it tosnake_caseFor
drizzle-kitmigrations generation you should also specifycasingparam in drizzle config, so you can be sure you casing strategy will be applied to drizzle-kit as wellNew "count" API
Before this release to count entities in a table, you would need to do this:
The new API will look like this:
This can also work as a subquery and within relational queries
Ability to execute raw strings instead of using SQL templates for raw queries
Previously, you would have needed to do this to execute a raw query with Drizzle
You can now do this as well
You can now access the driver client from Drizzle db instance
Configuration
📅 Schedule: Branch creation - "after 1am,before 5am,monthly" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.