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 >