30.08.2014 Views

url - Universität zu Lübeck

url - Universität zu Lübeck

url - Universität zu Lübeck

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.4. QUERY PROCESSING 95<br />

1 Index getIndex ( IndexCollection indexes , Xpath q , StatDataGuide sdg ) {<br />

2 subsetIndexes = new List ( ) ;<br />

4 Kq = q . getKeyPaths ;<br />

5 Qq = q . getQualifierPaths ;<br />

6 vq = q . getReturnValuePath ;<br />

8 f o r a l l index j indexes{<br />

9 indexdecl = index . getDeclaration ( ) ;<br />

10 Kj = indexdecl . getKeyPaths ;<br />

11 Qj = indexdecl . getQualifierPaths ;<br />

12 vj = indexdecl . getReturnValuePath ;<br />

14 i f (Kq==Kj AND Qq==Qj AND vq==vj )<br />

15 return j ; // Exactly matching index found<br />

17 else i f ( Kj subset Kq AND Qj subset QQ)<br />

18 subsetIndexes . add ( Kj ) ;<br />

19 }<br />

21 i f ( subsetIndexes . size ==1)<br />

22 return subsetIndexes [ 1 ] ;<br />

23 else<br />

24 return sdg . findBestIndex ( subsetIndexes , q ) ;<br />

25 }<br />

Figure 5.9: Phase 1: Index Selection<br />

2. Phase 2: Key Retrieval<br />

In the second phase the key(s) are searched in the tree structure of the<br />

index; like in relational indexes this is done in logarithmic time. If the key<br />

is found the attached value is either the reference to the corresponding node<br />

in the XML data (single-key index) or a search tree of a lower level (multi-key<br />

index) so that further (recursive) key retrieval is performed. The references<br />

are dereferenced to XML nodes and returned as the result of the query.<br />

1 public XMLNOdeList evaluateQuery ( Index i , XPath q , XMLData t ) {<br />

3 tree = i . getSearchTree ( ) ;<br />

4 keys = q . getKeyValues ( ) ;<br />

5 int ids = r e t r i e v a l ( tree , keys ) ;<br />

7 nodes = new List ( ) ;<br />

8 f o r a l l id in ids{<br />

9 node = t . getXMLNodeByID ( id ) ;<br />

10 nodes . add ( node ) ;<br />

11 }<br />

12 return nodes ;<br />

13 }<br />

17 private IDList r e t r i e v a l ( SearchTree tree , keys k ) {<br />

19 i f ( isEmpty ( k ) ) {<br />

20 i f ( tree is single node) return tree . id ;<br />

21 else return getAllIds ( tree ) ;<br />

22 }

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!