@@ -76,10 +76,9 @@ map<string, int> import_readgroups(const string &table_prefix, sam_hdr_t *hdr, S
7676
7777// Given tab-split SAM line, write JSON dict of read's tags (aux) into out; return rg_id or -1
7878int write_tags_json (const map<string, int > &readgroups, const vector<char *> &sam_fields,
79- OStringStream &out) {
79+ vector< char *> &tag, OStringStream &out) {
8080 out << ' {' ;
8181 int rg_id = -1 ;
82- vector<char *> tag;
8382 bool first = true ;
8483 for (int c = 11 ; c < sam_fields.size (); ++c) {
8584 tag.clear ();
@@ -139,6 +138,7 @@ class SamReader : public BackgroundProducer<SamItem> {
139138 bam_hdr_t *hdr_;
140139 const map<string, int > &readgroups_;
141140 OStringStream tagsbuf_;
141+ vector<char *> tagsparsebuf_;
142142
143143 bool Produce (SamItem &it) override {
144144 it.Clear ();
@@ -158,9 +158,9 @@ class SamReader : public BackgroundProducer<SamItem> {
158158 throw runtime_error (" Corrupt SAM record; fields.size() = " +
159159 to_string (it.fields .size ()));
160160 }
161- // formulate tags JSON on here on background thread
161+ // formulate tags JSON here on background thread
162162 tagsbuf_.Clear ();
163- it.rg_id = write_tags_json (readgroups_, it.fields , tagsbuf_);
163+ it.rg_id = write_tags_json (readgroups_, it.fields , tagsparsebuf_, tagsbuf_);
164164 it.tags_json = tagsbuf_.Get ();
165165 return true ;
166166 }
@@ -327,8 +327,8 @@ int main(int argc, char *argv[]) {
327327 " reads_tags(rowid,tags_json) VALUES(?,?)" );
328328
329329 // stream bam1_t records
330- progress &&cerr << " inserting reads..." ;
331- SamReader reader (sam.get (), hdr.get (), readgroups, 64 );
330+ progress &&cerr << " inserting reads..." << endl ;
331+ SamReader reader (sam.get (), hdr.get (), readgroups, 256 );
332332 while (reader.next ()) {
333333 const SamItem &it = reader.item ();
334334 bam1_t *rec = it.rec .get ();
0 commit comments