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]
> 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