BaseModelClass๋ ๋ชจ๋ Model์ด ์์๋ฐ๋ ๊ธฐ๋ณธ ํด๋์ค๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ, ์ฟผ๋ฆฌ ์คํ, ํธ๋์ญ์
๊ด๋ฆฌ ๋ฑ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ฉ์๋
getDB(preset)
Knex ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ฐํํฉ๋๋ค.preset:"r"(์ฝ๊ธฐ) ๋๋"w"(์ฐ๊ธฐ)
DBPreset ์ข
๋ฅ:
"r": Read - ์ฝ๊ธฐ ์ ์ฉ (SELECT)"w": Write - ์ฐ๊ธฐ ๊ฐ๋ฅ (INSERT, UPDATE, DELETE)
getPuri(preset)
Puri ์ฟผ๋ฆฌ ๋น๋๋ฅผ ๋ฐํํฉ๋๋ค. ํธ๋์ญ์ ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ฐ๊ฒฐ์ ์๋์ผ๋ก ์ฌ์ฉํฉ๋๋ค.preset:"r"(์ฝ๊ธฐ) ๋๋"w"(์ฐ๊ธฐ)
Subset ์ฟผ๋ฆฌ ๋ฉ์๋
getSubsetQueries(subset)
ํน์ Subset์ ๋ํ ์ฟผ๋ฆฌ ๋น๋๋ฅผ ๋ฐํํฉ๋๋ค.qb: ์ฟผ๋ฆฌ ๋น๋ (์กฐ๊ฑด ์ถ๊ฐ์ฉ)onSubset: Subset๋ณ ํ์ ์บ์คํ ํจ์
executeSubsetQuery(params)
Subset ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. ํ์ด์ง๋ค์ด์ , Loader, Hydration, Enhancer๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
queryMode ์ต์
:
์ฌ์ฉ ์์:
์คํ ์์: 1. COUNT ์ฟผ๋ฆฌ ์คํ (total ๊ณ์ฐ) 2. LIST ์ฟผ๋ฆฌ ์คํ (ํ์ด์ง๋ค์ด์
์ ์ฉ) 3. Loader
์คํ (HasMany, ManyToMany ๋ฐ์ดํฐ ๋ก๋ฉ) 4. Hydrate (flat ๊ฐ์ฒด โ ์ค์ฒฉ ๊ฐ์ฒด ๋ณํ) 5. Enhancer ์ ์ฉ
(virtual ํ๋ ๊ณ์ฐ) 6. Internal ํ๋ ์ ๊ฑฐ
createEnhancers(enhancers)
Enhancer ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํฌํผ ํจ์์ ๋๋ค. ํ์ ๊ฒ์ฆ๊ณผ ์ถ๋ก ์ ์ ๊ณตํฉ๋๋ค.์ ํธ๋ฆฌํฐ ๋ฉ์๋
getInsertedIds(wdb, rows, tableName, unqKeyFields, chunkSize)
์ฝ์ ๋ ๋ ์ฝ๋์ ID๋ฅผ ์กฐํํฉ๋๋ค. Unique ํค ๊ธฐ๋ฐ์ผ๋ก ์กฐํํ๋ฏ๋ก upsert ํ์ ์ ์ฉํฉ๋๋ค.
์ฌ์ฉ ์์:
hydrate(rows)
Flat ๋ ์ฝ๋๋ฅผ ์ค์ฒฉ ๊ฐ์ฒด๋ก ๋ณํํฉ๋๋ค. JOIN ๊ฒฐ๊ณผ์table__field ํ์์ ๊ฐ์ฒด๋ก ๋ณํํฉ๋๋ค.
user__nameโ{ user: { name } }user__profile__bioโ{ user: { profile: { bio } } }- nullable relation์ id๊ฐ null์ด๋ฉด ๊ฐ์ฒด ์ ์ฒด๋ฅผ null๋ก
hydrate()๋ executeSubsetQuery() ๋ด๋ถ์์ ์๋์ผ๋ก ํธ์ถ๋๋ฏ๋ก, ์ง์ ํธ์ถํ ์ผ์ ๊ฑฐ์ ์์ต๋๋ค.omitInternalFields(row, fields)
Internal ํ๋๋ฅผ ๊ฐ์ฒด์์ ์ ๊ฑฐํฉ๋๋ค. ์ค์ฒฉ ํ๋์ ๋ฐฐ์ด๋ ์ฒ๋ฆฌํฉ๋๋ค.Subset์
internal ์ต์
์ผ๋ก ์ง์ ๋ ํ๋๋ executeSubsetQuery()์์ ์๋์ผ๋ก ์ ๊ฑฐ๋ฉ๋๋ค.destroy()
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ํธ์ถํฉ๋๋ค.์ค์ ์ฌ์ฉ ํจํด
ํ์ค findMany ํจํด
๋ณต์กํ ํํฐ๋ง ํจํด
์ปค์คํ ์ง๊ณ ์ฟผ๋ฆฌ
๋ค์ ๋จ๊ณ
Puri Query Builder
ํ์
์์ ํ ์ฟผ๋ฆฌ ๋น๋ ์ฌ์ฉ๋ฒ
Subset
Subset ํ์ฉํ ๋ฐ์ดํฐ ์กฐํ
Transactions
ํธ๋์ญ์
๊ด๋ฆฌ ์์ธ ๊ฐ์ด๋
Testing
Model ํ
์คํธ ์์ฑํ๊ธฐ