CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PrimitiveStreamer.cc
Go to the documentation of this file.
2 #include "PrimitiveStreamer.h"
3 #include "DataElement.h"
4 #include "MappingElement.h"
5 #include "RelationalOperation.h"
6 #include "ClassUtils.h"
7 // externals
8 #include "CoralBase/Attribute.h"
9 
10 
12  MappingElement& mapping ):
13  m_objectType( objectType ),
14  m_columnName(""),
15  m_dataElement( 0 ),
16  m_relationalData( 0 ){
17 
18  if( mapping.columnNames().size() ){
19  m_columnName = mapping.columnNames()[0];
20  }
21 }
22 
24 }
25 
27  IRelationalData& relationalData){
28 
29  if( m_columnName.empty() ){
30  throwException( "Column name not found ",
31  "PrimitiveStreamerBase::buildDataElement");
32  }
33 
34  m_dataElement = &dataElement;
35  const std::type_info* attrType = &m_objectType.TypeInfo();
36  if(m_objectType.IsEnum()) attrType = &typeid(int);
37  if(ClassUtils::isTypeString( m_objectType )) attrType = &typeid(std::string);
38  relationalData.addData( m_columnName, *attrType );
39  m_relationalData = &relationalData;
40  return true;
41 }
42 
44  if( ! m_dataElement ){
45  throwException( "The streamer has not been built.",
46  "PrimitiveStreamerBase::bindDataForUpdate");
47  }
48  void* dataElementAddress = m_dataElement->address( data );
49  coral::Attribute& relDataElement = m_relationalData->data()[ m_columnName ];
50  relDataElement.setValueFromAddress( dataElementAddress );
51  if(!relDataElement.isValidData()){
52  throwException("Data provided for column \""+
53  relDataElement.specification().name()+
54  "\" is not valid for RDBMS storage.",
55  "PrimitiveStreamerBase::bindDataForUpdate");
56  }
57 }
58 
60  if( ! m_dataElement ){
61  throwException( "The streamer has not been built.",
62  "PrimitiveStreamerBase::bindDataForRead");
63  }
64  void* dataElementAddress = m_dataElement->address( data );
65  coral::Attribute& relDataElement = m_relationalData->data()[ m_columnName ];
66  relDataElement.copyValueToAddress( dataElementAddress );
67 }
68 
69 
71  MappingElement& mapping ):
72  PrimitiveStreamerBase( objectType, mapping ){
73 }
74 
76 }
77 
79  IRelationalData& relationalData,
81  return buildDataElement( dataElement, relationalData );
82 }
83 
84 void ora::PrimitiveWriter::setRecordId( const std::vector<int>& ){
85 }
86 
87 void ora::PrimitiveWriter::write( int, const void* data ){
88  bindDataForUpdate( data );
89 }
90 
92  MappingElement& mapping ):
93  PrimitiveStreamerBase( objectType, mapping ){
94 }
95 
97 }
98 
100  IRelationalData& relationalData,
102  return buildDataElement( dataElement, relationalData );
103 }
104 
105 void ora::PrimitiveUpdater::setRecordId( const std::vector<int>& ){
106 }
107 
109  const void* data ){
110  bindDataForUpdate( data );
111 }
112 
114  MappingElement& mapping ):
115  PrimitiveStreamerBase( objectType, mapping ){
116 }
117 
119 }
120 
122  IRelationalData& relationalData){
123  return buildDataElement( dataElement, relationalData );
124 }
125 
127 }
128 
129 void ora::PrimitiveReader::setRecordId( const std::vector<int>& ){
130 }
131 
133  bindDataForRead( data );
134 }
135 
137 }
138 
139 
141  MappingElement& mapping ):
142  m_objectType( objectType ),
143  m_mapping( mapping ){
144 }
145 
147 }
148 
150  return new PrimitiveWriter( m_objectType, m_mapping );
151 }
152 
154  return new PrimitiveUpdater( m_objectType, m_mapping );
155 }
156 
158  return new PrimitiveReader( m_objectType, m_mapping );
159 }
IRelationalUpdater * newUpdater()
bool isTypeString(const Reflex::Type &typ)
Definition: ClassUtils.cc:128
IRelationalWriter * newWriter()
bool buildDataElement(DataElement &dataElement, IRelationalData &relationalData)
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.
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)
Definition: Exception.cc:10
bool build(DataElement &dataElement, IRelationalData &relationalData, RelationalBuffer &operationBuffer)
IRelationalReader * newReader()
bool build(DataElement &dataElement, IRelationalData &relationalData, RelationalBuffer &operationBuffer)
virtual void addData(const std::string &columnName, const std::type_info &columnType)=0
void setRecordId(const std::vector< int > &identity)