I forgot to reply to the mailing list too.

---------- Forwarded message ----------
From: Iwan Briquemont <trac...@gmail.com>
Date: 2018-06-28 10:51 GMT+02:00
Subject: Re: [basex-talk] Tracing query execution
To: Fabrice ETANCHAUD <fetanch...@pch.cerfrance.fr>


Hi Fabrice,

Indeed that's another solution. I also thought about restricting the
expression to a subset of what XQuery supports to implement what you
describe. But then the information would be restricted to the expressions
which follow that subset.
Note that I do not need to know how it is decided per-se for my
application, it is as a debugging feature.

Behind the boolean expressions there are also some more complicated queries
(like joining data from multiple sources), which is why I like to be able
to use XQuery all the way.
I think this kind of debugging would be useful for actual queries too.

Regards,
Iwan

2018-06-28 10:18 GMT+02:00 Fabrice ETANCHAUD <fetanch...@pch.cerfrance.fr>:

> Hi Iwan,
>
>
>
> IMHO it is more a design issue than a tool issue.
>
> If you need to know exactly where a boolean expression is decided,
>
> You might have to implement a boolean algebra interpreter.
>
> You could even describe your questions in xml format, to be interpreted by
> a recursive function against your hardware corpus.
>
>
>
> That way you could implement rules like :
>
> All ancestors are ‘and’ operators and my current node is ‘false’ => ‘false’
>
> All ancestors are ‘or’ operators’ and my current node is ‘true’ => ‘true’
>
> And detect exactly where your expression is decided.
>
>
>
> This make me think of the MarkLogic stored query feature.
>
>
>
> Sorry I just thought about that a few minutes,
>
> I hope it helps,
>
>
>
> Best regards,
>
> Fabrice
>
>
>
> *De :* BaseX-Talk [mailto:basex-talk-boun...@mailman.uni-konstanz.de] *De
> la part de* Iwan Briquemont
> *Envoyé :* mercredi 27 juin 2018 23:04
> *À :* basex-talk@mailman.uni-konstanz.de
> *Objet :* [basex-talk] Tracing query execution
>
>
>
> 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