1 21 package com.db4o.inside.fieldindex; 22 23 import com.db4o.*; 24 import com.db4o.foundation.*; 25 import com.db4o.inside.btree.*; 26 27 public abstract class IndexedNodeBase implements IndexedNode { 28 29 private final QConObject _constraint; 30 31 public IndexedNodeBase(QConObject qcon) { 32 if (null == qcon) { 33 throw new ArgumentNullException(); 34 } 35 if (null == qcon.getField()) { 36 throw new IllegalArgumentException (); 37 } 38 _constraint = qcon; 39 } 40 41 public TreeInt toTreeInt() { 42 return addToTree(null, this); 43 } 44 45 public final BTree getIndex() { 46 return getYapField().getIndex(transaction()); 47 } 48 49 private YapField getYapField() { 50 return _constraint.getField().getYapField(); 51 } 52 53 public QCon constraint() { 54 return _constraint; 55 } 56 57 public boolean isResolved() { 58 final QCon parent = constraint().parent(); 59 return null == parent || !parent.hasParent(); 60 } 61 62 public BTreeRange search(final Object value) { 63 return getYapField().search(transaction(), value); 64 } 65 66 public static TreeInt addToTree(TreeInt tree, final IndexedNode node) { 67 Iterator4 i = node.iterator(); 68 while (i.moveNext()) { 69 FieldIndexKey composite = (FieldIndexKey)i.current(); 70 tree = (TreeInt) Tree.add(tree, new TreeInt(composite.parentID())); 71 } 72 return tree; 73 } 74 75 public IndexedNode resolve() { 76 if (isResolved()) { 77 return null; 78 } 79 return IndexedPath.newParentPath(this, constraint()); 80 } 81 82 private Transaction transaction() { 83 return constraint().transaction(); 84 } 85 86 } | Popular Tags |