mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Split 'BufFile' routines out of fd.c into a new module, buffile.c. Extend
BufFile so that it handles multi-segment temporary files transparently. This allows sorts and hashes to work with data exceeding 2Gig (or whatever the local limit on file size is). Change psort.c to use relative seeks instead of absolute seeks for backwards scanning, so that it won't fail when the data volume exceeds 2Gig.
This commit is contained in:
47
src/include/storage/buffile.h
Normal file
47
src/include/storage/buffile.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* buffile.h
|
||||
* Management of large buffered files, primarily temporary files.
|
||||
*
|
||||
* The BufFile routines provide a partial replacement for stdio atop
|
||||
* virtual file descriptors managed by fd.c. Currently they only support
|
||||
* buffered access to a virtual file, without any of stdio's formatting
|
||||
* features. That's enough for immediate needs, but the set of facilities
|
||||
* could be expanded if necessary.
|
||||
*
|
||||
* BufFile also supports working with temporary files that exceed the OS
|
||||
* file size limit and/or the largest offset representable in an int.
|
||||
* It might be better to split that out as a separately accessible module,
|
||||
* but currently we have no need for oversize temp files without buffered
|
||||
* access.
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: buffile.h,v 1.1 1999/10/13 15:02:32 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef BUFFILE_H
|
||||
#define BUFFILE_H
|
||||
|
||||
#include "storage/fd.h"
|
||||
|
||||
/* BufFile is an opaque type whose details are not known outside buffile.c. */
|
||||
|
||||
typedef struct BufFile BufFile;
|
||||
|
||||
/*
|
||||
* prototypes for functions in buffile.c
|
||||
*/
|
||||
|
||||
extern BufFile *BufFileCreateTemp(void);
|
||||
extern BufFile *BufFileCreate(File file);
|
||||
extern BufFile *BufFileReaccess(BufFile *file);
|
||||
extern void BufFileClose(BufFile *file);
|
||||
extern size_t BufFileRead(BufFile *file, void *ptr, size_t size);
|
||||
extern size_t BufFileWrite(BufFile *file, void *ptr, size_t size);
|
||||
extern int BufFileSeek(BufFile *file, int fileno, long offset, int whence);
|
||||
extern void BufFileTell(BufFile *file, int *fileno, long *offset);
|
||||
|
||||
#endif /* BUFFILE_H */
|
||||
Reference in New Issue
Block a user