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@gmail.comwrote:
Hi,
can you please tell me how I apply the fulltext index for attributes?
Many thanks.
Cheers, An
BaseX-Talk mailing list BaseX-Talk@mailman.uni-konstanz.de https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
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 ___________________________
On Wed, Oct 19, 2011 at 2:17 PM, Erol Akarsu eakarsu@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@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@mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >
BaseX-Talk mailing list BaseX-Talk@mailman.uni-konstanz.de https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
basex-talk@mailman.uni-konstanz.de