[CBRD-27158] Set operations corrupt grouped aggregate/window - #3296
Merged
Merged
Conversation
|
Reviews (1): Last reviewed commit: "add alias" | Re-trigger Greptile |
tw-kang
approved these changes
Aug 18, 2026
ssihil
removed their request for review
August 18, 2026 05:10
kiho-um
added a commit
that referenced
this pull request
Aug 27, 2026
…ndow function corrupti… (#3314) http://jira.cubrid.org/browse/CBRD-27158 Purpose GROUP BY + 집계 + 윈도우 함수 + ORDER BY 쿼리가 집합 연산(UNION/INTERSECT/EXCEPT)에 포함될 때 결과 행이 깨지는 문제 (CUBRID/cubrid#7607). mq_rewrite_aggregate_as_derived에서 만드는 히든 derived 컬럼명이 unique하지 않아 발생. 기존 TC 수정(PR #3190, develop 머지 완료 / PR #3296, release/11.4 백포트 완료)은 CUBRID 고유 pseudocolumn(rownum, orderby_num(), groupby_num(), inst_num())과 GROUP BY/집합연산 조합만 커버했고, 실제 ANSI 윈도우 함수(OVER절)를 사용하는 시나리오는 검증되지 않았습니다. 이 TC는 그 공백을 메우기 위한 신규 전용 테스트입니다. Implementation Case 1~6 (최초 커버리지) Case 12: UNION ALL 두/한 분기에서 윈도우 함수 히든 컬럼 유니크성 Case 34: INTERSECT/EXCEPT에도 동일 fix 적용 확인 Case 5: 3-way UNION ALL Case 6: 집합연산 전체 결과에 대한 바깥 ORDER BY Case 7~8 (원본 Jira 재현 쿼리, 리뷰 요청으로 추가) Case 7: 원본 리포트의 재현 쿼리(repro_setop_t2/t3, 분기 자체에 ORDER BY) standalone 버전 Case 8: Case 7을 UNION으로 묶은 버전 — 원본 이슈가 실제로 보고된 그 모양 Case 9~16 (리뷰어 bagus-kim 제안 커버리지 확장) Case 9/10: 식 기준 ORDER BY(ca+1)로 만들어지는 히든 컬럼 Case 11/12: 같은 분기에 식 기준 ORDER BY 키 2개 Case 13/14: 분기 ORDER BY + LIMIT 조합 Case 15/16: 같은 분기에 윈도우 함수 2개 + 분기 ORDER BY 각 7~16 케이스는 "정상값 확인용 standalone" → "그 값이 UNION에서도 안 깨지는지 확인" 순서로 짝을 이룹니다. 리뷰 대응 수정 및 추가사항 Case 1~5: 집합연산 결과에 명시적 order by 추가 (병렬 워커로 인한 순서 비보장 리스크 제거) Case 2: row_number()/rank()에 grp 타이브레이크 추가 (동점 시 비결정적이었던 문제 수정) Case 3(INTERSECT)/Case 4(EXCEPT): 두 번째 분기를 실제로 다르게 만들어서 진짜 필터링이 일어나도록 수정 (기존엔 아무것도 안 걸러지고 있었음) Case 17: PARTITION BY 윈도우(카테고리별 누적합)를 UNION ALL 두 분기에서 — 분기별 파티션 키 히든 컬럼이 유니크한지 Case 18: 한 분기 안에 PARTITION BY 윈도우 함수 2개(row_number(), rank()) — 각 파티션 윈도우가 서로 다른 히든 컬럼을 갖는지 Case 19: Case 17 패턴을 INTERSECT로 — 두 번째 분기를 cat='A'로 실제로 다르게 만들어서 집합연산에서도 파티션 키 히든 컬럼이 유니크한지 Remarks CUBRID 11.5.0(develop, 여러 빌드)에서 16개 케이스 전부 실행 검증 완료. greptile-apps 자동 리뷰 2건 중 P1(순서 미보장)은 반영, P2(마스킹된 히든 이름)는 실제 결과값 비교로 충분히 커버된다고 판단해 별도 조치 없음. bagus-kim님 리뷰 코멘트 전부 반영 완료 (인라인 2건 + 일반 코멘트 Case 7~11 제안 전부). ssihil님 리뷰 코멘트 제안 — PARTITION BY 커버리지, Case 17~19) 3건 반영 완료
kiho-um
added a commit
to kiho-um/cubrid-testcases
that referenced
this pull request
Aug 31, 2026
…ndow function corrupti… (CUBRID#3314) http://jira.cubrid.org/browse/CBRD-27158 Purpose GROUP BY + 집계 + 윈도우 함수 + ORDER BY 쿼리가 집합 연산(UNION/INTERSECT/EXCEPT)에 포함될 때 결과 행이 깨지는 문제 (CUBRID/cubrid#7607). mq_rewrite_aggregate_as_derived에서 만드는 히든 derived 컬럼명이 unique하지 않아 발생. 기존 TC 수정(PR CUBRID#3190, develop 머지 완료 / PR CUBRID#3296, release/11.4 백포트 완료)은 CUBRID 고유 pseudocolumn(rownum, orderby_num(), groupby_num(), inst_num())과 GROUP BY/집합연산 조합만 커버했고, 실제 ANSI 윈도우 함수(OVER절)를 사용하는 시나리오는 검증되지 않았습니다. 이 TC는 그 공백을 메우기 위한 신규 전용 테스트입니다. Implementation Case 1~6 (최초 커버리지) Case 12: UNION ALL 두/한 분기에서 윈도우 함수 히든 컬럼 유니크성 Case 34: INTERSECT/EXCEPT에도 동일 fix 적용 확인 Case 5: 3-way UNION ALL Case 6: 집합연산 전체 결과에 대한 바깥 ORDER BY Case 7~8 (원본 Jira 재현 쿼리, 리뷰 요청으로 추가) Case 7: 원본 리포트의 재현 쿼리(repro_setop_t2/t3, 분기 자체에 ORDER BY) standalone 버전 Case 8: Case 7을 UNION으로 묶은 버전 — 원본 이슈가 실제로 보고된 그 모양 Case 9~16 (리뷰어 bagus-kim 제안 커버리지 확장) Case 9/10: 식 기준 ORDER BY(ca+1)로 만들어지는 히든 컬럼 Case 11/12: 같은 분기에 식 기준 ORDER BY 키 2개 Case 13/14: 분기 ORDER BY + LIMIT 조합 Case 15/16: 같은 분기에 윈도우 함수 2개 + 분기 ORDER BY 각 7~16 케이스는 "정상값 확인용 standalone" → "그 값이 UNION에서도 안 깨지는지 확인" 순서로 짝을 이룹니다. 리뷰 대응 수정 및 추가사항 Case 1~5: 집합연산 결과에 명시적 order by 추가 (병렬 워커로 인한 순서 비보장 리스크 제거) Case 2: row_number()/rank()에 grp 타이브레이크 추가 (동점 시 비결정적이었던 문제 수정) Case 3(INTERSECT)/Case 4(EXCEPT): 두 번째 분기를 실제로 다르게 만들어서 진짜 필터링이 일어나도록 수정 (기존엔 아무것도 안 걸러지고 있었음) Case 17: PARTITION BY 윈도우(카테고리별 누적합)를 UNION ALL 두 분기에서 — 분기별 파티션 키 히든 컬럼이 유니크한지 Case 18: 한 분기 안에 PARTITION BY 윈도우 함수 2개(row_number(), rank()) — 각 파티션 윈도우가 서로 다른 히든 컬럼을 갖는지 Case 19: Case 17 패턴을 INTERSECT로 — 두 번째 분기를 cat='A'로 실제로 다르게 만들어서 집합연산에서도 파티션 키 히든 컬럼이 유니크한지 Remarks CUBRID 11.5.0(develop, 여러 빌드)에서 16개 케이스 전부 실행 검증 완료. greptile-apps 자동 리뷰 2건 중 P1(순서 미보장)은 반영, P2(마스킹된 히든 이름)는 실제 결과값 비교로 충분히 커버된다고 판단해 별도 조치 없음. bagus-kim님 리뷰 코멘트 전부 반영 완료 (인라인 2건 + 일반 코멘트 Case 7~11 제안 전부). ssihil님 리뷰 코멘트 제안 — PARTITION BY 커버리지, Case 17~19) 3건 반영 완료
kiho-um
added a commit
that referenced
this pull request
Sep 1, 2026
…e answer for 11.4's leaner trace output (#3391) * [CBRD-27158] Add new test case for add SQL testcase for GROUP BY + window function corrupti… (#3314) http://jira.cubrid.org/browse/CBRD-27158 Purpose GROUP BY + 집계 + 윈도우 함수 + ORDER BY 쿼리가 집합 연산(UNION/INTERSECT/EXCEPT)에 포함될 때 결과 행이 깨지는 문제 (CUBRID/cubrid#7607). mq_rewrite_aggregate_as_derived에서 만드는 히든 derived 컬럼명이 unique하지 않아 발생. 기존 TC 수정(PR #3190, develop 머지 완료 / PR #3296, release/11.4 백포트 완료)은 CUBRID 고유 pseudocolumn(rownum, orderby_num(), groupby_num(), inst_num())과 GROUP BY/집합연산 조합만 커버했고, 실제 ANSI 윈도우 함수(OVER절)를 사용하는 시나리오는 검증되지 않았습니다. 이 TC는 그 공백을 메우기 위한 신규 전용 테스트입니다. Implementation Case 1~6 (최초 커버리지) Case 12: UNION ALL 두/한 분기에서 윈도우 함수 히든 컬럼 유니크성 Case 34: INTERSECT/EXCEPT에도 동일 fix 적용 확인 Case 5: 3-way UNION ALL Case 6: 집합연산 전체 결과에 대한 바깥 ORDER BY Case 7~8 (원본 Jira 재현 쿼리, 리뷰 요청으로 추가) Case 7: 원본 리포트의 재현 쿼리(repro_setop_t2/t3, 분기 자체에 ORDER BY) standalone 버전 Case 8: Case 7을 UNION으로 묶은 버전 — 원본 이슈가 실제로 보고된 그 모양 Case 9~16 (리뷰어 bagus-kim 제안 커버리지 확장) Case 9/10: 식 기준 ORDER BY(ca+1)로 만들어지는 히든 컬럼 Case 11/12: 같은 분기에 식 기준 ORDER BY 키 2개 Case 13/14: 분기 ORDER BY + LIMIT 조합 Case 15/16: 같은 분기에 윈도우 함수 2개 + 분기 ORDER BY 각 7~16 케이스는 "정상값 확인용 standalone" → "그 값이 UNION에서도 안 깨지는지 확인" 순서로 짝을 이룹니다. 리뷰 대응 수정 및 추가사항 Case 1~5: 집합연산 결과에 명시적 order by 추가 (병렬 워커로 인한 순서 비보장 리스크 제거) Case 2: row_number()/rank()에 grp 타이브레이크 추가 (동점 시 비결정적이었던 문제 수정) Case 3(INTERSECT)/Case 4(EXCEPT): 두 번째 분기를 실제로 다르게 만들어서 진짜 필터링이 일어나도록 수정 (기존엔 아무것도 안 걸러지고 있었음) Case 17: PARTITION BY 윈도우(카테고리별 누적합)를 UNION ALL 두 분기에서 — 분기별 파티션 키 히든 컬럼이 유니크한지 Case 18: 한 분기 안에 PARTITION BY 윈도우 함수 2개(row_number(), rank()) — 각 파티션 윈도우가 서로 다른 히든 컬럼을 갖는지 Case 19: Case 17 패턴을 INTERSECT로 — 두 번째 분기를 cat='A'로 실제로 다르게 만들어서 집합연산에서도 파티션 키 히든 컬럼이 유니크한지 Remarks CUBRID 11.5.0(develop, 여러 빌드)에서 16개 케이스 전부 실행 검증 완료. greptile-apps 자동 리뷰 2건 중 P1(순서 미보장)은 반영, P2(마스킹된 히든 이름)는 실제 결과값 비교로 충분히 커버된다고 판단해 별도 조치 없음. bagus-kim님 리뷰 코멘트 전부 반영 완료 (인라인 2건 + 일반 코멘트 Case 7~11 제안 전부). ssihil님 리뷰 코멘트 제안 — PARTITION BY 커버리지, Case 17~19) 3건 반영 완료 * [CBRD-27158-11.4] Backport from develop to 11.4 - fix query plan trace answer for 11.4's leaner trace output
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
아래 PR로 인한 TC 수정
CUBRID/cubrid#7607
backport to 11.4