๐Ÿ†ย ์ •๋ณดํ†ต์‹ ์‚ฐ์—…์ง„ํฅ์›์žฅ์ƒ(์ตœ์šฐ์ˆ˜์ƒ)

๐Ÿง‘โ€๐ŸŽ“ ๋ฉ˜ํ‹ฐ๋กœ ์ฐธ์—ฌ

<aside> <img src="/icons/checkmark_lightgray.svg" alt="/icons/checkmark_lightgray.svg" width="40px" /> ๊ธฐ๊ฐ„


Challenges 2021. 08. 07. - 2021. 08. 31.

Masters 2021.09. 06. - 2021. 11. 19.

</aside>


โ–ถ๏ธ ํ”„๋กœ์ ํŠธ๋ช…: GlueSql


โ–ถ๏ธ ๊ธฐ์—ฌ ํ”„๋กœ์ ํŠธ ์„ค๋ช…

gluesql : rust ์ด์šฉ, DBMS๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ๋“œ๋Š” cost๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” rust library์ž…๋‹ˆ๋‹ค. ๋‚ด์žฅํ˜• db, web db๋“ฑ์„ crate import๋กœ ๊ฐ„๋‹จํžˆ ๊ฐ€์ ธ์™€ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sqlparser-rs : ์ฃผ์–ด์ง„ sql๋ฌธ์„ parsing ํ›„ tokenizeํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก rust๋กœ ๋งŒ๋“ค์–ด์ง„ lexer, parser์ž…๋‹ˆ๋‹ค. GlueSql์—์„œ ํ•ด๋‹น crate๋ฅผ importํ•ด parser๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—’๏ธ ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ํ™œ๋™๋‚ด์šฉ

โ–ถ๏ธ ํ”„๋กœ์ ํŠธ ํ™œ๋™ ๋‚ด์šฉ

Challenges 2021. 8. 7. - 2021. 8. 31.

Masters 2021. 9. 6. - 2021. 11. 19.


  1. ๊ธฐ๋Šฅ์ถ”๊ฐ€ #265

    Sql function REVERSE ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (2021.08.07 ~ 2021.08.26)

    rust์˜ ๋ฌธ๋ฒ•์„ rust book์„ ํ†ตํ•ด ๋ฐฐ์šฐ๋ฉฐ ๋™์‹œ์— project์˜ code๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์€ ๊ธฐ์กด์— ๋ฐฐ์šฐ๊ณ  5๋…„๊ฐ„ ์‚ฌ์šฉํ–ˆ์—ˆ๋˜ c++์–ธ์–ด์™€ ํก์‚ฌํ•œ ์ ์ด ์žˆ์–ด ์ „์ฒด์ ์ธ ๊ตฌ์กฐ์™€ ์ค„๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ›‘์–ด๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Project์˜ ๊ฒฝ์šฐ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ๊ณ  ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ๋˜ folder, file์„ ํ†ตํ•ด REVERSE ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ „์ฒด์ ์ธ sql๋ฌธ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ํ˜„์žฌ๋กœ์จ๋Š” table๊ณผ column์ด ๋งŒ๋“ค์–ด์ง„ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— column๋ช…์„ ํ•จ์ˆ˜์˜ parameter๋กœ ๋„˜๊ฒจ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด ๋ฐ˜ํ™˜ํ•˜๋Š” ์ œํ•œ์ ์ธ ๊ธฐ๋Šฅ๋งŒ์„ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ›„ ๊ฒ€์ฆ์„ ์œ„ํ•ด integration test๋ฅผ ์ž‘์„ฑํ•ด ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

    XOR๋ฅผ parser์— ์ถ”๊ฐ€ ํ›„ ๊ตฌํ˜„ : https://github.com/gluesql/gluesql/issues/354

  2. ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฒ„๊ทธ์ˆ˜์ • #329 #353

    Rust function PartialEq, PartialOrd test ์ž‘์„ฑ ๋ฐ bug ์ˆ˜์ • (2021.08.26 ~ 2021.08.30)

    rust๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ํ•œํŽธ rust์—์„œ ์ง€์›ํ•˜๋Š” ๋‚ด์žฅํ•จ์ˆ˜์ธ PartialEq, PartialOrd ๋ฅผ customizingํ•ด๋†“์€ ๋ถ€๋ถ„์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ unit test๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์—์„œ bug๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. PartialEqํ•จ์ˆ˜๊ฐ€ sql๋ฌธ์„ parsingํ•œ ํ›„ ๋‚˜์˜จ ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ data๋“ค(Boolean, Number, Text, Interval, Null)๋กœ ๋ถ„๋ฅ˜ํ•œ ํ›„ ๋‘ data๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ธฐ๋Šฅ์ธ๋ฐ ์ •์ˆ˜ 12์™€ 12.0์„ ๋‹ค๋ฅด๊ฒŒ ํŒ๋‹จํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•ด ์ˆ˜์ •ํ•œ ํ›„ unit test code๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ PartialOrd ํ•จ์ˆ˜๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋œ ๋‘ data๊ฐ’์— ๋Œ€ํ•ด ๊ฐ™์€์ง€, ํฐ์ง€, ์ž‘์€์ง€๋ฅผ ๋น„๊ตํ•ด Option<ordering> ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋ฉฐ ์ด์— ๋Œ€ํ•ด unit test code๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  3. ๊ธฐ๋Šฅ์ถ”๊ฐ€ #357 Logical XOR๋ฅผ parser์— ์ถ”๊ฐ€ (2021.08.30 ~ 2021.09.17)

    bitwise operator์ธ ^๋Š” ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋‚˜ ๋…ผ๋ฆฌ์ ์œผ๋กœ XORํ•˜๋Š” ๋ถ€๋ถ„์€ parser๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์ถ”๊ฐ€ํ•œ ๋’ค ์ œ๋Œ€๋กœ parsing์ด ๋˜๋Š”์ง€ test code๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

  4. ๊ธฐ๋Šฅ์ถ”๊ฐ€ #354 Boolean type์— ๋Œ€ํ•œ Logical XOR์˜ ๋™์ž‘์„ ๊ตฌํ˜„ (2021.08.30 ~ 2021.09.17)

    mariadb๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด Boolean type๋ผ๋ฆฌ์˜ ๋…ผ๋ฆฌ์  XOR๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. sqlparser ์—์„œ ์ž๋ฃŒํ˜• INT์— ๋Œ€ํ•ด parsingํ•˜๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋€Œ์–ด ๊ธฐ์กด project์ธ GlueSql๋„ updateํ•ด์คฌ์Šต๋‹ˆ๋‹ค. GlueSql์€ sqlparser๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.