File

class pf.file.PfFileId[소스]

기반 클래스: int

file의 ID를 나타내는 클래스입니다.

class pf.file.PfFileHeader(page: PfPage, offset: int, limit: int)[소스]

기반 클래스: PfLayoutView

file의 header를 나타내는 클래스입니다.

file header는 0번째 페이지에 저장됩니다. page content의 첫 8바이트를 사용하는 layout view입니다. layout view의 property를 사용 할 때는 항상 해당 page가 pin 되어있어야 합니다.

변수:
  • page_count (int) – file에 존재하는 page 수 (free page 포함).

  • first_free_pid (PfPageId) – file에 있는 가장 첫번째 free page의 ID. NO_FREE_PAGE 인 경우는 file에 free page가 없다는 뜻입니다.

PID = 0

file header가 들어있는 page의 ID.

NO_FREE_PAGE = -1

file에 free page가 없다는 뜻을 나타내는 상수.

property page_count: int
property first_free_pid: PfPageId
SIZE: int = 8

layout view의 크기.

class pf.file.PfFile(fid: PfFileId, path: Path, stream: BinaryIO, buffer_manager: PfBufferManager)[소스]

기반 클래스: object

file을 나타내는 클래스입니다.

변수:
  • fid (PfFileId) – file의 ID.

  • path (Path) – file의 경로.

  • stream (BinaryIO) – file의 I/O stream.

  • _buffer_manager (PfBufferManager) – 이 파일을 관리하는 buffer manager.

__init__(fid: PfFileId, path: Path, stream: BinaryIO, buffer_manager: PfBufferManager) None[소스]

file을 초기화합니다.

매개변수:
  • fid (PfFileId) – file의 ID.

  • path (Path) – file의 경로.

  • stream (BinaryIO) – file의 I/O stream.

  • buffer_manager (PfBufferManager) – 이 파일을 관리하는 buffer manager.

get_page(pid: PfPageId) PfPage[소스]

page를 가져옵니다. free page도 가져올 수 있습니다.

buffer manager 의 fetch_page 메서드를 사용합니다.

매개변수:

pid (PfPageId) – 대상 page의 ID.

반환:

가져온 page.

반환 형식:

PfPage

예외 발생:

PfInvalidPidErrorpid 가 유효하지 않은 경우.

find_next_allocated_page(pid: PfPageId) PfPage[소스]

file에 있는, pid 다음의 allocate된 page를 찾습니다. free page는 건너뜁니다.

매개변수:

pid (PfPageId) – 대상 page의 ID.

반환:

pid 다음에 있는 allocate된 page.

반환 형식:

PfPage

예외 발생:
allocate_page() PfPage[소스]

page를 allocate합니다.

free page가 없으면, 새로운 page를 allocate합니다. buffer manager 의 allocate_page 메서드를 사용하며, file header의 page_count 를 증가시킵니다.

free page가 있으면, 해당 page를 재활용 합니다. buffer manager 의 fetch_page 메서드를 사용하며, file header의 first_free_pid 를 재활용할 page header의 next_free_pid 로 업데이트 하고, page header의 next_free_pidNOT_IN_FREE_PAGE_LIST 로 업데이트 합니다. page data는 page의 clear_content 메서드를 사용하여 초기화합니다.

반환:

allocate된 page.

반환 형식:

PfPage

dispose_page(pid: PfPageId) None[소스]

page를 해제하여 free page로 만듭니다.

page header의 next_free_pid 를 file header의 first_free_pid 로 업데이트 하고, file header의 first_free_pid 를 해제할 page의 ID로 업데이트 합니다.

매개변수:

pid (PfPageId) – 대상 page의 ID.

예외 발생:
flush() int[소스]

file을 flush 합니다.

buffer manager 의 flush 메서드를 사용합니다.

반환:

write가 발생한 page의 수.

반환 형식:

int

예외 발생:

PfFlushingPinnedPageError – page가 pin 되어있어서 flush할 수 없는 경우.