Hi Iwan,

The prof:variables and prof:dump functions [1] give you some more
freedom to look into your running code. A prof:debug function would be
nice, and an additional debug() method could be a possible entry
point. The drawback is that there are hundreds of iter(), item() and
value() implementations in the code, and it would require rather big
efforts to make it happen. Another option would be to set a debug flag
and react on it every time an item is in the code is evaluated, but
this could slow execution time (we already lost some time when we
introduced a way to stop running queries via the
QueryContext.checkStop function).

More suggestions are welcome,
Christian

[1] http://docs.basex.org/wiki/Profiling_Module



On Wed, Jun 27, 2018 at 11:03 PM Iwan Briquemont <trac...@gmail.com> wrote:
>
> Hello,
>
> I use BaseX mostly for boolean queries, I have a hardware database and I 
> check if specific hardware support features I need.
>
> It works great but when something is not as expected, it's hard to find out 
> the reason.
>
> E.g. given an expression like:
>
> $some-value = $some-list and (custom:predicate() or $x > $y)
>
>
> I would like to know why it's true or false.
> For now I add trace() manually on the subexpressions, rerun, add trace to 
> more specific parts, etc.
>
> Ideally I would want to break down the query execution so it shows the values 
> of subparts of the query to pinpoint why it is false, e.g. have an output 
> like:
>
> $some-value = $some-list and (custom:predicate() or $x > $y) -> false()
>
> $some-value = $some-list -> true()
>
> $some-value -> 1
>
> $some-list -> (1, 2, ..., 10)
>
> custom:predicate() or $x > $y -> false()
>
> custom:predicate() -> false()
>
> ... # It should also go inside the function
>
> $x > $y -> false()
>
> $x -> 10
>
> $y -> 11
>
>
> Any ideas how it could be achieved?
> Looking at the code, maybe a debug() (like iter() or item()) method could be 
> added to Expr objects which would trace the expression query, file, line and 
> the result of the expression (or probably the first x characters of the 
> result to avoid huge output)? With an xquery function which would trigger it.
>
> I also thought of modifying the query programmatically to add trace() calls 
> but that seems overly complicated.
>
> Best regards,
> Iwan

Reply via email to