Strange logical operation
Wednesday, 19 October 2011 · 2 messages
CG
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=">"> > <FNAcc name="position()"/> > <VarRef name="$i1"/> > </CmpG> > <CmpG op="<"> > <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="<"> > <FNAcc name="position()"/> > <VarRef name="$i2"/> > </CmpG> > <CmpG op=">"> > <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=">">
<FNAcc name="position()"/>
<VarRef name="$i1"/>
</CmpG>
<CmpG op="<">
<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="<">
<FNAcc name="position()"/>
<VarRef name="$i2"/>
</CmpG>
<CmpG op=">">
<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 > >
Written for BaseX 6.7. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery