/* Open */ rc_t KColumnIdx2OpenRead ( KColumnIdx2 *self, const KDirectory *dir, uint64_t eof ) { rc_t rc = KDirectoryOpenFileRead ( dir, ( const KFile** ) & self -> f, "idx2" ); #if IDX2_READ_FILE_BUFFER if ( rc == 0 ) { KFile * orig = self -> f; rc = KBufFileMakeRead ( ( const KFile** ) & self -> f, self -> f, eof + 1 ); if ( rc == 0 ) { KFileRelease ( orig ); } else { self -> f = orig; rc = 0; } } #endif if ( rc == 0 ) rc = KColumnIdx2Init ( self, eof ); return rc; }
/* Open */ rc_t KColumnDataOpenRead ( KColumnData *self, const KDirectory *dir, uint64_t eof, size_t pgsize ) { rc_t rc = KDirectoryVOpenFileRead ( dir, & self -> f, "data", NULL ); #if DATA_READ_FILE_BUFFER if ( rc == 0 ) { const KFile * orig = self -> f; rc = KBufFileMakeRead ( & self -> f, self -> f, DATA_READ_FILE_BUFFER ); if ( rc == 0 ) { KFileRelease ( orig ); } else { self -> f = orig; rc = 0; } } #endif if ( rc == 0 ) rc = KColumnDataInit ( self, eof, pgsize ); return rc; }
rc_t make_lookup_reader( const KDirectory *dir, const struct index_reader * index, struct lookup_reader ** reader, size_t buf_size, const char * fmt, ... ) { rc_t rc; const struct KFile * f = NULL; va_list args; va_start ( args, fmt ); rc = KDirectoryVOpenFileRead( dir, &f, fmt, args ); if ( rc != 0 ) { char tmp[ 4096 ]; size_t num_writ; rc_t rc1 = string_vprintf( tmp, sizeof tmp, &num_writ, fmt, args ); if ( rc1 != 0 ) ErrMsg( "make_lookup_reader.KDirectoryVOpenFileRead( '?' ) -> %R", rc ); else ErrMsg( "make_lookup_reader.KDirectoryVOpenFileRead( '%s' ) -> %R", tmp, rc ); } else { const struct KFile * temp_file = NULL; rc = KBufFileMakeRead( &temp_file, f, buf_size ); KFileRelease( f ); if ( rc != 0 ) { ErrMsg( "make_lookup_reader.KBufFileMakeRead() -> %R", rc ); } else { lookup_reader * r = calloc( 1, sizeof * r ); if ( r == NULL ) { KFileRelease( temp_file ); rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted ); ErrMsg( "make_lookup_reader.calloc( %d ) -> %R", ( sizeof * r ), rc ); } else { r->f = temp_file; r->index = index; rc = make_SBuffer( &r->buf, 4096 ); if ( rc == 0 ) *reader = r; else release_lookup_reader( r ); } } } va_end ( args ); return rc; }
/* Open */ rc_t KColumnIdx2OpenRead ( KColumnIdx2 *self, const KDirectory *dir, uint64_t eof ) { rc_t rc; rc = KDataBufferMake ( & self -> cstorage, sizeof ( KColumnIdx2BlockCache ) * 8, 0 ); if ( rc != 0 ) { memset ( self, 0, sizeof * self ); return rc; } self -> last = 0; if ( eof == 0 ) { #if 0 KDataBufferResize(&self->cstorage,0); self -> last = 0; #endif self -> eof = 0; self -> f = NULL; return 0; } rc = KDirectoryVOpenFileRead ( dir, & self -> f, "idx2", NULL ); #if IDX2_READ_FILE_BUFFER if ( rc == 0 ) { const KFile * orig = self -> f; rc = KBufFileMakeRead ( & self -> f, self -> f, IDX2_READ_FILE_BUFFER ); if ( rc == 0 ) { KFileRelease ( orig ); } else { self -> f = orig; rc = 0; } } #endif if ( rc == 0 ) rc = KColumnIdx2Init ( self, eof ); return rc; }