(very good first issue) #41274 sql: Support aggregate functions for statistics
카크로치디비 이슈 #41274 sql: Support aggregate functions for statistics
개요
이슈 #41274는 PostgreSQL
에서 지원하는 aggregate function들의 구현을 요구하며, 대상은 아래와 같습니다.
- corr()
- covar_pop()
- covar_samp()
- regr_avgx()
- regr_avgy()
- regr_count()
- regr_intercept()
- regr_r2()
- regr_slope()
- regr_sxx()
- regr_syy()
- regr_sxy()
구현 가이드
scalar.opt
에 함수를 추가합니다.operator.go
의AggregateOpReverseMap
에 추가된 함수를 등록하고, 필요에 따라BoolOperatorRequiresNotNullArgs
,AggregateIgnoresNulls
,AggregateIsNullOnEmpty
를 적절히 수정합니다.groupby.go
의constructAggregate
분기에 추가된 함수를 등록합니다.aggregate_builtins.go
에서 구현 부분을 작성합니다. PostgreSQL 구현체를 참고하면 많은 도움이 됩니다.(corr
같은 경우는 SQL:2003 스펙에 따라 구현되었음).- 분산 SQL 처리를 위해
processors_sql.proto
의AggregatorSpec.Func
에 함수를 추가합니다. - 아래 항목에 대한 테스트를 추가합니다.
pkg/sql/logictest/testdata/logic_test/aggregate
pkg/sql/logictest/testdata/logic_test/distsql_agg
pkg/sql/opt/exec/execbuilder/testdata/distsql_agg
pkg/sql/opt/exec/execbuilder/testdata/explain
pkg/sql/opt/norm/testdata/rules/agg
pkg/sql/opt/optbuilder/testdata/aggregate
- vim syntax를 위해
crlogictest.vim
에 추가된 함수를 등록합니다.
팁
corr()
함수를 구현한 커밋 sql: supportcorr()
을 참고하시기 바랍니다.- 몇 가지 유용한 테스트 방법을 공유드립니다.
make test PKG=./pkg/sql/opt/norm
특정 패키지만 테스트합니다.make test FILES=aggregate
특정 파일만 테스트 합니다.make test TESTFLAGS=-rewrite
변경된 테스트 결과를 자동으로 변경합니다.make testlogic
SQL 로직만 테스트합니다.