Thanks, Zhongbo, Your patch has been applied and included as part of FastBit revision 711.
John On 4/10/14, 7:27 PM, 田忠博(Zhongbo Tian) wrote: > Hi John, > > The patch is attached here. > > > 2014-04-11 4:24 GMT+08:00 K. John Wu <[email protected] <mailto:[email protected]>>: > > Thanks, 忠博. > > Would you mind resend the patch to bord.cpp as a separate file so that > I can more easily apply it? > > John > > > On 4/10/14, 4:16 AM, 田忠博 wrote: > > Hi, > > > > I'm building an in-memory system to analyse real-time logs and > > events, and find Fastbit an excellent fit. I use a ibis::tablex as > > insert buffer, then transfer the tablex as a ibis::part using > toTable. > > As parts generated, oldest ones will be discarded to save memory. > > Queries are performed as an ibis::liga of the parts list. I wrap > these > > routines as a python package, and thank to Fastbit, it works > like a charm. > > > > I find several minor issues, and try to fix with the following > patches: > > > > 1. Segfault with getColumnsAsStrings > > > > diff --git a/src/mensa.cpp b/src/mensa.cpp > > index 6ebe74d..71eb143 100755 > > --- a/src/mensa.cpp > > +++ b/src/mensa.cpp > > @@ -2283,8 +2283,6 @@ int64_t ibis::mensa::getColumnAsStrings(const > > char* cn, > > const ibis::column* col = dp.getColumn(cn); > > if (col == 0) > > return -3; > > - if (col->getValuesArray(&tmp) < 0) > > - return -4; > > > > size_t i0 = (begin > irow ? begin - irow : 0); > > const size_t i1 = (end>=irow+dp.nRows() ? > dp.nRows() : > > > > tmp will be cast as a pointer of vector and finally crash system, I > > think these should be a typo. > > > > 2. When using toTable method, the category fields do not have a > > dictionary with them. And when process LIKE queries, system crash. > > > > diff --git a/src/bord.cpp b/src/bord.cpp > > index 44d328d..441a954 100755 > > --- a/src/bord.cpp > > +++ b/src/bord.cpp > > @@ -6242,6 +6242,19 @@ long ibis::bord::column::patternSearch(const > > char* pat, > > return -2; > > } > > > > + if (0 == dic) { > > + ibis::util::timer mytimer(evt.c_str(), 3); > > + const std::vector<std::string>& > > + vals(*static_cast<const > std::vector<std::string>*>(buffer)); > > + > > + hits.clear(); > > + for (size_t j = 0; j < vals.size(); ++ j) { > > + if (ibis::util::strMatch(vals[j].c_str(), pat)) > > + hits.setBit(j, 1); > > + } > > + hits.adjustSize(0, thePart ? thePart->nRows() : > vals.size()); > > + } > > + else { > > const array_t<uint32_t>&vals(*static_cast<const > > array_t<uint32_t>*>(buffer)); > > > > if (pat == 0) { // null string can not match any thing > > @@ -6269,6 +6282,7 @@ long ibis::bord::column::patternSearch(const > > char* pat, > > } > > > > hits.adjustSize(0, thePart ? thePart->nRows() : vals.size()); > > + } > > return hits.cnt(); > > } // ibis::bord::column::patternSearch > > > > So, when dic is NULL, a walk-through match should be good enough. > > > > And finally, thanks for the excellent library. > > > > > > _______________________________________________ > > FastBit-users mailing list > > [email protected] <mailto:[email protected]> > > https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users > > > _______________________________________________ > FastBit-users mailing list > [email protected] <mailto:[email protected]> > https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users > > > > > _______________________________________________ > FastBit-users mailing list > [email protected] > https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users > _______________________________________________ FastBit-users mailing list [email protected] https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
