[Diesel.rs] select ์ ๋ฆฌ
์ด์ ํฌ์คํธ
https://blog.naver.com/sssang97/221836332593
diesel์์ ํ
์ด๋ธ์ ๊ฐ์ selectํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ค์ ๊ฐ๊ด์ ์ผ๋ก ์ ๋ฆฌํด๋ณธ๋ค.
ํ ์คํธํ ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ๋ค.


์๋๋ ๋ฐ์ดํฐ ๋งคํ์ฉ ๊ตฌ์กฐ์ฒด ํ์ ์ด๋ค.

์คํํ๋ ๋ฐฉ๋ฒ
์ผ๋จ select๋ table! ๋งคํฌ๋ก๋ก ์๋ ์์ฑ๋ test::dsl์ ํ ์ด๋ธ ๊ฐ test์์ ๋ค์์ ๋ฉ์๋๋ค์ ํธ์ถํ๋ ๊ฒ์ผ๋ก ์ํํ ์ ์๋ค.

load์ get_results๋ ์์ ํ ๋์ผํ ๋ฉ์๋์ธ๋ฐ, ๋ฐฐ์ด ํํ๋ก select๊ฐ๋ค์ ๊ฐ์ ธ์์ค๋ค.
get_result์ first๋ ๊ธฐ๋ฅ์ ๊ฑฐ์ ๋์ผํ๊ฒ ํ๋๋ง ๊ฐ์ ธ์ค๋๋ฐ, first๋ limit 1๋ฅผ ๋ฌ์์ค์ ๋์ฒด๋ก ์ฑ๋ฅ์ ์กฐ๊ธ ๋ ๋น ๋ฅผ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์ฐํ ์ด๋ฐ ์ ์ฒด select๋ง์ผ๋ก๋ ์ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์๊ฐ ์๋ค.
์ ํ
์ด๋ธ ๊ฐ์ฒด๋ QueryDsl์ด๋ ํธ๋ ์์ ๊ตฌํํ๋๋ฐ, ์ฌ๊ธฐ์๋ filter, limit, order ๋ฑ์ select์ ๋ถ๊ฐ์ ์ผ๋ก ๋ค๋ ๋ฌธ์ฅ๋ค์ ์ง์ํ๋ค.
https://docs.diesel.rs/diesel/query_dsl/trait.QueryDsl.html
๊ทธ๋ฆฌ๊ณ ์ด ๋ฉ์๋๋ค์ Self๋ฅผ ๋ค์ ๋ฐํํ๋ฏ๋ก ์ฒด์ด๋ ํ์์ผ๋ก ์ฐ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฐ ์์ผ๋ก ๋ง์ด๋ค.
test::dsl::test.fiter(...).order_by(...).limit(3).load();filter: ์กฐ๊ฑด์
filter๋ sql์์ ์ ํํ๊ฒ where์ ์ ํด๋นํ๋ค.
๋ณดํต dsl์ ์ปฌ๋ผ์ผ๋ก ํํ์ ์์ฑ์ ์ํ ํจ์๋ฅผ ํธ์ถํ๊ณ ๊ทธ ๊ฐ์ ์ธ์๋ก ์ ๋ฌํ๋ค.
๋๋ฑ ์ฐ์ฐ์์ธ =์ ๊ฒฝ์ฐ์๋ eq ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
์๋๋ id=3์ธ ๊ฐ์ ์ฝ์ด์ค๋ ์ฟผ๋ฆฌ๋ค.


์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฌ๋ ค๋ฉด filter๋ฅผ ์ฐ์ํด์ ํธ์ถํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์์๋ < ์ฐ์ฐ์์ lt, > ์ฐ์ฐ์์ gt๋ฅผ ์ฌ์ฉํ๋ค.


๋น์ฐํ between ๊ฐ์๊ฒ๋ ์๋ค.


order: ์์ ๋ถ์ฌ
์ด๊ฑด SQL์ order by์ ๋์๋๋ค.
์ธ์๋ก๋ dsl ์ปฌ๋ผ์ asc๋ desc๋ฅผ ํธ์ถํ ๊ฐ์ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
์๋๋ id๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ํํ ์ฟผ๋ฆฌ๋ค.


์ฌ๋ฌ ์ ๋ ฌ์กฐ๊ฑด์ ์ฃผ๊ณ ์ถ๋ค๋ฉด ํํ๋ก ๋ฌถ์ด์ ์ฃผ๋ฉด ๋๋ค.


offset&limit: ์๋ฅด๊ธฐ
์ด๊ฒ๋ SQL์ offset, limit์ ์์ ๋์๋๋ค.
ํน๋ณํ๊ฒ ์์ง๋ ์๋ค. offset์ ์กฐํํ ๋ชฉ๋ก ์ค์์ ์๋ฅด๊ธฐ ์์ํ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๊ณ , limit๋ ์ด ๋ช๊ฐ๊น์ง ์๋ผ์ฌ์ง๋ฅผ ์ ํํ๋ค.


select: ์ปฌ๋ผ ์ง์
๋ฐ๋ก ๋ญ ๊ฑธ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ค๋ฉด ์์ฒ๋ผ ๊ทธ๋ฅ ์ปฌ๋ผ ์ ์ฒด๋ฅผ ๋ค ๊ฐ์ ธ์๋ฒ๋ฆฐ๋ค.
์ผ๋ถ ์ปฌ๋ผ๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด select๋ก dsl ์ปฌ๋ผ์ ์ง์ ํ๋ฉด ๋๋ค.


์ฌ๋ฌ๊ฐ์ ์ปฌ๋ผ์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด ์ปฌ๋ผ๋ค์ ํํ๋ก ๋ฌถ์ด์ ๋์ง๋ค.


๊ทธ๋ฆฌ๊ณ select๋ฅผ ํ ๋ ์ด๋์ ๋ ๊ฐ์ ๊ฐ๊ณต์ ํ ์๋ ์๋ค.
๊ทธ๋ด๋๋ ์ปฌ๋ผ dsl ๊ฐ์ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์๊ฐ ์๊ฒ ๋ค.
์๋์ concat์ ๋ฌธ์์ด์ ์ฐ๊ฒฐํด์ฃผ๋ ํจ์๋ค. ||๋ก ๋ณํ๋ ๊ฒ์ด๋ค.


์ง๊ณํ๊ธฐ: count, sum, ...
count, sum ๋ฑ์ ์ง๊ณํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
group์ ๋์ค์ ํด๋ณด๊ณ ์ผ๋จ ์ ์ฒด์ง๊ณ๋ง ํด๋ณด๊ฒ ๋ค.
count๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค. count๋ ์ปฌ๋ผ์ ์ง์ ํด์ ์ง๊ณ, count_start๋ count(*)๋ค.


select ์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๋ ์ธ ์ ์๋ค. diesel::dsl์ ์ด๋ฐ ๊ณณ์ ์ฌ์ฉํ ์ ์๋ ํจ์๋ค์ด ์ ๊ณต๋๋ค.
๋ง์ฝ exists๋ก ์กด์ฌ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๊ณ ์ถ๋ค๋ฉด ์ด๋ ๊ฒ ํ๋ฉด ๋๋ค.


group์ ๋์ค์ ๋ฐ๋ก ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
์ฐธ์กฐ
https://docs.diesel.rs/diesel/query_dsl/trait.QueryDsl.html
https://docs.diesel.rs/diesel/query_dsl/trait.RunQueryDsl.html