Database::SecondaryIterator< T > Class Template Reference

to search records and iterate over a secondary index More...

#include <generaldata.h>

Inheritance diagram for Database::SecondaryIterator< T >:

Inheritance graph
[legend]
Collaboration diagram for Database::SecondaryIterator< T >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 SecondaryIterator (string secondaryIndexStr, TrapperDoc *doc, string generalDataType, DbTxn *txnid=NULL)
 constructor
 ~SecondaryIterator ()
std::string name ()
int set ()
int setRange ()
int nextdup ()
int next ()
int prev ()
int first ()
int last ()
int delCurrentInclDups ()
int pget (Dbt &key, u_int32_t flags)
T * key ()
T * answer ()
void closeCursor ()

Protected Member Functions

void fillSecondaryDataDbt (Dbt &secondaryKey, const Dbt &primaryData)

Protected Attributes

T * m_GeneralData_key
T * m_GeneralData_answer
Dbc * m_cursor
TrDb::Index index
std::string m_name
DbTxn * txn

Detailed Description

template<class T>
class Database::SecondaryIterator< T >

to search records and iterate over a secondary index

Parameters:
T the derived GeneralData class that the pointer data() points to. By having this template argument we avoid the need of dynamic_cast by the users of this class.

Definition at line 288 of file generaldata.h.


Constructor & Destructor Documentation

template<class T>
Database::SecondaryIterator< T >::SecondaryIterator ( string  secondaryIndexStr,
TrapperDoc doc,
string  generalDataType,
DbTxn *  txnid = NULL 
)

constructor

Parameters:
secondaryIndexStr the secondary index lookup string
doc doc with the berkeley dbs opened
generalDataType the lookup string for the derived GeneralData class that are to be stored.
txnid a transaction id to encompass this operation in. If NULL this operation will not be transaction-protected.

Definition at line 325 of file generaldata.h.

References TrapperDoc::findTrDb(), Database::SecondaryIterator< T >::index, Database::SecondaryIterator< T >::m_cursor, Database::SecondaryIterator< T >::m_GeneralData_answer, Database::SecondaryIterator< T >::m_GeneralData_key, Database::SecondaryIterator< T >::m_name, GeneralMaker::newData(), TrDb::secondaryIndex(), and Database::SecondaryIterator< T >::txn.

00326   {
00327     assert( doc!= 0 );
00328     
00329     m_name = generalDataType;
00330     m_GeneralData_key = dynamic_cast< T * >(GeneralMaker::newData( generalDataType ));
00331     m_GeneralData_answer = dynamic_cast< T * >(GeneralMaker::newData( generalDataType ));
00332     index = doc->findTrDb( generalDataType )->secondaryIndex( secondaryIndexStr );
00333     Q_CHECK_PTR(m_GeneralData_key);
00334     Q_CHECK_PTR(m_GeneralData_answer);
00335 
00336     index.db->cursor( txnid , &m_cursor, 0 );
00337 
00338     txn = txnid;
00339   }

template<class T>
Database::SecondaryIterator< T >::~SecondaryIterator (  ) 

Definition at line 342 of file generaldata.h.

References Database::SecondaryIterator< T >::m_cursor, Database::SecondaryIterator< T >::m_GeneralData_answer, and Database::SecondaryIterator< T >::m_GeneralData_key.

00343   {
00344     if ( m_cursor ) {
00345       m_cursor->close();
00346     }
00347    if ( m_GeneralData_key ) {
00348      delete m_GeneralData_key;
00349      m_GeneralData_key = NULL;
00350    }
00351     if ( m_GeneralData_answer ) {
00352       delete m_GeneralData_answer;
00353       m_GeneralData_answer = NULL;
00354     }
00355   }


Member Function Documentation

template<class T>
std::string Database::SecondaryIterator< T >::name (  )  [inline]

Definition at line 301 of file generaldata.h.

Referenced by TrapperView::paintFeatures().

00301 { return m_name; }

template<class T>
int Database::SecondaryIterator< T >::set (  ) 

Definition at line 366 of file generaldata.h.

References Database::SecondaryIterator< T >::fillSecondaryDataDbt(), Database::SecondaryIterator< T >::m_GeneralData_key, and Database::SecondaryIterator< T >::pget().

Referenced by Destroyer::destroy(), TrapperView::getInfo(), TrapperDoc::importChromat(), TrapperDoc::importMates(), TrapperDoc::importPhd(), TrapperDoc::importTimeCourse(), TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), TrapperDoc::saveExport(), and FindMatesAlgo::start().

00367   {
00368       
00369     Dbt secondaryKey;
00370     QByteArray ar;
00371     QDataStream stream( ar, IO_WriteOnly );
00372     m_GeneralData_key->writeStream( stream );
00373     Dbt primaryData( ar.data(), ar.size() );
00374     fillSecondaryDataDbt( secondaryKey, primaryData );
00375     return pget( secondaryKey, DB_SET );
00376   }

template<class T>
int Database::SecondaryIterator< T >::setRange (  ) 

Definition at line 401 of file generaldata.h.

References Database::SecondaryIterator< T >::fillSecondaryDataDbt(), Database::SecondaryIterator< T >::m_GeneralData_key, and Database::SecondaryIterator< T >::pget().

Referenced by ReadsInRect::find(), TrapperView::findRead(), TrapperView::findTag(), TrapperView::scrollToNextCluster(), TrapperView::selectCols(), and TrapperView::selectRows().

00402   {
00403     Dbt secondaryKey;
00404     QByteArray ar;
00405     QDataStream stream( ar, IO_WriteOnly );
00406     m_GeneralData_key->writeStream( stream );
00407     Dbt primaryData( ar.data(), ar.size() );
00408     fillSecondaryDataDbt( secondaryKey, primaryData );
00409     return pget( secondaryKey, DB_SET_RANGE );
00410   }

template<class T>
int Database::SecondaryIterator< T >::nextdup (  ) 

Definition at line 445 of file generaldata.h.

References Database::SecondaryIterator< T >::pget().

Referenced by TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), and TrapperDoc::saveExport().

00446   {
00447     Dbt secondaryKey;
00448     return pget( secondaryKey, DB_NEXT_DUP );
00449   }

template<class T>
int Database::SecondaryIterator< T >::next (  ) 

Definition at line 452 of file generaldata.h.

References Database::SecondaryIterator< T >::pget().

Referenced by TrapperDoc::all_readnames(), ReadsInRect::find(), TrapperView::findRead(), TrapperView::findTag(), TrapperView::scrollToNextCluster(), TrapperView::selectCols(), and TrapperView::selectRows().

00453   {
00454     Dbt secondaryKey;
00455     return pget( secondaryKey, DB_NEXT );
00456   }

template<class T>
int Database::SecondaryIterator< T >::prev (  ) 

Definition at line 459 of file generaldata.h.

References Database::SecondaryIterator< T >::pget().

Referenced by TrapperView::scrollToNextCluster().

00460   {
00461     Dbt secondaryKey;
00462     return pget( secondaryKey, DB_PREV );
00463   }

template<class T>
int Database::SecondaryIterator< T >::first (  ) 

Definition at line 466 of file generaldata.h.

References Database::SecondaryIterator< T >::pget().

Referenced by TrapperDoc::all_readnames().

00467   {
00468     Dbt secondaryKey;
00469     return pget( secondaryKey, DB_FIRST );
00470   }

template<class T>
int Database::SecondaryIterator< T >::last (  ) 

Definition at line 473 of file generaldata.h.

References Database::SecondaryIterator< T >::pget().

Referenced by TrapperView::fitContentsizeToData(), TrapperView::scrollToNextCluster(), and TrapperParser::startElement().

00474   {
00475     Dbt secondaryKey;
00476     return pget( secondaryKey, DB_LAST );
00477   }

template<class T>
int Database::SecondaryIterator< T >::delCurrentInclDups (  ) 

Definition at line 379 of file generaldata.h.

References TrDb::Index::db, Database::SecondaryIterator< T >::fillSecondaryDataDbt(), Database::SecondaryIterator< T >::index, Database::SecondaryIterator< T >::m_GeneralData_key, and Database::SecondaryIterator< T >::txn.

Referenced by Destroyer::destroy().

00380   {
00381     Dbt secondaryKey;
00382     QByteArray ar;
00383     QDataStream stream( ar, IO_WriteOnly );
00384     m_GeneralData_key->writeStream( stream );
00385     Dbt primaryData( ar.data(), ar.size() );
00386     fillSecondaryDataDbt( secondaryKey, primaryData );
00387     
00388     int ret;
00389     if ( (ret = index.db->del(txn, &secondaryKey, 0)) != 0 ){
00390       if ( ret != DB_NOTFOUND )
00391         {
00392           index.db->err(ret, "del() call in SecondaryIterator::delCurrentInclDups()");
00393         }
00394       
00395     }
00396     return ret;
00397   }

template<class T>
int Database::SecondaryIterator< T >::pget ( Dbt &  key,
u_int32_t  flags 
)

Definition at line 421 of file generaldata.h.

References TrDb::Index::db, Database::SecondaryIterator< T >::index, Database::SecondaryIterator< T >::m_cursor, Database::SecondaryIterator< T >::m_GeneralData_answer, Database::setFromDbt(), and Database::SecondaryIterator< T >::txn.

Referenced by Database::SecondaryIterator< T >::first(), Database::SecondaryIterator< T >::last(), Database::SecondaryIterator< T >::next(), Database::SecondaryIterator< T >::nextdup(), Database::SecondaryIterator< T >::prev(), Database::SecondaryIterator< T >::set(), and Database::SecondaryIterator< T >::setRange().

00422   {
00423     if ( !m_cursor )
00424       index.db->cursor( txn , &m_cursor, 0 );
00425 
00426 
00427     Dbt primary_key;
00428     Dbt primary_data;
00429     int ret;
00430     if ((ret = m_cursor->pget(&key, &primary_key, &primary_data, flags )) != 0) {
00431       if ( ret != DB_NOTFOUND ) {
00432         index.db->err(ret, "pget call in SecondaryIterator::pget");
00433       }
00434       //  throw DbException(ret);
00435     }
00436     else {
00437       Database::setFromDbt( &primary_data, m_GeneralData_answer );
00438       db_recno_t recno = * static_cast<db_recno_t *> ( primary_key.get_data() );
00439       m_GeneralData_answer->setRecno( recno );
00440     }
00441     return ret;
00442   }

template<class T>
T* Database::SecondaryIterator< T >::key (  )  [inline]

Definition at line 311 of file generaldata.h.

Referenced by Destroyer::destroy(), ReadsInRect::find(), TrapperView::findRead(), TrapperView::findTag(), TrapperView::getInfo(), TrapperDoc::importChromat(), TrapperDoc::importMates(), TrapperDoc::importPhd(), TrapperDoc::importTimeCourse(), TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), TrapperDoc::saveExport(), TrapperView::scrollToNextCluster(), TrapperView::selectCols(), TrapperView::selectRows(), and FindMatesAlgo::start().

00311 { return m_GeneralData_key; }

template<class T>
T* Database::SecondaryIterator< T >::answer (  )  [inline]

Definition at line 312 of file generaldata.h.

Referenced by TrapperDoc::all_readnames(), ReadsInRect::find(), TrapperView::findRead(), TrapperView::findTag(), TrapperView::fitContentsizeToData(), TrapperView::getInfo(), TrapperDoc::importChromat(), TrapperDoc::importMates(), TrapperDoc::importPhd(), TrapperDoc::importTimeCourse(), TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), TrapperDoc::saveExport(), TrapperView::scrollToNextCluster(), TrapperView::selectCols(), TrapperView::selectRows(), FindMatesAlgo::start(), and TrapperParser::startElement().

00312 { return m_GeneralData_answer; }

template<class T>
void Database::SecondaryIterator< T >::closeCursor (  ) 

Definition at line 357 of file generaldata.h.

References Database::SecondaryIterator< T >::m_cursor.

Referenced by TrapperView::paintFeatures().

00358   {
00359     assert( m_cursor != 0 );
00360     m_cursor->close();
00361     m_cursor = 0;
00362   }

template<class T>
void Database::SecondaryIterator< T >::fillSecondaryDataDbt ( Dbt &  secondaryKey,
const Dbt &  primaryData 
) [protected]

Definition at line 413 of file generaldata.h.

References TrDb::Index::associate_func, TrDb::Index::db, and Database::SecondaryIterator< T >::index.

Referenced by Database::SecondaryIterator< T >::delCurrentInclDups(), Database::SecondaryIterator< T >::set(), and Database::SecondaryIterator< T >::setRange().

00414   {
00415     Dbt primaryKey;
00416     index.associate_func( index.db , &primaryKey, &primaryData, &secondaryKey);
00417     return;
00418   }


Member Data Documentation

template<class T>
T* Database::SecondaryIterator< T >::m_GeneralData_key [protected]

Definition at line 316 of file generaldata.h.

Referenced by Database::SecondaryIterator< T >::delCurrentInclDups(), Database::SecondaryIterator< ReadData >::key(), Database::SecondaryIterator< T >::SecondaryIterator(), Database::SecondaryIterator< T >::set(), Database::SecondaryIterator< T >::setRange(), and Database::SecondaryIterator< T >::~SecondaryIterator().

template<class T>
T* Database::SecondaryIterator< T >::m_GeneralData_answer [protected]

Definition at line 317 of file generaldata.h.

Referenced by Database::SecondaryIterator< ReadData >::answer(), Database::SecondaryIterator< T >::pget(), Database::SecondaryIterator< T >::SecondaryIterator(), and Database::SecondaryIterator< T >::~SecondaryIterator().

template<class T>
Dbc* Database::SecondaryIterator< T >::m_cursor [protected]

Definition at line 318 of file generaldata.h.

Referenced by Database::SecondaryIterator< T >::closeCursor(), Database::SecondaryIterator< T >::pget(), Database::SecondaryIterator< T >::SecondaryIterator(), and Database::SecondaryIterator< T >::~SecondaryIterator().

template<class T>
TrDb::Index Database::SecondaryIterator< T >::index [protected]

Definition at line 319 of file generaldata.h.

Referenced by Database::SecondaryIterator< T >::delCurrentInclDups(), Database::SecondaryIterator< T >::fillSecondaryDataDbt(), Database::SecondaryIterator< T >::pget(), and Database::SecondaryIterator< T >::SecondaryIterator().

template<class T>
std::string Database::SecondaryIterator< T >::m_name [protected]

Definition at line 320 of file generaldata.h.

Referenced by Database::SecondaryIterator< ReadData >::name(), and Database::SecondaryIterator< T >::SecondaryIterator().

template<class T>
DbTxn* Database::SecondaryIterator< T >::txn [protected]

Definition at line 321 of file generaldata.h.

Referenced by Database::SecondaryIterator< T >::delCurrentInclDups(), Database::SecondaryIterator< T >::pget(), and Database::SecondaryIterator< T >::SecondaryIterator().


The documentation for this class was generated from the following file:
Generated on Fri Jul 17 20:19:57 2009 for ngsview by  doxygen 1.5.1