DrizzleORM v0.28.6 릴리스
Sep 6, 2023

변경 사항

참고: mode: 'date'를 사용하는 MySQL datetime은 이제 날짜를 UTC 문자열로 저장하고 UTC로 데이터를 조회하여 MySQL의 datetime 동작과 일치하도록 합니다. 다른 동작이 필요하거나 datetime 매핑을 다르게 처리하려면 mode: 'string' 또는 Custom Types 구현을 사용하세요.

구현 세부 사항은 Fix Datetime mapping for MySQL을 확인하세요.

새로운 기능

🎉 LibSQL 배치 API 지원

참조: https://docs.turso.tech/reference/client-access/javascript-typescript-sdk#execute-a-batch-of-statements

배치 API 사용 예제:

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;
	}[],
];

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()...`,

더 많은 사용 예제는 여기에서 확인하세요: integration-tests/tests/libsql-batch.test.ts문서

🎉 SQLite 텍스트에 JSON 모드 추가

자세한 내용은 문서에서 확인하세요.

const test = sqliteTable('test', {
	dataTyped: text('data_typed', { mode: 'json' }).$type<{ a: 1 }>().notNull(),
});

🎉 Relational Query API 호출에 .toSQL() 추가

const query = db.query.usersTable.findFirst().toSQL();

🎉 PostgreSQL 배열 연산자 추가

연산자 목록 및 사용 예제 arrayContains, arrayContained, arrayOverlaps

자세한 내용은 문서에서 확인하세요.

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)),
	));

🎉 Relational Query의 where 필터 함수에 SQL 연산자 추가

더 많은 예제는 문서에서 확인할 수 있습니다.

// Before
import { inArray } from "drizzle-orm/pg-core";

await db.users.findFirst({
  where: (table, _) => inArray(table.id, [ ... ])
})
// After
await db.users.findFirst({
  where: (table, { inArray }) => inArray(table.id, [ ... ])
})

버그 수정