I forgot to reply to the mailing list too.
---------- Forwarded message ---------- From: Iwan Briquemont tracnar@gmail.com Date: 2018-06-28 10:51 GMT+02:00 Subject: Re: [basex-talk] Tracing query execution To: Fabrice ETANCHAUD fetanchaud@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 fetanchaud@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-bounces@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