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

๐Ÿ—’๏ธย ๋ฐœํ‘œ์ž๋ฃŒ

https://docs.google.com/presentation/d/14jt84NOFgBZlR41AIjbc6N2LNWzkgYNjIRbhk2sGWdc/edit#slide=id.g1421bd87c53_2_22

๐Ÿง‘โ€๐ŸŽ“ ๋ฆฌ๋“œ๋ฉ˜ํ‹ฐ ์ •๋ณด

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


Challenges 2022. 07. 09. - 2022. 07. 30.

Masters 2022. 8. 11. - 2022. 10. 14.

</aside>

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

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


  1. [AST Builder] Add Agggregate functions

    ๊ธฐ๋Šฅ์ถ”๊ฐ€ #635

    ๊ธฐ์กด sum, max๋งŒ ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ๋˜ ast_builder/aggregate.rs์—์„œ min, avg, variance๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ExprNode๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜€๊ธฐ์— ๊ฐ„ํŽธํžˆ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ count์˜ ๊ฒฝ์šฐ ExprNode๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ wildcard๋กœ ๋ณ€ํ™˜์„ ํ•ด์•ผํ•˜๋Š” CountArgExpr enumํ˜•ํƒœ์—ฌ์„œ ๋‹ค๋ฅด๊ธฐ์— ์ด ๋ถ€๋ถ„๋งŒ ๋‚˜๋ˆ  ๋”ฐ๋กœ PR์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  2. [AST Builder] Implement Agggregate function COUNT

    ๊ธฐ๋Šฅ๊ฐœ์„  #656

    count๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ•จ์ˆ˜๋“ค์€ AggregateNode -> ExprNode -> Expr๋ฅผ fromํ•จ์ˆ˜๋กœ ์ž์œ ๋กญ๊ฒŒ ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ count์˜ ๊ฒฝ์šฐ Count(CountArgExpr)ํ˜•ํƒœ์˜€๊ธฐ์—ย AggregateNode -> CountArgExpr -> Expr๋˜๋Š” Wildcard๋กœ ๋ณ€ํ™˜ ์„ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„๋œ ๊ตฌ์กฐ ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ํ˜• ๋ณ€ํ™˜์„ ๊ฑฐ์ณ์•ผ ๋˜๋Š” ๊ตฌ์กฐ ์ˆ˜์ • ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด enum์ธ CountArgExprNode๋ฅผย  select_item_list.rs๋ฅผ ์ฐธ๊ณ ํ•ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœย AggregateNode -> CountArgExprNode -> CountArgExprํ˜•ํƒœ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ย CountArgExprNode๋Š” Text ๋˜๋Š” Expr๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด sql๋ฌธ์—์„œ "*"์ธ ๊ฒฝ์šฐ Text๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœย  CountArgExpr::Wildcard ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. Expr์ธ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์„ ๋ฐ”๋กœ parsingํ•  ์ˆ˜ ์žˆ๋Š” sqlparser ๋‚ด์žฅํ•จ์ˆ˜์ธ parse_expr๋กœ Expr๋ฅผ ์–ป์€ ํ›„ GlueSQL์ด ์ง€์›ํ•˜๋Š” ํ˜•ํƒœ์˜ Expr๋กœ ์น˜ํ™˜ํ•˜๋Š” translate_exprํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉฐ ์ด๋กœ์จ CountArgExpr::Expr(Expr)ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

  3. [Data] Add functionย sqrt for enum Value

    ๊ธฐ๋Šฅ์ถ”๊ฐ€ #675

    enum Value ์‚ฌ์ด sprtํ•จ์ˆ˜ ์ง€์›์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€์•Š์•„ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ f64์ด์™ธ I8, I16: I32, I64์— ๋Œ€ํ•ด sqrt๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”๋ฐ ์ด๋ฅผ ๋ชจ๋‘ f64๋กœ casting ํ›„ sqrtํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ string์ด๋‚˜ object, list, timestamp์— ๋Œ€ํ•ด sqrtํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ error ์ฒ˜๋ฆฌ๋ฅผ unit test๋กœ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ์–ด๋–ค type์ธ์ง€ ์ถœ๋ ฅํ•˜๋„๋ก Error๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์— Function๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ sqrtํ•จ์ˆ˜๊ฐ€ ๋ณ„๋„๋กœ ์ •์˜๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Š” Function์—์„œ parsingํ•œ value type์ด f64์ธ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋งŒ ์ง€์›ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„๋œ sqrtํ•จ์ˆ˜๋กœ ์ •์ˆ˜ํ˜•๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์ด ๊ฐœ์„ ๋˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  4. Add STDEV aggregate function

    ๊ธฐ๋Šฅ์ถ”๊ฐ€ #684

    ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์‚ฐ์˜ ์ œ๊ณฑ๊ทผ์ด ํ‘œ์ค€ํŽธ์ฐจ์ด๋ฏ€๋กœ ๋งŒ๋“  sqrtํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  5. Update aggregate function

    ๊ธฐ๋Šฅ๊ฐœ์„  #698

    ๊ธฐ์กด AggregateNode -> Expr๋กœ ๋ฐ”๋กœ type๋ณ€ํ™˜์„ ํ•˜๋Š” ๊ตฌ์กฐ์—์„œ ์ค‘๊ฐ„ type์ธ Aggregate๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด castingํ•˜๋Š” ํ˜•ํƒœ๋ผ ์ด๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. AggregateNode- > Aggregate -> Expr๋กœ ๋ณ€ํ™˜์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  6. [AST Builder] Update FunctionNode structure

    ๊ธฐ๋Šฅ๊ฐœ์„  #723

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ast builder๋‚ด type ๋ณ€ํ™˜์— ํ†ต์ผ์„ฑ์„ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด FunctionNode -> Expr์—์„œ FunctionNode -> Function -> Exprํ˜•ํƒœ๋กœ type ๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  7. Update aggregate functions to support Expr

๊ธฐ๋Šฅ๊ฐœ์„  #749

aggregate ํ•จ์ˆ˜์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ธ์ž๊ฐ€ 3์ข…๋ฅ˜ ๋ฟ์ด์—ˆ๋Š”๋ฐ ์ด๋ฅผ expr๋กœ ๋Œ€์ฒดํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์ˆ˜์‹์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” evaluateํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ์ด ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ stroage๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” I/O๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ async await ํ•จ์ˆ˜์˜€๋Š”๋ฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœํ•˜๋Š” ์ƒ์œ„ ํ•จ์ˆ˜๋“ค๋„ ํ•ด๋‹น ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— lifetime์ด ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜์–ด ๊ตฌํ˜„์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋˜ issue์˜€์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐํ•œ ๊ฒฐ๊ณผ ๋ถ€๋“์ดํ•˜๊ฒŒ indentation depth๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜์—ˆ๊ณ  ํ•ด์„ํ•˜๊ธฐ ํž˜๋“  code๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณ ๋ฏผ์ด ํ•„์š”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์ดํ›„ refactoring๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ blend์™€ filter context๋ฅผ ๋ฒˆ๊ฐˆ์•„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  group by having ์ ˆ์„ ๊ฒ€์‚ฌํ•ด ๊ณ„์‚ฐํ•˜๋Š” ๋ถ€๋ถ„์„ ํ•จ์ˆ˜๋กœ ๋นผ๋ƒ…๋‹ˆ๋‹ค.

  1. [Test Suite] Refacting tests

    ๊ธฐ๋Šฅ๊ฐœ์„  #782

    ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ test code์˜ ํ˜•์‹๊ณผ ์‚ฌ์šฉ ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•œ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ test ํ•จ์ˆ˜์˜ ์ธ์ž ์„œ์ˆœ์˜ ํ†ต์ผ๊ณผ file ์ •๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  2. [Data] add data type u8

    ๊ธฐ๋Šฅ์ถ”๊ฐ€ #838

    unsigned int type์— ๋Œ€ํ•ด์„œ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ numeric ๊ด€๋ จ casting ๋ฐ ์ •์ˆ˜๋ผ๋ฆฌ์˜ ์ƒํ˜ธ์ž‘์šฉ ๊ด€๋ จํ•œ ํ•จ์ˆ˜์— ๋Œ€ํ•ด unit test ๋ฐ integration test๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.