콘텐츠로 이동

GlueSQL

  • 유형: 오픈소스 기여
  • 기간: 2021.06 - 현재

DISTINCT 실행 의미 구현

문제와 진단: SELECT DISTINCT 구문 정보가 GlueSQL의 Rust SQL 엔진 실행기(executor)까지 전달되지 않아 일반 SELECT와 같은 결과를 만들었습니다. 중복의 의미는 projection과 aggregate에서 서로 다른 상태를 기준으로 했습니다.

제약과 선택: DISTINCT가 아닌 기존 실행 결과는 바꾸지 않으면서, 최종 값이 만들어지는 두 상태 경계에서만 중복을 제거해야 했습니다. 지원하지 않는 DISTINCT ON은 명시적 오류로 처리했습니다.

도식을 좌우로 스크롤해 전체 흐름을 확인할 수 있습니다.

DISTINCT SQL 정보가 parser와 AST를 거쳐 query model에 전달되고, 실행 경로에 따라 projection 결과 행 또는 aggregate 입력 값을 중복 제거한 뒤 회귀 테스트로 확인합니다.

구현: parser/AST 결과를 query model에 전달하고, SQL executor의 row 중복 제거와 aggregate 처리, AST Builder API까지 연결했습니다. 값의 equality/hash와 map key order도 중복 판정이 흔들리지 않도록 보강했습니다.

검증과 결과: 단일·복수 column, map과 schemaless row, COUNT를 포함한 aggregate DISTINCT를 회귀 테스트로 확인했습니다. SQL 입력, 내부 표현, 실행 결과가 같은 의미를 유지하도록 기능과 테스트를 함께 반영했습니다.

AST Query Interface·Parquet Storage·CLI 구현

AST Query Interface

AST Builder aggregate helper와 COUNT argument 처리를 구현하고, aggregate 함수가 단순 column뿐 아니라 expression argument를 평가하도록 executor와 테스트를 수정했습니다.

Parquet Storage와 CLI

Parquet storage를 GlueSQL storage trait와 SQL 실행 경로에 연결하고 file read/write, schema·value 변환, 문서, 테스트, CLI 사용 흐름을 추가했습니다. 이후 clippy::pedantic 기준에 맞춰 관련 코드를 정리했습니다.

리뷰·멘토링·수상

gluesql/gluesql 병합 PR 50건을 작성했습니다. 현재 GlueSQL 리뷰어로 코드 리뷰와 유지보수에 참여하며, 기여자 PR의 오류 처리, edge case, 테스트 커버리지, 코드 구조를 검토합니다. 2023년에는 OSSCA 멘토로 Rust 프로젝트 기본 흐름, GlueSQL 구조, storage와 AST Builder, 함수 구현 방향을 안내했습니다.

연도 대회/프로그램 수상
2023 오픈소스 컨트리뷰션 아카데미 멘토로 참여한 GlueSQL 팀 수상: 정보통신산업진흥원장상(장려상)
2022 오픈소스 컨트리뷰션 아카데미 정보통신산업진흥원장상(최우수상)
2021 오픈소스 컨트리뷰션 아카데미 정보통신산업진흥원장상(최우수상)

관련 링크