์ฟผ๋ฆฌ ์ฑ๋ฅ
Drizzle์ ๊ดํด์๋ โ ์ฐ๋ฆฌ๋ SQL ์์ ๊ฑฐ์ 0์ ๊ฐ๊น์ด ์ค๋ฒํค๋๋ฅผ ๊ฐ์ง ์์ TypeScript ๋ ์ด์ด์ด๋ฉฐ, ์ค์ ๋ก 0์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ค๋น๋ ๋ฌธ API๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ค์ด ๋ฐ์ํฉ๋๋ค:
- ์ฟผ๋ฆฌ ๋น๋์ ๋ชจ๋ ๊ตฌ์ฑ์ด SQL ๋ฌธ์์ด๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค
- ํด๋น ๋ฌธ์์ด๊ณผ ๋งค๊ฐ๋ณ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ๋ก ์ ์ก๋ฉ๋๋ค
- ๋๋ผ์ด๋ฒ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ด๋๋ฆฌ SQL ์คํ ๊ฐ๋ฅ ํ์์ผ๋ก ์ปดํ์ผํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์กํฉ๋๋ค
์ค๋น๋ ๋ฌธ์ ์ฌ์ฉํ๋ฉด Drizzle ORM ์ธก์์ SQL ์ฐ๊ฒฐ์ ํ ๋ฒ๋ง ์ํํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ๋ ๋งค๋ฒ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ SQL์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋๊ท๋ชจ SQL ์ฟผ๋ฆฌ์์ ๊ทน๋์ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ค๋น๋ ๋ฌธ์ ์ง์ํ๋ฉฐ, ๋๋ก๋ Drizzle ORM์ด better-sqlite3 ๋๋ผ์ด๋ฒ๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ๋ ์ ์์ต๋๋ค.
์ค๋น๋ ๋ฌธ
const db = drizzle(...);
const prepared = db.select().from(customers).prepare("statement_name");
const res1 = await prepared.execute();
const res2 = await prepared.execute();
const res3 = await prepared.execute();ํ๋ ์ด์คํ๋
๋์ ๋ฐํ์ ๊ฐ์ ํฌํจํด์ผ ํ ๋๋ง๋ค sql.placeholder(...) API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค
import { sql } from "drizzle-orm";
const p1 = db
.select()
.from(customers)
.where(eq(customers.id, sql.placeholder('id')))
.prepare("p1")
await p1.execute({ id: 10 }) // SELECT * FROM customers WHERE id = 10
await p1.execute({ id: 12 }) // SELECT * FROM customers WHERE id = 12
const p2 = db
.select()
.from(customers)
.where(sql`lower(${customers.name}) like ${sql.placeholder('name')}`)
.prepare("p2");
await p2.execute({ name: '%an%' }) // SELECT * FROM customers WHERE name ilike '%an%'