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;
}
Exemple #2
0
/* 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;
}
Exemple #3
0
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;
}
Exemple #4
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;
}