src/content/docs/latest-releases/drizzle-orm-v0286.mdx
import Section from "@mdx/Section.astro";
Note: MySQL
datetimewithmode: 'date'will now store dates in UTC strings and retrieve data in UTC as well to align with MySQL behavior fordatetime. If you need a different behavior and want to handledatetimemapping in a different way, please usemode: 'string'or Custom Types implementation
Check Fix Datetime mapping for MySQL for implementation details
LibSQL batch api supportBatch API usage example:
<Section> ```ts copy {1} const batchResponse = await db.batch([ db.insert(usersTable).values({ id: 1, name: 'John' }).returning({ id: usersTable.id, }), db.update(usersTable).set({ name: 'Dan' }).where(eq(usersTable.id, 1)), db.query.usersTable.findMany({}), db.select().from(usersTable).where(eq(usersTable.id, 1)), db.select({ id: usersTable.id, invitedBy: usersTable.invitedBy }).from( usersTable, ), ]); ```type BatchResponse = [
{
id: number;
}[],
ResultSet,
{
id: number;
name: string;
verified: number;
invitedBy: number | null;
}[],
{
id: number;
name: string;
verified: number;
invitedBy: number | null;
}[],
{
id: number;
invitedBy: number | null;
}[],
];
All possible builders that can be used inside db.batch:
`db.all()`,
`db.get()`,
`db.values()`,
`db.run()`,
`db.query.<table>.findMany()`,
`db.query.<table>.findFirst()`,
`db.select()...`,
`db.update()...`,
`db.delete()...`,
`db.insert()...`,
More usage examples here: integration-tests/tests/libsql-batch.test.ts and in docs
Read more in docs
const test = sqliteTable('test', {
dataTyped: text('data_typed', { mode: 'json' }).$type<{ a: 1 }>().notNull(),
});
.toSQL() to Relational Query API callsconst query = db.query.usersTable.findFirst().toSQL();
List of operators and usage examples
arrayContains, arrayContained, arrayOverlaps
Read more in docs
const contains = await db.select({ id: posts.id }).from(posts)
.where(arrayContains(posts.tags, ['Typescript', 'ORM']));
const contained = await db.select({ id: posts.id }).from(posts)
.where(arrayContained(posts.tags, ['Typescript', 'ORM']));
const overlaps = await db.select({ id: posts.id }).from(posts)
.where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']));
const withSubQuery = await db.select({ id: posts.id }).from(posts)
.where(arrayContains(
posts.tags,
db.select({ tags: posts.tags }).from(posts).where(eq(posts.id, 1)),
));
You can find more examples in docs
<Section> ```ts // Before import { inArray } from "drizzle-orm/pg-core";await db.users.findFirst({ where: (table, _) => inArray(table.id, [ ... ]) })
```ts copy {3}
// After
await db.users.findFirst({
where: (table, { inArray }) => inArray(table.id, [ ... ])
})