00001 /* 00002 // $Id: //open/dev/fennel/btree/BTreeNonLeafReader.cpp#3 $ 00003 // Fennel is a library of data storage and processing components. 00004 // Copyright (C) 2005-2009 The Eigenbase Project 00005 // Copyright (C) 2005-2009 SQLstream, Inc. 00006 // Copyright (C) 2005-2009 LucidEra, Inc. 00007 // Portions Copyright (C) 1999-2009 John V. Sichi 00008 // 00009 // This program is free software; you can redistribute it and/or modify it 00010 // under the terms of the GNU General Public License as published by the Free 00011 // Software Foundation; either version 2 of the License, or (at your option) 00012 // any later version approved by The Eigenbase Project. 00013 // 00014 // This program is distributed in the hope that it will be useful, 00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 // GNU General Public License for more details. 00018 // 00019 // You should have received a copy of the GNU General Public License 00020 // along with this program; if not, write to the Free Software 00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 */ 00023 00024 #include "fennel/common/CommonPreamble.h" 00025 #include "fennel/btree/BTreeNonLeafReader.h" 00026 #include "fennel/btree/BTreeAccessBaseImpl.h" 00027 #include "fennel/btree/BTreeReaderImpl.h" 00028 00029 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/btree/BTreeNonLeafReader.cpp#3 $"); 00030 00031 BTreeNonLeafReader::BTreeNonLeafReader(BTreeDescriptor const &descriptor) 00032 : BTreeReader(descriptor) 00033 { 00034 } 00035 00036 bool BTreeNonLeafReader::adjustRootLockMode(LockMode &lockMode) 00037 { 00038 assert(false); 00039 return false; 00040 } 00041 00042 bool BTreeNonLeafReader::searchExtreme(bool first) 00043 { 00044 assert(!isRootOnly()); 00045 bool rc = searchExtremeInternal(first, READ_NONLEAF_ONLY); 00046 assert(rc); 00047 return rc; 00048 } 00049 00050 bool BTreeNonLeafReader::searchForKey( 00051 TupleData const &key, 00052 DuplicateSeek dupSeek, 00053 bool leastUpper) 00054 { 00055 assert(!isRootOnly()); 00056 return 00057 searchForKeyInternal( 00058 key, dupSeek, leastUpper, getRootPageId(), rootLockMode, 00059 READ_NONLEAF_ONLY); 00060 } 00061 00062 bool BTreeNonLeafReader::searchNext() 00063 { 00064 assert(pageLock.isLocked()); 00065 assert(pageLock.getNodeForRead().height == 1); 00066 return searchNextInternal(); 00067 } 00068 00069 TupleAccessor const &BTreeNonLeafReader::getTupleAccessorForRead() const 00070 { 00071 return pNonLeafNodeAccessor->tupleAccessor; 00072 } 00073 00074 bool BTreeNonLeafReader::isRootOnly() 00075 { 00076 pageLock.lockPage(getRootPageId(), rootLockMode); 00077 BTreeNode const &node = pageLock.getNodeForRead(); 00078 bool rc = (node.height == 0); 00079 pageLock.unlock(); 00080 return rc; 00081 } 00082 00083 bool BTreeNonLeafReader::isPositionedOnInfinityKey() 00084 { 00085 assert(pageLock.isLocked()); 00086 BTreeNode const &node = pageLock.getNodeForRead(); 00087 return 00088 (node.rightSibling == NULL_PAGE_ID && 00089 iTupleOnLowestLevel == node.nEntries - 1); 00090 } 00091 00092 BTreeNodeAccessor &BTreeNonLeafReader::getNonLeafNodeAccessor() 00093 { 00094 return *pNonLeafNodeAccessor; 00095 } 00096 00097 PageId BTreeNonLeafReader::getChildForCurrent() 00098 { 00099 return BTreeReader::getChildForCurrent(); 00100 } 00101 00102 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/btree/BTreeNonLeafReader.cpp#3 $"); 00103 00104 // End BTreeNonLeafReader.cpp