static rc_t TableWriterSeq_WriteStatistics(TableWriterSeq const *cself, KMDataNode *node) { pb_t pb; rc_t rc; KDataBuffer buf; rc = KDataBufferMake(&buf, 8 * sizeof(pb.stats[0]), cself->statsCount); if (rc) return rc; pb.stats = buf.base; pb.i = 0; rc = KVectorVisitU64(cself->stats, 0, stats_cb, &pb); if (rc == 0) { unsigned i; unsigned const n = cself->statsCount < 126 ? cself->statsCount : 126; uint64_t *const distance = buf.base; ksort(pb.stats, cself->statsCount, sizeof(pb.stats[0]), stats_cmp_count, NULL); ksort(pb.stats, n, sizeof(pb.stats[0]), stats_cmp_distance, NULL); for (i = 0; i != n; ++i) { distance[i] = pb.stats[i].distance; } rc = KMDataNodeWrite(node, distance, n * sizeof(distance[0])); } KDataBufferWhack(&buf); 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; }
static rc_t stats_data_init(stats_data_t *const self, VTable *const tbl, bool has_spot_group, bool compressed) { stats_data_init_funcs(self, has_spot_group); self->write = compressed ? group_stats_write_compressed : group_stats_write_no_compressed; group_stats_init(&self->table, 0, 0, 0); group_stats_init(&self->deflt, 0, 0, 0); RC_THROW(VTableOpenMetadataUpdate(tbl, &self->meta)); if (has_spot_group) { RC_THROW(KDataBufferMakeBytes(&self->names, 0)); RC_THROW(KDataBufferMake(&self->group, sizeof(group_stats_t) * 8, 0)); } return 0; }
static rc_t CC get_databuffer( KDataBuffer **rslt, const char *Name, size_t len ) { char name[4096]; char *x; rc_t rc; if (len >= sizeof(name)) return RC(rcVDB, rcFunction, rcConstructing, rcName, rcTooLong); memcpy(name, Name, len); name[len] = '\0'; x = getenv(name); rc = KDataBufferMake( *rslt, 8, (uint32_t)( len = strlen( x ) ) ); if (rc) return rc; memcpy((**rslt).base, x, len); return 0; }