Class DocResultImpl

java.lang.Object
com.altibase.document.impl.DocResultImpl
All Implemented Interfaces:
DocResult, FetchResult<AltibaseDocument>, AutoCloseable, Iterable<AltibaseDocument>, Iterator<AltibaseDocument>

public class DocResultImpl extends Object implements DocResult
`java.sql.ResultSet`을 표준 Iterator 인터페이스로 변환한다. 이 클래스는 두 가지 모드로 동작한다:
  1. 라이브 스트리밍 모드: 처음에는 데이터베이스의 live `ResultSet`으로부터 데이터를 순차적으로 가져온다.
  2. 인메모리 캐시 모드: `ResultSet`의 모든 데이터를 읽고 나면, 내부 리스트(mFetchList)에 모든 문서를 저장하고 `ResultSet`과 `Statement`를 닫는다. 이후에는 메모리에 캐시된 데이터를 기반으로 반복 작업을 수행하여, 결과 객체의 재사용이 가능하다.
`fetchAll()`, `count()` 등의 전체 조회 메서드를 호출하면 즉시 인메모리 캐시 모드로 전환된다.
  • Constructor Details

    • DocResultImpl

      public DocResultImpl(ResultSet aRs, Statement aStmt, AltibaseCollection aCollection)
      지정된 JDBC 리소스와 컬렉션 컨텍스트를 사용하여 새로운 DocResultImpl 인스턴스를 생성한다.

      이 생성자로 생성된 인스턴스는 초기에 '라이브 스트리밍 모드'로 동작한다. 이 클래스는 전달받은 ResultSetStatement의 생명주기를 관리할 책임을 가지며, 반복 작업이 완료되면 내부적으로 리소스를 안전하게 해제한다.

      Parameters:
      aRs - 데이터를 스트리밍할 원본 JDBC ResultSet. null이 아니어야 한다.
      aStmt - aRs를 생성한 JDBC Statement. aRs와 함께 닫아야 할 리소스이다.
      aCollection - 조회된 데이터를 AltibaseDocument로 변환하는 데 사용할 컬렉션. 팩토리 역할을 수행한다.
  • Method Details

    • hasNext

      public boolean hasNext()
      다음에 반환할 문서가 있는지 확인한다. 라이브 스트리밍 모드에서는 `ResultSet`에서, 인메모리 캐시 모드에서는 내부 리스트에서 확인한다.
      Specified by:
      hasNext in interface Iterator<AltibaseDocument>
    • next

      public AltibaseDocument next()
      다음 문서를 반환하고 커서를 이동시킨다.
      Specified by:
      next in interface Iterator<AltibaseDocument>
    • close

      public void close()
      DB 리소스를 해제한다. 이 메서드가 호출되면 인메모리 캐시 모드로 전환된다. 이 메서드는 외부에서 호출할 수 있지만, 보통은 모든 데이터를 읽었을 때 내부적으로 호출된다.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface FetchResult<AltibaseDocument>
    • fetchAll

      public List<AltibaseDocument> fetchAll()
      모든 문서를 가져와 리스트에 담아 반환한다. 이 메서드 호출 후에는 인메모리 캐시 모드로 전환되며, 결과 객체를 재사용하여 반복할 수 있다. 재사용 시에는 rewind()를 호출하여 커서를 처음으로 되돌리는 것이 좋다.
      Specified by:
      fetchAll in interface FetchResult<AltibaseDocument>
      Returns:
      결과셋의 모든 항목을 담은 List
    • count

      public long count()
      결과 집합에 포함된 문서의 총 개수를 반환한다. 내부적으로 모든 문서를 가져오므로, 이 메서드 호출 후에는 인메모리 캐시 모드로 전환된다.
      Specified by:
      count in interface FetchResult<AltibaseDocument>
      Returns:
      결과셋의 전체 항목 수
    • rewind

      public void rewind()
      캐시된 결과의 이터레이터 커서를 처음으로 되돌린다. 이 메서드는 모든 결과가 메모리에 로드된 후에만 호출할 수 있다.
      Specified by:
      rewind in interface DocResult
      Throws:
      IllegalStateException - 아직 데이터베이스로부터 스트리밍 중일 때 호출된 경우