Skip to content

fix(dataaccess): CalendarMapperTypeHandler 인덱스 getResult NULL 가드 추가#258

Open
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/dataaccess-calendar-typehandler-null
Open

fix(dataaccess): CalendarMapperTypeHandler 인덱스 getResult NULL 가드 추가#258
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/dataaccess-calendar-typehandler-null

Conversation

@z3rotig4r

Copy link
Copy Markdown
Contributor

문제

CalendarMapperTypeHandler의 인덱스 기반 getResult(ResultSet, int)에 NULL 가드가 없다. 컬럼명 기반 형제 메서드는 가드가 있다.

// 컬럼명 변형 — NULL 가드 있음
public Calendar getResult(ResultSet rs, String columnName) throws SQLException {
    java.util.Calendar cal = java.util.Calendar.getInstance();
    if (rs.getTimestamp(columnName) == null) {
        return null;
    } else { ... }
}

// 인덱스 변형 — 가드 없음
public Calendar getResult(ResultSet rs, int columnIndex) throws SQLException {
    java.util.Calendar cal = java.util.Calendar.getInstance();
    java.sql.Timestamp ts = rs.getTimestamp(columnIndex);  // NULL이면 ts=null
    cal.setTime(ts);                                       // NullPointerException
    return cal;
}

NULL Timestamp 컬럼을 인덱스로 매핑하면 Calendar.setTime(null)에서 NullPointerException이 발생한다. MyBatis가 인덱스 기반 매핑 경로에서 이 메서드를 호출할 때 노출된다.

수정

형제 메서드와 동일한 NULL 가드를 대칭으로 추가했다.

public Calendar getResult(ResultSet rs, int columnIndex) throws SQLException {
    java.util.Calendar cal = java.util.Calendar.getInstance();
    if (rs.getTimestamp(columnIndex) == null) {
        return null;
    } else {
        java.sql.Timestamp ts = rs.getTimestamp(columnIndex);
        cal.setTime(ts);
        return cal;
    }
}
  • NULL 컬럼은 형제 메서드와 동일하게 null을 반환한다.
  • 비-NULL 값의 변환 동작은 종전과 동일하다.

테스트

CalendarMapperTypeHandlerTest 신규 2건, 모듈 통과. 기존 테스트 컨벤션(JDK Proxy ResultSet)을 따라 외부 의존성 없이 검증한다.

  • nullColumnReturnsNullWithoutNpe: NULL 컬럼 → 예외 없이 null
  • nonNullColumnConverts: 비-NULL → millis 일치 변환

인덱스 기반 getResult(ResultSet, int)가 컬럼명 기반 형제 메서드와 달리
NULL Timestamp 컬럼에 대한 가드가 없어, NULL 컬럼을 인덱스로 매핑할 때
Calendar.setTime(null)로 NullPointerException이 발생했다. 형제 메서드와
동일하게 NULL이면 null을 반환하도록 가드를 대칭 추가했다. 비-NULL 값의
변환 동작은 종전과 동일하다.

테스트: NULL 컬럼 null 반환·비-NULL 변환 2건 추가.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant