λμ  μΏΌλ¦¬ λΉλ©
Drizzleμ λͺ¨λ  쿼리 λΉλλ κΈ°λ³Έμ μΌλ‘ SQLμ μ΅λν λ§μΆλ €κ³  νκΈ° λλ¬Έμ, λλΆλΆμ λ©μλλ ν λ²λ§ νΈμΆν  μ μμ΅λλ€. μλ₯Ό λ€μ΄, SELECT λ¬Έμμλ WHERE μ μ΄ νλλ§ μμ μ μμΌλ―λ‘ .where() λ©μλλ ν λ²λ§ νΈμΆν  μ μμ΅λλ€:
const query = db
    .select()
    .from(users)
    .where(eq(users.id, 1))
    .where(eq(users.name, 'John')); // β νμ
 μλ¬ - where()μ ν λ²λ§ νΈμΆν  μ μμ
μ΄μ  ORM λ²μ μμλ μ΄λ¬ν μ νμ΄ κ΅¬νλμ§ μμκΈ° λλ¬Έμ, λ§μ μ¬μ©μλ€μ΄ μ¬λ¬ .where() νΈμΆμ νλμ 쑰건μΌλ‘ βλ³ν©βν  κ²μΌλ‘ κΈ°λνλ©° νΌλμ κ²ͺμμ΅λλ€.
μ΄λ¬ν λμμ μΌλ°μ μΈ 쿼리 λΉλ©, μ¦ μ μ²΄ 쿼리λ₯Ό ν λ²μ μμ±ν  λ μ μ©ν©λλ€. νμ§λ§ 쿼리λ₯Ό λμ μΌλ‘ λΉλνλ €λ κ²½μ°, μλ₯Ό λ€μ΄ 쿼리 λΉλλ₯Ό λ°μμ μΆκ° κΈ°λ₯μ μ κ³΅νλ κ³΅μ  ν¨μλ₯Ό μ¬μ©ν  λ λ¬Έμ κ° λ©λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ Drizzleμ 쿼리 λΉλμ νΉλ³ν βλμ β λͺ¨λλ₯Ό μ κ³΅νλ©°, μ΄ λͺ¨λμμλ λ©μλλ₯Ό μ¬λ¬ λ² νΈμΆν  μ μμ΅λλ€. μ΄ λͺ¨λλ₯Ό νμ±ννλ €λ©΄ 쿼리 λΉλμμ .$dynamic()μ νΈμΆν΄μΌ ν©λλ€.
νμ΄μ§ λ²νΈμ μ νμ μΈ νμ΄μ§ ν¬κΈ°λ₯Ό κΈ°λ°μΌλ‘ 쿼리μ LIMITκ³Ό OFFSET μ μ μΆκ°νλ κ°λ¨ν withPagination ν¨μλ₯Ό ꡬνν΄ λ³΄κ² μ΅λλ€:
function withPagination(
    qb: T,
    page: number = 1,
    pageSize: number = 10,
) {
    return qb.limit(pageSize).offset((page - 1) * pageSize);
}
const query = db.select().from(users).where(eq(users.id, 1));
withPagination(query, 1); // β νμ
 μλ¬ - 쿼리 λΉλκ° λμ  λͺ¨λκ° μλ
const dynamicQuery = query.$dynamic();
withPagination(dynamicQuery, 1); // β
 μ μ λμ
withPagination ν¨μλ μ λ€λ¦ ν¨μμ΄κΈ° λλ¬Έμ, 쿼리 λΉλμ κ²°κ³Ό νμ
μ μμ ν  μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ‘°μΈμ μΆκ°ν  μ μμ΅λλ€:
function withFriends(qb: T) {
    return qb.leftJoin(friends, eq(friends.userId, users.id));
}
let query = db.select().from(users).where(eq(users.id, 1)).$dynamic();
query = withFriends(query);
μ΄λ PgSelectμ κ°μ νμ
λ€μ΄ λμ  μΏΌλ¦¬ λΉλ©μ μν΄ νΉλ³ν μ€κ³λμκΈ° λλ¬Έμ κ°λ₯ν©λλ€. μ΄λ¬ν νμ
λ€μ λμ  λͺ¨λμμλ§ μ¬μ©ν  μ μμ΅λλ€.
λ€μμ λμ  μΏΌλ¦¬ λΉλ©μμ μ λ€λ¦ λ§€κ°λ³μλ‘ μ¬μ©ν  μ μλ λͺ¨λ  νμ
 λͺ©λ‘μ
λλ€:
| Dialect | Type | 
| Query | Select | Insert | Update | Delete | 
| Postgres | PgSelect | PgInsert | PgUpdate | PgDelete | 
| PgSelectQueryBuilder | 
| MySQL | MySqlSelect | MySqlInsert | MySqlUpdate | MySqlDelete | 
| MySqlSelectQueryBuilder | 
| SQLite | SQLiteSelect | SQLiteInsert | SQLiteUpdate | SQLiteDelete | 
| SQLiteSelectQueryBuilder | 
...QueryBuilder νμ
λ€μ λ
립 μ€νν 쿼리 λΉλ μΈμ€ν΄μ€μ ν¨κ» μ¬μ©νκΈ° μν κ²μ
λλ€. λ°μ΄ν°λ² μ΄μ€ 쿼리 λΉλλ μ΄λ€μ νμ ν΄λμ€μ΄λ―λ‘, μ΄λ€λ μ¬μ©ν  μ μμ΅λλ€.
import { QueryBuilder } from 'drizzle-orm/pg-core';
function withFriends(qb: T) {
    return qb.leftJoin(friends, eq(friends.userId, users.id));
}
const qb = new QueryBuilder();
let query = qb.select().from(users).where(eq(users.id, 1)).$dynamic();
query = withFriends(query);