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

Reply via email to