nasty bug with xquery empty sequence ()

Sunday, 30 May 2010 · 2 messages
SS
Sandra Maria Silcot30 May 2010 04:04 #

To basex developers,

The following xquery returns 464 <persName> elements with saxonHE but fails to produce any <persName> elements when the query is run in basex (6.1.3).

for $RT in ("c31a")
let $theseRecs := //c31a[sourceVol="CON 31/2"]
let $ctr := count($theseRecs)
let $pList := <listPersName n="{$ctr}">{
  for $p at $i in $theseRecs
    let $conref := if ( $RT = "c37v" ) then <hi/> else ()
  return <persName id="{$p/@xml:id}">{$i}</persName>
}</listPersName>
return ( $pList,<hello/> )

If the xquery null sequence () in line 6 is changed to an empty string: else "" I get the expected 464 results. With () in the else I get only this:

<listPersName n="464"/>
<hello/>

I had a devil of a time detecting this. I also have encountered bad behaviour when running queries against attributes which exist but have no value, like this:

<el attr="">

In Saxon I can search for //el[@attr=""] and get results but basex does not find these cases.

Hoping these bugs can be quickly squashed.

regards,

Sandra

CG
Christian Grün30 May 2010 15:21 #

Sandra,

thanks for your profound feedback, which is always valuable. Your bugs should now be fixed; please try: http://www.basex.org/maven/org/basex/basex/6.1.4

Quoted text · Sandra Maria Silcot · 3 lines
> The following xquery returns 464 <persName> elements with saxonHE but > fails to produce any <persName> elements when the query is run in basex > (6.1.3).

I could break down the problem to the following query…

  for $a in 1
  let $b := ()
  return $a

…in which the FLWOR clause was optimized away. We didn't notice this bug before as the optimization worked well on queries like the following:

  let $a := 1
  let $b := ()
  return $a

  for $a in 1
  for $b in ()
  return $a
Quoted text · Sandra Maria Silcot · 5 lines
> I had a devil of a time detecting this. I also have encountered bad > behaviour when running queries against attributes which exist but have no > value, like this: > > <el attr="">

Yep… The index now remembers empty strings as well. Please rebuild your indexes to get this one working.

All the best, Christian


⚡Generated with XQuery