Strange logical operation

Wednesday, 19 October 2011 · 2 messages
CG
Christian Grünin reply to Erol Akarsu, 19 Oct 2011, 16:1719 Oct 2011 14:53 #
Erol, thanks for the observation. Yes, this was a bug; the AND expression in the predicate was rewritten to multiple predicates, which doesn't work with position tests. This is now fixed; please check out the new sources or one of the distribution files: http://files.basex.org/releases/latest/ http://files.basex.org/maven/org/basex/basex/7.0.1-SNAPSHOT/ Christian
Quoted text · Erol Akarsu · 155 lines
On Wed, Oct 19, 2011 at 2:17 PM, Erol Akarsu <eakarsu at gmail.com> wrote: > Hi, > > I have faced some strange case as below. s1 and s variables has to have same > value because their selecting operator same. > Is there anything I miss? Why xquery is not calculating boolean for each > sequence? > > let $ns := (4 , 5, 6, 7, 8, 3, 7) > > let $ind := (2,5,7) > let $j := 1 > let $i1 := $ind[$j] > let $i2 := $ind[$j+1] > let $s := $ns[fn:position() < $i2 and fn:position() > $i1] > let $s1 := $ns[fn:position() > $i1 and fn:position() < $i2 ] > > return <result> > <s>{$s}</s> <s1>{$s1}</s1> > </result> > > > <result> > <s>6 7</s> > <s1>6 7 8 3</s1> > </result> > > Query: let $ns := (4 , 5, 6, 7, 8, 3, 7) > Compiling: > - pre-evaluating (4, 5, 6, 7, 8, 3, 7) > - binding static variable $ns > - pre-evaluating (2, 5, 7) > - binding static variable $ind > - binding static variable $j > - pre-evaluating 1 + 1 > - rewriting And expression to predicate(s) > - rewriting fn:boolean(fn:position() < $i2) > - rewriting fn:boolean(fn:position() > $i1) > - rewriting And expression to predicate(s) > - rewriting fn:boolean(fn:position() > $i1) > - rewriting fn:boolean(fn:position() < $i2) > - removing variable $ns > - removing variable $ind > - removing variable $j > - moving for/let clauses > Result: let $i2 := ((2, 5, 7))[position() = 2] let $i1 := ((2, 5, > 7))[position() = 1] let $s1 := ((4, 5, 6, 7, 8, 3, 7))[fn:position() > > $i1][fn:position() < $i2] let $s := ((4, 5, 6, 7, 8, 3, 7))[fn:position() < > $i2][fn:position() > $i1] return element { "result" } { element { "s" } { $s > }, element { "s1" } { $s1 } } > Timing: > - Parsing: 0.14 ms > - Compiling: 0.56 ms > - Evaluating: 0.46 ms > - Printing: 0.05 ms > - Total Time: 1.23 ms > Result: > - Results: 1 Item > - Updated: 0 Items > - Printed: 50 Bytes > Query plan: > <FLWR> > <Let var="$i2"> > <IterPosFilter> > <ItrSeq size="3"> > <Item value="2" type="integer"/> > <Item value="5" type="integer"/> > <Item value="7" type="integer"/> > </ItrSeq> > <Pos min="2" max="2"/> > </IterPosFilter> > </Let> > <Let var="$i1"> > <IterPosFilter> > <ItrSeq size="3"> > <Item value="2" type="integer"/> > <Item value="5" type="integer"/> > <Item value="7" type="integer"/> > </ItrSeq> > <Pos min="1" max="1"/> > </IterPosFilter> > </Let> > <Let var="$s1"> > <Filter> > <ItrSeq size="7"> > <Item value="4" type="integer"/> > <Item value="5" type="integer"/> > <Item value="6" type="integer"/> > <Item value="7" type="integer"/> > <Item value="8" type="integer"/> > </ItrSeq> > <CmpG op="&gt;"> > <FNAcc name="position()"/> > <VarRef name="$i1"/> > </CmpG> > <CmpG op="&lt;"> > <FNAcc name="position()"/> > <VarRef name="$i2"/> > </CmpG> > </Filter> > </Let> > <Let var="$s"> > <Filter> > <ItrSeq size="7"> > <Item value="4" type="integer"/> > <Item value="5" type="integer"/> > <Item value="6" type="integer"/> > <Item value="7" type="integer"/> > <Item value="8" type="integer"/> > </ItrSeq> > <CmpG op="&lt;"> > <FNAcc name="position()"/> > <VarRef name="$i2"/> > </CmpG> > <CmpG op="&gt;"> > <FNAcc name="position()"/> > <VarRef name="$i1"/> > </CmpG> > </Filter> > </Let> > <Return> > <CElem> > <Item value="result" type="xs:QName"/> > <CElem> > <Item value="s" type="xs:QName"/> > <VarRef name="$s"/> > </CElem> > <CElem> > <Item value="s1" type="xs:QName"/> > <VarRef name="$s1"/> > </CElem> > </CElem> > </Return> > </FLWR> > On Wed, Oct 19, 2011 at 7:04 AM, Truong An Nguyen <ngtruongan at gmail.com> > wrote: >> >> Hi, >> can you please tell me how I apply the fulltext index for attributes? >> Many thanks. >> Cheers, >> An >> _______________________________________________ >> BaseX-Talk mailing list >> BaseX-Talk at mailman.uni-konstanz.de >> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >> > > > _______________________________________________ > BaseX-Talk mailing list > BaseX-Talk at mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk > >
EA
Erol Akarsu19 Oct 2011 16:17 #
Hi, I have faced some strange case as below. s1 and s variables has to have same value because their selecting operator same. Is there anything I miss? Why xquery is not calculating boolean for each sequence?
let $ns := (4 , 5, 6, 7, 8, 3, 7)

let $ind := (2,5,7)
let $j := 1
let $i1 := $ind[$j]
let $i2 := $ind[$j+1]
let $s := $ns[fn:position() < $i2 and fn:position() > $i1]
let $s1 := $ns[fn:position() > $i1 and fn:position() < $i2 ]

return <result>
                <s>{$s}</s> <s1>{$s1}</s1>
             </result>

<result>
  <s>6 7</s>
  <s1>6 7 8 3</s1>
</result>

Query: let $ns := (4 , 5, 6, 7, 8, 3, 7)
Compiling:
- pre-evaluating (4, 5, 6, 7, 8, 3, 7)
- binding static variable $ns
- pre-evaluating (2, 5, 7)
- binding static variable $ind
- binding static variable $j
- pre-evaluating 1 + 1
- rewriting And expression to predicate(s)
- rewriting fn:boolean(fn:position() < $i2)
- rewriting fn:boolean(fn:position() > $i1)
- rewriting And expression to predicate(s)
- rewriting fn:boolean(fn:position() > $i1)
- rewriting fn:boolean(fn:position() < $i2)
- removing variable $ns
- removing variable $ind
- removing variable $j
- moving for/let clauses
Result: let $i2 := ((2, 5, 7))[position() = 2] let $i1 := ((2, 5,
7))[position() = 1] let $s1 := ((4, 5, 6, 7, 8, 3, 7))[fn:position() >
$i1][fn:position() < $i2] let $s := ((4, 5, 6, 7, 8, 3, 7))[fn:position() <
$i2][fn:position() > $i1] return element { "result" } { element { "s" } { $s
}, element { "s1" } { $s1 } }
Timing:
 - Parsing:  0.14 ms
 - Compiling:  0.56 ms
 - Evaluating:  0.46 ms
 - Printing:  0.05 ms
 - Total Time:  1.23 ms
Result:
- Results: 1 Item
- Updated: 0 Items
- Printed: 50 Bytes
Query plan:
<FLWR>
  <Let var="$i2">
    <IterPosFilter>
      <ItrSeq size="3">
        <Item value="2" type="integer"/>
        <Item value="5" type="integer"/>
        <Item value="7" type="integer"/>
      </ItrSeq>
      <Pos min="2" max="2"/>
    </IterPosFilter>
  </Let>
  <Let var="$i1">
    <IterPosFilter>
      <ItrSeq size="3">
        <Item value="2" type="integer"/>
        <Item value="5" type="integer"/>
        <Item value="7" type="integer"/>
      </ItrSeq>
      <Pos min="1" max="1"/>
    </IterPosFilter>
  </Let>
  <Let var="$s1">
    <Filter>
      <ItrSeq size="7">
        <Item value="4" type="integer"/>
        <Item value="5" type="integer"/>
        <Item value="6" type="integer"/>
        <Item value="7" type="integer"/>
        <Item value="8" type="integer"/>
      </ItrSeq>
      <CmpG op="&gt;">
        <FNAcc name="position()"/>
        <VarRef name="$i1"/>
      </CmpG>
      <CmpG op="&lt;">
        <FNAcc name="position()"/>
        <VarRef name="$i2"/>
      </CmpG>
    </Filter>
  </Let>
  <Let var="$s">
    <Filter>
      <ItrSeq size="7">
        <Item value="4" type="integer"/>
        <Item value="5" type="integer"/>
        <Item value="6" type="integer"/>
        <Item value="7" type="integer"/>
        <Item value="8" type="integer"/>
      </ItrSeq>
      <CmpG op="&lt;">
        <FNAcc name="position()"/>
        <VarRef name="$i2"/>
      </CmpG>
      <CmpG op="&gt;">
        <FNAcc name="position()"/>
        <VarRef name="$i1"/>
      </CmpG>
    </Filter>
  </Let>
  <Return>
    <CElem>
      <Item value="result" type="xs:QName"/>
      <CElem>
        <Item value="s" type="xs:QName"/>
        <VarRef name="$s"/>
      </CElem>
      <CElem>
        <Item value="s1" type="xs:QName"/>
        <VarRef name="$s1"/>
      </CElem>
    </CElem>
  </Return>
</FLWR>
On Wed, Oct 19, 2011 at 7:04 AM, Truong An Nguyen <ngtruongan at gmail.com>wrote:
Quoted text · 15 lines
> Hi, > > can you please tell me how I apply the fulltext index for attributes? > > Many thanks. > > Cheers, > An > > _______________________________________________ > BaseX-Talk mailing list > BaseX-Talk at mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk > >

⚡Generated with XQuery