Skip to content

[CBRD-27158] Set operations corrupt grouped aggregate/window - #3296

Merged
beyondykk9 merged 2 commits into
CUBRID:release/11.4from
beyondykk9:CBRD-27158-p11-4
Aug 18, 2026
Merged

beyondykk9 merged 2 commits into
CUBRID:release/11.4from
beyondykk9:CBRD-27158-p11-4

Conversation

@beyondykk9

Copy link
Copy Markdown
Contributor

아래 PR로 인한 TC 수정
CUBRID/cubrid#7607

backport to 11.4

@beyondykk9 beyondykk9 added this to the 11.4 milestone Aug 18, 2026
@beyondykk9 beyondykk9 self-assigned this Aug 18, 2026
@beyondykk9 beyondykk9 added the bug label Aug 18, 2026
@beyondykk9
beyondykk9 requested a review from tw-kang as a code owner August 18, 2026 04:55
@greptile-apps

greptile-apps Bot commented Aug 18, 2026

Copy link
Copy Markdown

Reviews (1): Last reviewed commit: "add alias" | Re-trigger Greptile

@ssihil
ssihil removed their request for review August 18, 2026 05:10
@beyondykk9
beyondykk9 merged commit e57c5f4 into CUBRID:release/11.4 Aug 18, 2026
1 check passed
@beyondykk9
beyondykk9 deleted the CBRD-27158-p11-4 branch August 18, 2026 07:48
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants