Public Member Functions | |
void * | read (int oid) |
ReadBuffer (ContainerSchema &contSchema) | |
const Reflex::Type & | type () |
~ReadBuffer () | |
Private Attributes | |
std::auto_ptr< IRelationalReader > | m_reader |
DataElement | m_topLevelElement |
SelectOperation | m_topLevelQuery |
const Reflex::Type & | m_type |
Definition at line 142 of file DatabaseContainer.cc.
ora::ReadBuffer::ReadBuffer | ( | ContainerSchema & | contSchema | ) | [inline, explicit] |
Definition at line 144 of file DatabaseContainer.cc.
References ora::SelectOperation::addWhereId(), ora::MappingElement::columnNames(), ora::MappingElement::end(), ora::MappingElement::find(), m_reader, m_topLevelElement, m_topLevelQuery, m_type, ora::ContainerSchema::mapping(), ora::RelationalStreamerFactory::newReader(), ora::throwException(), and ora::MappingTree::topElement().
: m_topLevelElement(), m_type( contSchema.type() ), m_reader(), m_topLevelQuery( contSchema.mapping().topElement().tableName(), contSchema.storageSchema() ){ MappingElement& topLevelMapping = contSchema.mapping().topElement(); m_topLevelQuery.addWhereId( topLevelMapping.columnNames()[ 0 ] ); MappingElement::iterator iMap = topLevelMapping.find( m_type.Name(Reflex::SCOPED) ); // the first inner mapping is the good one ... if( iMap == topLevelMapping.end()){ throwException("Could not find a mapping element for class \""+ m_type.Name(Reflex::SCOPED)+"\"", "ReadBuffer::ReadBuffer"); } MappingElement& mapping = iMap->second; RelationalStreamerFactory streamerFactory( contSchema ); m_reader.reset( streamerFactory.newReader( m_type, mapping )) ; m_reader->build( m_topLevelElement , m_topLevelQuery ); }
ora::ReadBuffer::~ReadBuffer | ( | ) | [inline] |
Definition at line 165 of file DatabaseContainer.cc.
{ }
void* ora::ReadBuffer::read | ( | int | oid | ) | [inline] |
Definition at line 168 of file DatabaseContainer.cc.
References ora::SelectOperation::clear(), ora::ClassUtils::constructObject(), ora::SelectOperation::execute(), m_reader, m_topLevelQuery, m_type, ora::SelectOperation::nextCursorRow(), and ora::SelectOperation::whereData().
{ coral::AttributeList& dataBuff = m_topLevelQuery.whereData(); dataBuff.begin()->data<int>() = oid; m_topLevelQuery.execute(); m_reader->select( oid ); void* destination = 0; if( m_topLevelQuery.nextCursorRow() ){ destination = ClassUtils::constructObject( m_type ); m_reader->read( destination ); } m_reader->clear(); m_topLevelQuery.clear(); return destination; }
const Reflex::Type& ora::ReadBuffer::type | ( | ) | [inline] |
std::auto_ptr<IRelationalReader> ora::ReadBuffer::m_reader [private] |
Definition at line 190 of file DatabaseContainer.cc.
Referenced by read(), and ReadBuffer().
Definition at line 188 of file DatabaseContainer.cc.
Referenced by ReadBuffer().
Definition at line 191 of file DatabaseContainer.cc.
Referenced by read(), and ReadBuffer().
const Reflex::Type& ora::ReadBuffer::m_type [private] |
Definition at line 189 of file DatabaseContainer.cc.
Referenced by read(), ReadBuffer(), and type().