Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

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 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 324 of file generaldata.h.

References TrDb::Index::db, 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.

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

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

Definition at line 341 of file generaldata.h.

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

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


Member Function Documentation

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

Definition at line 311 of file generaldata.h.

Referenced by TrapperDoc::all_readnames(), ReadsInRect::find(), TrapperView::findRead(), TrapperView::fitContentsizeToData(), TrapperView::getInfo(), TrapperDoc::importChromat(), TrapperDoc::importMates(), TrapperDoc::importPhd(), TrapperApp::map_reads_to_docs(), TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), TrapperDoc::saveExport(), TrapperView::selectBetween(), FindMatesAlgo::start(), and TrapperView::writeSelected().

00311 { return m_GeneralData_answer; }

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

Definition at line 356 of file generaldata.h.

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

Referenced by TrapperView::paintFeatures().

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

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

Definition at line 378 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().

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

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

Definition at line 412 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().

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

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

Definition at line 461 of file generaldata.h.

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

Referenced by TrapperDoc::all_readnames(), and TrapperApp::map_reads_to_docs().

00462   {
00463     Dbt secondaryKey;
00464     return pget( secondaryKey, DB_FIRST );
00465   }

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

Definition at line 310 of file generaldata.h.

Referenced by Destroyer::destroy(), ReadsInRect::find(), TrapperView::findRead(), TrapperView::getInfo(), TrapperDoc::importChromat(), TrapperDoc::importMates(), TrapperDoc::importPhd(), TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), TrapperDoc::saveExport(), TrapperView::selectBetween(), FindMatesAlgo::start(), and TrapperView::writeSelected().

00310 { return m_GeneralData_key; }

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

Definition at line 468 of file generaldata.h.

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

Referenced by TrapperView::fitContentsizeToData().

00469   {
00470     Dbt secondaryKey;
00471     return pget( secondaryKey, DB_LAST );
00472   }

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 >::next  ) 
 

Definition at line 454 of file generaldata.h.

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

Referenced by TrapperDoc::all_readnames(), ReadsInRect::find(), TrapperApp::map_reads_to_docs(), and TrapperView::selectBetween().

00455   {
00456     Dbt secondaryKey;
00457     return pget( secondaryKey, DB_NEXT );
00458   }

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

Definition at line 447 of file generaldata.h.

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

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

00448   {
00449     Dbt secondaryKey;
00450     return pget( secondaryKey, DB_NEXT_DUP );
00451   }

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

Definition at line 420 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 >::set(), and Database::SecondaryIterator< T >::setRange().

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

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

Definition at line 365 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::findRead(), TrapperView::getInfo(), TrapperDoc::importChromat(), TrapperDoc::importMates(), TrapperDoc::importPhd(), TrapperView::paintFeatures(), MAl_Readonly::read_feat_from_db(), TrapperDoc::saveExport(), FindMatesAlgo::start(), and TrapperView::writeSelected().

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

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

Definition at line 400 of file generaldata.h.

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

Referenced by ReadsInRect::find(), and TrapperView::selectBetween().

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


Member Data Documentation

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

Definition at line 318 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>
Dbc* Database::SecondaryIterator< T >::m_cursor [protected]
 

Definition at line 317 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>
T* Database::SecondaryIterator< T >::m_GeneralData_answer [protected]
 

Definition at line 316 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>
T* Database::SecondaryIterator< T >::m_GeneralData_key [protected]
 

Definition at line 315 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>
std::string Database::SecondaryIterator< T >::m_name [protected]
 

Definition at line 319 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 320 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 Mar 17 17:45:02 2006 for trapper by  doxygen 1.4.4