Writes a data element.
123 "STLContainerWriter::write");
128 throwException(
"Object id elements provided are not matching with the mapped id columns.",
129 "STLContainerWriter::write");
136 Reflex::Member firstMember;
137 Reflex::Member secondMember;
139 firstMember = iteratorReturnType.MemberByName(
"first" );
140 if ( ! firstMember ) {
141 throwException(
"Could not find the data member \"first\" for the class \"" +
142 iteratorReturnType.Name(Reflex::SCOPED) +
"\"",
143 "STLContainerWriter::write" );
145 secondMember = iteratorReturnType.MemberByName(
"second" );
146 if ( ! secondMember ) {
147 throwException(
"Could not retrieve the data member \"second\" for the class \"" +
148 iteratorReturnType.Name(Reflex::SCOPED) +
"\"",
149 "STLContainerWriter::write" );
158 if ( containerSize == 0 )
return;
160 size_t startElementIndex =
m_arrayHandler->startElementIndex( data );
161 std::auto_ptr<IArrayIteratorHandler> iteratorHandler(
m_arrayHandler->iterate( data ) );
165 for (
size_t iIndex = startElementIndex; iIndex < containerSize; ++iIndex ) {
170 dataBuff[ columns[0] ].data<
int>() = oid;
171 for(
size_t i = 1;
i < columns.size();
i++ ){
175 void* objectReference = iteratorHandler->object();
176 void* componentData = objectReference;
179 void* keyData =
static_cast< char*
>( objectReference ) + firstMember.Offset();
183 componentData =
static_cast< char*
>( objectReference ) + secondMember.Offset();
188 bulkInsert.processNextIteration();
191 iteratorHandler->increment();
void * address(const void *topLevelAddress) const
std::vector< int > m_recordId
std::auto_ptr< IRelationalWriter > m_keyWriter
Reflex::Type m_objectType
coral::AttributeList & data()
MultiRecordInsertOperation * m_insertOperation
std::auto_ptr< IRelationalWriter > m_dataWriter
const std::vector< std::string > & columnNames() const
InsertCache & setUp(int rowCacheSize)
void throwException(const std::string &message, const std::string &methodName)
MappingElement & m_mappingElement
std::auto_ptr< IArrayHandler > m_arrayHandler