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 156 of file DatabaseContainer.cc.
ora::ReadBuffer::ReadBuffer | ( | ContainerSchema & | contSchema | ) | [inline, explicit] |
Definition at line 158 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 179 of file DatabaseContainer.cc.
{ }
void* ora::ReadBuffer::read | ( | int | oid | ) | [inline] |
Definition at line 182 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 204 of file DatabaseContainer.cc.
Referenced by read(), and ReadBuffer().
Definition at line 202 of file DatabaseContainer.cc.
Referenced by ReadBuffer().
Definition at line 205 of file DatabaseContainer.cc.
Referenced by read(), and ReadBuffer().
const Reflex::Type& ora::ReadBuffer::m_type [private] |
Definition at line 203 of file DatabaseContainer.cc.
Referenced by read(), ReadBuffer(), and type().