Processing stack traces in XQuery code

Thursday, 11 January 2024 · 8 messages · last reply 15 Jan 2024
OS
Omar Siam11 Jan 2024 12:15 #
Hi, Until 10.6 one could find the stack trace of an error in $err:additional. This feature is now gone from BaseX and the documentation. I made my life much easier with reporting stack traces on errors in RestXQ endpoints. Now I don't see how to get that information anymore. Any advice how to get this functionality back? Best regards
-- Mag. Ing. Omar Siam Austrian Center for Digital Humanities and Cultural Heritage Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences Stellvertretende Behindertenvertrauensperson | Deputy representative for disabled persons Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria T: +43 1 51581-7295 omar.siam at oeaw.ac.at | www.oeaw.ac.at/acdh
MH
Martin Honnen11 Jan 2024 12:19 #
Quoted text · Omar Siam · 9 lines
> Am 11.01.2024 um 12:15 schrieb Omar Siam <Omar.Siam at oeaw.ac.at>: > > Hi, > > Until 10.6 one could find the stack trace of an error in $err:additional. This feature is now gone from BaseX and the documentation. > > I made my life much easier with reporting stack traces on errors in RestXQ endpoints. Now I don't see how to get that information anymore. > > Any advice how to get this functionality back?
It might be that https://qt4cg.org/specifications/xpath-functions-40/Overview.html#func-stack-trace is already supported (but I haven´t checked).
OS
Omar Siam11 Jan 2024 12:37 #
I get: Unknown function: fn:stack-trace() when I use stack-trace(). I am not sure if this is meant as the equivalent of the stack trace where the error occured. This is what I got in the next catch block which might be anywhere, in my case in an unrelated module that implements a catch all and report functionality.
Quoted text · Martin Honnen · 20 lines
Am 11.01.2024 um 12:19 schrieb Martin Honnen: > > >> Am 11.01.2024 um 12:15 schrieb Omar Siam <Omar.Siam at oeaw.ac.at>: >> >> Hi, >> >> Until 10.6 one could find the stack trace of an error in >> $err:additional. This feature is now gone from BaseX and the >> documentation. >> >> I made my life much easier with reporting stack traces on errors in >> RestXQ endpoints. Now I don't see how to get that information anymore. >> >> Any advice how to get this functionality back? > > It might be that > https://qt4cg.org/specifications/xpath-functions-40/Overview.html#func-stack-trace is > already supported (but I haven´t checked). >
-- Mag. Ing. Omar Siam Austrian Center for Digital Humanities and Cultural Heritage Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences Stellvertretende Behindertenvertrauensperson | Deputy representative for disabled persons Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria T: +43 1 51581-7295 omar.siam at oeaw.ac.at |www.oeaw.ac.at/acdh
MH
Martin Honnen11 Jan 2024 12:39 #
Quoted text · Omar Siam · 5 lines
> Am 11.01.2024 um 12:37 schrieb Omar Siam <Omar.Siam at oeaw.ac.at>: > > I get: Unknown function: fn:stack-trace() when I use stack-trace(). > >
Ah, sorry, it looks like it is not yet implemented. Wait for Christian to give you hopefully some better info than my ill guess.
OS
Omar Siam11 Jan 2024 12:52 #
I think stack traces were removed in this commit from basex-core/src/main/java/org/basex/query/expr/Catch.java Revision: fc2376f6c9c250babfac7a7161b8a61740878b2b Author: Christian Grün <cg at basex.org> Date: 17.05.2023 11:25:01 Message: [XQ4] try/catch, $err:map ---- Modified: basex-api/src/main/java/org/basex/http/restxq/RestXqFunction.java Modified: basex-core/src/main/java/org/basex/query/QueryParser.java Modified: basex-core/src/main/java/org/basex/query/expr/Catch.java Modified: basex-core/src/test/java/org/basex/query/expr/XQuery4Test.java line 141 -> 151 qe.getMessage() is now replaced with an Empty.VALUE const.
Quoted text · Martin Honnen · 11 lines
Am 11.01.2024 um 12:39 schrieb Martin Honnen: > > >> Am 11.01.2024 um 12:37 schrieb Omar Siam <Omar.Siam at oeaw.ac.at>: >> >> I get: Unknown function: fn:stack-trace() when I use stack-trace(). >> >> > Ah, sorry, it looks like it is not yet implemented. Wait for Christian > to give you hopefully some better info than my ill guess. >
-- Mag. Ing. Omar Siam Austrian Center for Digital Humanities and Cultural Heritage Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences Stellvertretende Behindertenvertrauensperson | Deputy representative for disabled persons Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria T: +43 1 51581-7295 omar.siam at oeaw.ac.at |www.oeaw.ac.at/acdh
CG
Christian Grün12 Jan 2024 14:14 #
Hi Omar, Thanks for your observation. We have removed the BaseX-specific string output, as it was redundant. You should be able to reproduce the old output as follows (using the new XQuery 4 string template syntax):
`Stopped at { $err:module }, { $err:line-number }/{ $err:column-number }:
{ $err:description }`
As you’ve already discovered the responsible commit, you may have discovered the new XQuery 4 $err:map variable: It bundles all other error values into a single variable. And @Martin Honnen thanks for mentioning fn:stack-trace. The function is still under discussion and might be dropped again: The specification gives processors much freedom in optimizing its expressions, so it’s hardly possible to define the function in a way that’s not completely implementation-defined. Hope this helps, Christian
Quoted text · Omar Siam · 42 lines
On Thu, Jan 11, 2024 at 12:52 PM Omar Siam <Omar.Siam at oeaw.ac.at> wrote: > I think stack traces were removed in this commit from > basex-core/src/main/java/org/basex/query/expr/Catch.java > > Revision: fc2376f6c9c250babfac7a7161b8a61740878b2b > Author: Christian Grün <cg at basex.org> <cg at basex.org> > Date: 17.05.2023 11:25:01 > Message: > [XQ4] try/catch, $err:map > > ---- > Modified: basex-api/src/main/java/org/basex/http/restxq/RestXqFunction.java > Modified: basex-core/src/main/java/org/basex/query/QueryParser.java > Modified: basex-core/src/main/java/org/basex/query/expr/Catch.java > Modified: basex-core/src/test/java/org/basex/query/expr/XQuery4Test.java > > line 141 -> 151 > qe.getMessage() is now replaced with an Empty.VALUE const. > > Am 11.01.2024 um 12:39 schrieb Martin Honnen: > > > > Am 11.01.2024 um 12:37 schrieb Omar Siam <Omar.Siam at oeaw.ac.at> > <Omar.Siam at oeaw.ac.at>: > > I get: Unknown function: fn:stack-trace() when I use stack-trace(). > > > Ah, sorry, it looks like it is not yet implemented. Wait for Christian to > give you hopefully some better info than my ill guess. > > > -- > Mag. Ing. Omar Siam > Austrian Center for Digital Humanities and Cultural Heritage > Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences > Stellvertretende Behindertenvertrauensperson | Deputy representative for disabled persons > Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria > T: +43 1 51581-7295omar.siam at oeaw.ac.at | www.oeaw.ac.at/acdh > >
OS
Omar Siam12 Jan 2024 15:47 #
Hi Christian, So I already forgot about the first few lines of the message (I always cut them away). What I miss is the rest, the stack trace, the list of calls that got me to that line:
I need something like
`Stopped at { $err:module }, { $err:line-number }/{ $err:column-number }:
{ $err:description }
{ $err:stack-trace }`

I create XML and JSON according to an RFC and I want to be able to have
the trace there.
I already use { $err:module }, { $err:line-number }, {
$err:column-number } and { $err:description } E. g:
<problem xmlns="urn:ietf:rfc:7807">
<type>https://tools.ietf.org/html/rfc7807/tests</type>
   <title>_:an-error: testError Test1 Test2 Test3</title>
   <detail> Test1 Test2 Test3</detail>
<instance>https://tools.ietf.org/html/rfc7807/tests/an-error</instance>
   <status>500</status>
   <trace>/app/tests/api-problem-rest-test.xqm, 38/10
- /app/tests/api-problem-rest-test.xqm, 34/16
- /app/tests/api-problem-rest-test.xqm, 30/15
- /app/tests/api-problem-rest-test.xqm, 26/15
- /app/tests/api-problem-rest-test.xqm, 21/58
- /app/api-problem/api-problem.xqm, 41/26
   </trace>
   <took>3.55</took>
</problem>
While in 10.7+ I only get
<problem xmlns="urn:ietf:rfc:7807">
   <type>https://tools.ietf.org/html/rfc7807/tests</type>
   <title>_:an-error: testError Test1 Test2 Test3</title>
   <detail> Test1 Test2 Test3</detail>
   <instance>https://tools.ietf.org/html/rfc7807/tests/an-error</instance>
   <status>500</status>
   <trace>/app/tests/api-problem-rest-test.xqm, 38/10</trace>
   <took>2.15</took>
</problem>
See https://github.com/acdh-oeaw/api-problem4restxq/blob/master/tests/api-problem-rest-test.xqm#L15-L23 for details. There is a docker image using 10.6 for quick testing. docker run --rm -it -p 5000:5000 ghcr.io/acdh-oeaw/api-problem4restxq vs docker run --rm -it -p 5000:5000 ghcr.io/acdh-oeaw/api-problem4restxq:27f2a42 Look at to http://localhost:5000 Best regards Omar
Quoted text · Christian Grün · 24 lines
Am 12.01.2024 um 14:14 schrieb Christian Grün: > Hi Omar, > > Thanks for your observation. > > We have removed the BaseX-specific string output, as it was redundant. > You should be able to reproduce the old output as follows (using the > new XQuery 4 string template syntax): > > `Stopped at { $err:module }, { $err:line-number }/{ $err:column-number }: > { $err:description }` > > As you’ve already discovered the responsible commit, you may have > discovered the new XQuery 4 $err:map variable: It bundles all other > error values into a single variable. > > And @Martin Honnen thanks for mentioning fn:stack-trace. The function > is still under discussion and might be dropped again: The > specification gives processors much freedom in optimizing its > expressions, so it’s hardly possible to define the function in a way > that’s not completely implementation-defined. > > Hope this helps, > Christian
-- Mag. Ing. Omar Siam Austrian Center for Digital Humanities and Cultural Heritage Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences Stellvertretende Behindertenvertrauensperson | Deputy representative for disabled persons Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria T: +43 1 51581-7295 omar.siam at oeaw.ac.at |www.oeaw.ac.at/acdh
CG
Christian Grünin reply to Omar Siam, 11 Jan 2024, 12:1515 Jan 2024 12:46 #
Hi Omar, we’ve re-added the stack trace to the latest 11.0 snapshot [1], and will document this properly soon. I’ve slightly changed the behavior: Instead of a single descriptive string, the stack trace is now returned as a string sequence (the first entry points to the position in the code that failed, the following entries point to the function calls). I would like to see $err:stack-trace added to the standard. I’ll give you an update if the QT4 group confirms that this is a good idea (might take a while). Best, Christian [1] https://files.basex.org/releases/latest/
Quoted text · Omar Siam · 24 lines
On Thu, Jan 11, 2024 at 12:15 PM Omar Siam <Omar.Siam at oeaw.ac.at> wrote: > Hi, > > Until 10.6 one could find the stack trace of an error in > $err:additional. This feature is now gone from BaseX and the documentation. > > I made my life much easier with reporting stack traces on errors in > RestXQ endpoints. Now I don't see how to get that information anymore. > > Any advice how to get this functionality back? > > Best regards > > -- > Mag. Ing. Omar Siam > Austrian Center for Digital Humanities and Cultural Heritage > Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences > Stellvertretende Behindertenvertrauensperson | Deputy representative for > disabled persons > Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria > T: +43 1 51581-7295 > omar.siam at oeaw.ac.at | www.oeaw.ac.at/acdh > >

⚡Generated with XQuery