rc_t WriteFileMeta(SIndexObj* obj) { rc_t rc = 0; KMDataNode* nd = NULL; PLOGMSG(klogInfo, (klogInfo, "Meta $(f) on index $(i): file size $(s), buffer $(b)", PLOG_4(PLOG_S(f),PLOG_S(i),PLOG_U64(s),PLOG_U32(b)), obj->file, obj->index, obj->file_size, obj->buffer_sz)); if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Format")) == 0 ) { KMDataNode* opt = NULL; rc = KMDataNodeWriteCString(nd, obj->format); if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(nd, &opt, "Options")) == 0 ) { KMDataNode* ond = NULL; if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "accession")) == 0 ) { rc = KMDataNodeWriteCString(ond, g_accession); KMDataNodeRelease(ond); } if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "minSpotId")) == 0 ) { rc = KMDataNodeWriteB64(ond, &obj->minSpotId); KMDataNodeRelease(ond); } if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "maxSpotId")) == 0 ) { rc = KMDataNodeWriteB64(ond, &obj->maxSpotId); KMDataNodeRelease(ond); } KMDataNodeRelease(opt); } KMDataNodeRelease(nd); } if( rc == 0 && obj->file_size > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Size")) == 0 ) { rc = KMDataNodeWriteB64(nd, &obj->file_size); KMDataNodeRelease(nd); } if( rc == 0 && obj->buffer_sz > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Buffer")) == 0 ) { rc = KMDataNodeWriteB32(nd, &obj->buffer_sz); KMDataNodeRelease(nd); } if( rc == 0 && strlen(obj->index) > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Index")) == 0 ) { rc = KMDataNodeWriteCString(nd, obj->index); KMDataNodeRelease(nd); } if( rc == 0 && obj->file_size > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "md5")) == 0 ) { char x[5]; int i; for( i = 0; rc == 0 && i < sizeof(obj->md5_digest); i++ ) { int l = snprintf(x, 4, "%02x", obj->md5_digest[i]); rc = KMDataNodeAppend(nd, x, l); } KMDataNodeRelease(nd); } return rc; }
LIB_EXPORT rc_t CC TableWriterSeq_Whack(const TableWriterSeq* cself, bool commit, uint64_t* rows) { rc_t rc = 0; if( cself != NULL ) { TableWriterSeq* self = (TableWriterSeq*)cself; VTable *vtbl; TableReader_Whack(cself->tmpkey_reader); if (commit && (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 ) { KMetadata* meta; if ((rc = VTableOpenMetadataUpdate(vtbl, &meta)) == 0) { KMDataNode* node = NULL; if (cself->stats) { if ((rc = KMetadataOpenNodeUpdate(meta, &node, "MATE_STATISTICS")) == 0) { rc = TableWriterSeq_WriteStatistics(cself, node); KMDataNodeRelease(node); } } if ((rc = KMetadataOpenNodeUpdate(meta, &node, "unaligned")) == 0) { KMDataNode *sub = NULL; KMDataNodeOpenNodeUpdate(node, &sub, "first-unaligned"); KMDataNodeWriteB64(sub, &self->firstUnaligned); KMDataNodeRelease(sub); KMDataNodeOpenNodeUpdate(node, &sub, "first-half-aligned"); KMDataNodeWriteB64(sub, &self->firstHalfAligned); KMDataNodeRelease(sub); KMDataNodeRelease(node); } KMetadataRelease(meta); } } rc = TableWriter_Whack(cself->base, commit && (rc == 0), rows); KVectorRelease(cself->stats); free(self->qual_buf); free(self); } return rc; }
static rc_t group_stats_write_node(KMDataNode *const node, char const name[], void const *const value) { KMDataNode *subnode; rc_t rc = KMDataNodeOpenNodeUpdate(node, &subnode, "%s", name); if (rc == 0) { rc = KMDataNodeWriteB64(subnode, value); KMDataNodeRelease(subnode); } return rc; }
static rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g, const int64_t spot_id, const uint32_t spot_len, const uint32_t bio_spot_len, const uint32_t cmp_spot_len) { rc_t rc = 0; uint64_t u64; int64_t i64; if( (rc = sra_meta_stats_node_read(g->node_spot_count, &u64)) == 0 ) { if( u64 + 1 < u64 ) { rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange); } else { if( spot_id != 0 ) { ++u64; } rc = KMDataNodeWriteB64(g->node_spot_count, &u64); } } if( (rc = sra_meta_stats_node_read(g->node_base_count, &u64)) == 0 ) { if( u64 + 1 < u64 ) { rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange); } else { u64 += spot_len; rc = KMDataNodeWriteB64(g->node_base_count, &u64); } } if( (rc = sra_meta_stats_node_read(g->node_bio_base_count, &u64)) == 0 ) { if( u64 + bio_spot_len < u64 ) { rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange); } else { u64 += bio_spot_len; rc = KMDataNodeWriteB64(g->node_bio_base_count, &u64); } } if( g->node_cmp_base_count != NULL ) { if( (rc = sra_meta_stats_node_read(g->node_cmp_base_count, &u64)) == 0 ) { if( u64 + cmp_spot_len < u64 ) { rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange); } else { u64 += cmp_spot_len; rc = KMDataNodeWriteB64(g->node_cmp_base_count, &u64); } } } if( (rc = sra_meta_stats_node_read(g->node_spot_max, &i64)) == 0 ) { if( i64 == 0 || i64 < spot_id ) { i64 = spot_id; rc = KMDataNodeWriteB64(g->node_spot_max, &i64); } } if( (rc = sra_meta_stats_node_read(g->node_spot_min, &i64)) == 0 ) { if( i64 == 0 || i64 > spot_id ) { i64 = spot_id; rc = KMDataNodeWriteB64(g->node_spot_min, &i64); } } return rc; }
static rc_t CC refseq_meta_stats( void *self, const VXformInfo *info, int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv [] ) { rc_t rc = 0; KMDataNode* node; refseq_meta_stats_data* data = self; uint64_t i, seq_len = argv[0].u.data.elem_count; const INSDC_4na_bin * seq = argv[0].u.data.base; seq += argv[0].u.data.first_elem; assert(data != NULL); if( data->buf_sz < seq_len ) { char* x = realloc(data->buf, seq_len); if( x == NULL ) { rc = RC(rcVDB, rcFunction, rcUpdating, rcMemory, rcExhausted); } else { data->buf = x; data->buf_sz = seq_len; } } for(i = 0; rc == 0 && i < seq_len; i++) { data->buf[i] = INSDC_4na_map_CHARSET[seq[i]]; } if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(data->stats, &node, "TOTAL_SEQ_LEN")) == 0 ) { if( data->total_seq_len + seq_len < data->total_seq_len ) { rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange); } else { data->total_seq_len += seq_len; rc = KMDataNodeWriteB64(node, &data->total_seq_len); } KMDataNodeRelease(node); } if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(data->stats, &node, "CRC32")) == 0 ) { data->crc32 = CRC32(data->crc32, data->buf, seq_len); rc = KMDataNodeWriteB32(node, &data->crc32); KMDataNodeRelease(node); } if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(data->stats, &node, "MD5")) == 0 ) { uint8_t digest[16]; MD5State md5; MD5StateAppend(&data->md5, data->buf, seq_len); memcpy(&md5, &data->md5, sizeof(md5)); MD5StateFinish(&md5, digest); rc = KMDataNodeWrite(node, digest, sizeof(digest)); KMDataNodeRelease(node); } return rc; }
inline rc_t WriteB64 ( const void *b64 ) throw() { return KMDataNodeWriteB64 ( this, b64 ); }