수정 사항
새로운 기능/헬퍼
모든 dialect의 쿼리 빌더에 대한 상세한 JSDoc
이제 IDE에서 JSDoc을 통해 개발 중에 더 많은 정보, 힌트, 문서 링크 등을 확인할 수 있습니다. 이전에는 필터 표현식에만 제공되었지만, 이제 Drizzle 쿼리 빌더의 모든 부분에서 확인할 수 있습니다.
SQL 집계 함수를 위한 새로운 헬퍼
집계 함수는 SELECT 문의 GROUP BY 절과 함께 자주 사용됩니다. 따라서 하나의 쿼리에서 집계 함수와 다른 컬럼을 함께 조회하는 경우, 반드시
.groupBy절을 사용해야 합니다.
다음은 함수 목록과 sql 템플릿을 사용한 동등한 표현입니다:
count
await db.select({ value: count() }).from(users);
await db.select({ value: count(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`count('*'))`.mapWith(Number)
}).from(users);
await db.select({
value: sql`count(${users.id})`.mapWith(Number)
}).from(users);countDistinct
await db.select({ value: countDistinct(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`count(${users.id})`.mapWith(Number)
}).from(users);avg
await db.select({ value: avg(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`avg(${users.id})`.mapWith(String)
}).from(users);avgDistinct
await db.select({ value: avgDistinct(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`avg(distinct ${users.id})`.mapWith(String)
}).from(users);sum
await db.select({ value: sum(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`sum(${users.id})`.mapWith(String)
}).from(users);sumDistinct
await db.select({ value: sumDistinct(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`sum(distinct ${users.id})`.mapWith(String)
}).from(users);max
await db.select({ value: max(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`max(${expression})`.mapWith(users.id)
}).from(users);min
await db.select({ value: min(users.id) }).from(users);
// 다음과 동등합니다
await db.select({
value: sql`min(${users.id})`.mapWith(users.id)
}).from(users);더 많은 정보는 문서를 확인하세요: 집계 헬퍼
새로운 패키지
Drizzle ESLint Plugin
특정 시나리오에서 타입 검사를 수행하기 어렵거나, 가능하더라도 오류 메시지를 이해하기 어려운 경우를 위해 권장 규칙이 포함된 ESLint 패키지를 만들었습니다. 이 패키지는 개발 중 중요한 시나리오를 처리하는 데 도움을 주는 것을 목표로 합니다. 자세한 정보는 문서를 확인하세요.
설치
npm i eslint eslint-plugin-drizzle
IDE에서 TypeScript 지원을 위해 다음 패키지를 설치할 수 있습니다
npm i @typescript-eslint/eslint-plugin @typescript-eslint/parser
사용법
.eslintrc.yml 파일을 생성하고, plugins에 drizzle을 추가한 후, 사용할 규칙을 지정합니다. 모든 기존 규칙 목록은 아래에서 확인할 수 있습니다
root: true
parser: '@typescript-eslint/parser'
parserOptions:
project: './tsconfig.json'
plugins:
- drizzle
rules:
'drizzle/enforce-delete-with-where': "error"
'drizzle/enforce-update-with-where': "error"All 설정
이 플러그인은 모든 규칙을 사용하는 all 설정을 내보냅니다(더 이상 사용되지 않는 규칙 제외).
root: true
extends:
- "plugin:drizzle/all"
parser: '@typescript-eslint/parser'
parserOptions:
project: './tsconfig.json'
plugins:
- drizzle현재 all은 recommended와 동일합니다
root: true
extends:
- "plugin:drizzle/recommended"
parser: '@typescript-eslint/parser'
parserOptions:
project: './tsconfig.json'
plugins:
- drizzle규칙
enforce-delete-with-where: .delete() 문에서 delete를 the.where() 절과 함께 사용하도록 강제합니다. 대부분의 경우 테이블의 모든 행을 삭제할 필요가 없으며 일종의 WHERE 문이 필요합니다.
오류 메시지:
Without `.where(...)` you will delete all the rows in a table. If you didn't want to do it, please use `db.delete(...).where(...)` instead. Otherwise you can ignore this rule here선택적으로 플러그인 옵션에서 string 또는 string[]을 허용하는 drizzleObjectName을 정의할 수 있습니다. 이는 Drizzle이 아닌 delete 메서드를 가진 객체나 클래스가 있을 때 유용합니다. 이러한 delete 메서드는 ESLint 규칙을 트리거합니다. 이를 방지하려면 코드베이스에서 사용하는 Drizzle 객체의 이름(예: db)을 정의하여 해당 객체의 delete 메서드에서만 규칙이 트리거되도록 할 수 있습니다:
예제, 설정 1:
"rules": {
"drizzle/enforce-delete-with-where": ["error"]
}class MyClass {
public delete() {
return {}
}
}
const myClassObj = new MyClass();
// ---> ESLint 규칙에 의해 트리거됩니다
myClassObj.delete()
const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됩니다
db.delete()예제, 설정 2:
"rules": {
"drizzle/enforce-delete-with-where": ["error", { "drizzleObjectName": ["db"] }],
}class MyClass {
public delete() {
return {}
}
}
const myClassObj = new MyClass();
// ---> ESLint 규칙에 의해 트리거되지 않습니다
myClassObj.delete()
const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됩니다
db.delete()enforce-update-with-where: .update() 문에서 update를 the.where() 절과 함께 사용하도록 강제합니다. 대부분의 경우 테이블의 모든 행을 업데이트할 필요가 없으며 일종의 WHERE 문이 필요합니다.
오류 메시지:
Without `.where(...)` you will update all the rows in a table. If you didn't want to do it, please use `db.update(...).set(...).where(...)` instead. Otherwise you can ignore this rule here선택적으로 플러그인 옵션에서 string 또는 string[]을 허용하는 drizzleObjectName을 정의할 수 있습니다. 이는 Drizzle이 아닌 delete 메서드를 가진 객체나 클래스가 있을 때 유용합니다. 이러한 update 메서드는 ESLint 규칙을 트리거합니다. 이를 방지하려면 코드베이스에서 사용하는 Drizzle 객체의 이름(예: db)을 정의하여 해당 객체의 delete 메서드에서만 규칙이 트리거되도록 할 수 있습니다:
예제, 설정 1:
"rules": {
"drizzle/enforce-update-with-where": ["error"]
}class MyClass {
public update() {
return {}
}
}
const myClassObj = new MyClass();
// ---> ESLint 규칙에 의해 트리거됩니다
myClassObj.update()
const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됩니다
db.update()예제, 설정 2:
"rules": {
"drizzle/enforce-update-with-where": ["error", { "drizzleObjectName": ["db"] }],
}class MyClass {
public update() {
return {}
}
}
const myClassObj = new MyClass();
// ---> ESLint 규칙에 의해 트리거되지 않습니다
myClassObj.update()
const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됩니다
db.update()