8 #include "CoralBase/Attribute.h"
13 m_objectType( objectType ),
16 m_relationalData( 0 ){
29 if( m_columnName.empty() ){
31 "PrimitiveStreamerBase::buildDataElement");
34 m_dataElement = &dataElement;
35 const std::type_info* attrType = &m_objectType.TypeInfo();
36 if(m_objectType.IsEnum()) attrType = &
typeid(
int);
38 relationalData.
addData( m_columnName, *attrType );
39 m_relationalData = &relationalData;
44 if( ! m_dataElement ){
46 "PrimitiveStreamerBase::bindDataForUpdate");
48 void* dataElementAddress = m_dataElement->address( data );
49 coral::Attribute& relDataElement = m_relationalData->data()[ m_columnName ];
50 relDataElement.setValueFromAddress( dataElementAddress );
51 if(!relDataElement.isValidData()){
53 relDataElement.specification().name()+
54 "\" is not valid for RDBMS storage.",
55 "PrimitiveStreamerBase::bindDataForUpdate");
60 if( ! m_dataElement ){
62 "PrimitiveStreamerBase::bindDataForRead");
64 void* dataElementAddress = m_dataElement->address( data );
65 coral::Attribute& relDataElement = m_relationalData->data()[ m_columnName ];
66 relDataElement.copyValueToAddress( dataElementAddress );
81 return buildDataElement( dataElement, relationalData );
88 bindDataForUpdate( data );
102 return buildDataElement( dataElement, relationalData );
110 bindDataForUpdate( data );
123 return buildDataElement( dataElement, relationalData );
133 bindDataForRead( data );
142 m_objectType( objectType ),
143 m_mapping( mapping ){
IRelationalUpdater * newUpdater()
bool isTypeString(const Reflex::Type &typ)
IRelationalWriter * newWriter()
bool buildDataElement(DataElement &dataElement, IRelationalData &relationalData)
virtual ~PrimitiveWriter()
PrimitiveUpdater(const Reflex::Type &objectType, MappingElement &mapping)
void setRecordId(const std::vector< int > &identity)
void write(int oid, const void *data)
Writes a data element.
PrimitiveStreamerBase(const Reflex::Type &objectType, MappingElement &mapping)
PrimitiveWriter(const Reflex::Type &objectType, MappingElement &mapping)
const std::vector< std::string > & columnNames() const
void read(void *data)
Reads a data element.
virtual ~PrimitiveUpdater()
virtual ~PrimitiveStreamerBase()
void update(int oid, const void *data)
Updates a data element.
PrimitiveStreamer(const Reflex::Type &objectType, MappingElement &mapping)
void bindDataForRead(void *data)
PrimitiveReader(const Reflex::Type &objectType, MappingElement &mapping)
void setRecordId(const std::vector< int > &identity)
void bindDataForUpdate(const void *data)
bool build(DataElement &dataElement, IRelationalData &relationalData)
void throwException(const std::string &message, const std::string &methodName)
bool build(DataElement &dataElement, IRelationalData &relationalData, RelationalBuffer &operationBuffer)
IRelationalReader * newReader()
bool build(DataElement &dataElement, IRelationalData &relationalData, RelationalBuffer &operationBuffer)
virtual ~PrimitiveReader()
virtual void addData(const std::string &columnName, const std::type_info &columnType)=0
void setRecordId(const std::vector< int > &identity)