url - Universität zu Lübeck
url - Universität zu Lübeck
url - Universität zu Lübeck
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 }