CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
ora::PoolMappingSchema Class Reference

#include <PoolDatabaseSchema.h>

Inheritance diagram for ora::PoolMappingSchema:
ora::IMappingSchema

Public Member Functions

bool containerForMappingVersion (const std::string &mappingVersion, int &destination)
 
bool getClassVersionListForContainer (int containerId, std::map< std::string, std::string > &versionMap)
 
bool getClassVersionListForMappingVersion (const std::string &mappingVersion, std::set< std::string > &destination)
 
bool getContainerTableMap (std::map< std::string, int > &destination)
 
bool getDependentClassesInContainerMapping (int containerId, std::set< std::string > &destination)
 
bool getMapping (const std::string &version, MappingRawData &destination)
 
bool getMappingVersionListForContainer (int containerId, std::set< std::string > &destination, bool onlyDependency=false)
 
bool getMappingVersionListForTable (const std::string &tableName, std::set< std::string > &destination)
 
bool getVersionList (std::set< std::string > &destination)
 
void init (PoolDbCache &dbCache)
 
void insertClassVersion (const std::string &className, const std::string &classVersion, const std::string &classId, int dependencyIndex, int containerId, const std::string &mappingVersion)
 
 PoolMappingSchema (coral::ISchema &dbSchema)
 
void removeMapping (const std::string &version)
 
bool selectMappingVersion (const std::string &classId, int containerId, std::string &destination)
 
void setMappingVersion (const std::string &classId, int containerId, const std::string &mappingVersion)
 
void storeMapping (const MappingRawData &mapping)
 
virtual ~PoolMappingSchema ()
 
- Public Member Functions inherited from ora::IMappingSchema
virtual ~IMappingSchema ()
 

Static Public Member Functions

static std::string emptyScope ()
 

Private Attributes

PoolDbCachem_dbCache
 
coral::ISchema & m_schema
 

Detailed Description

Definition at line 174 of file PoolDatabaseSchema.h.

Constructor & Destructor Documentation

ora::PoolMappingSchema::PoolMappingSchema ( coral::ISchema &  dbSchema)
explicit

Definition at line 687 of file PoolDatabaseSchema.cc.

687  :
688  m_schema( dbSchema ),
689  m_dbCache( 0 ){
690 }
ora::PoolMappingSchema::~PoolMappingSchema ( )
virtual

Definition at line 692 of file PoolDatabaseSchema.cc.

692  {
693 }

Member Function Documentation

bool ora::PoolMappingSchema::containerForMappingVersion ( const std::string &  mappingVersion,
int &  destination 
)
virtual

Implements ora::IMappingSchema.

Definition at line 1028 of file PoolDatabaseSchema.cc.

1029  {
1030  // not implemented for the moment
1031  return false;
1032 }
std::string ora::PoolMappingSchema::emptyScope ( )
static

Definition at line 682 of file PoolDatabaseSchema.cc.

682  {
683  static std::string s_scope(" ");
684  return s_scope;
685 }
bool ora::PoolMappingSchema::getClassVersionListForContainer ( int  containerId,
std::map< std::string, std::string > &  versionMap 
)
virtual

Implements ora::IMappingSchema.

Definition at line 952 of file PoolDatabaseSchema.cc.

References ora::PoolClassVersionTable::classVersionColumn(), ora::PoolContainerHeaderTable::containerIdColumn(), ora::PoolContainerHeaderTable::containerNameColumn(), ora::PoolClassVersionTable::containerNameColumn(), ora::PoolClassVersionTable::mappingVersionColumn(), o2o::query, runTheMatrix::ret, ora::PoolContainerHeaderTable::tableName(), and ora::PoolClassVersionTable::tableName().

953  {
954 
955  bool ret = false;
956  std::auto_ptr<coral::IQuery> query( m_schema.newQuery() );
957  query->addToTableList( PoolClassVersionTable::tableName(), "T0" );
958  query->addToTableList( PoolContainerHeaderTable::tableName(), "T1" );
959  query->addToOutputList( "T0."+PoolClassVersionTable::classVersionColumn() );
960  query->addToOutputList( "T0."+PoolClassVersionTable::mappingVersionColumn() );
961  query->setDistinct();
962  std::ostringstream condition;
965  coral::AttributeList condData;
966  condData.extend< int >( PoolContainerHeaderTable::containerIdColumn() );
967  condData[ PoolContainerHeaderTable::containerIdColumn() ].data< int >() = containerId + 1; //POOL starts counting from 1!;
968  query->setCondition(condition.str(),condData);
969  coral::ICursor& cursor = query->execute();
970  while ( cursor.next() ) {
971  ret = true;
972  const coral::AttributeList& currentRow = cursor.currentRow();
973  std::string classVersion = currentRow[ "T0."+PoolClassVersionTable::classVersionColumn() ].data<std::string>();
974  std::string mappingVersion = currentRow[ "T0."+PoolClassVersionTable::mappingVersionColumn() ].data<std::string>();
975  versionMap.insert( std::make_pair(classVersion, mappingVersion ) );
976  }
977  return ret;
978 }
static std::string containerNameColumn()
static std::string containerIdColumn()
static std::string classVersionColumn()
static std::string mappingVersionColumn()
tuple query
Definition: o2o.py:269
static std::string tableName()
static std::string containerNameColumn()
bool ora::PoolMappingSchema::getClassVersionListForMappingVersion ( const std::string &  mappingVersion,
std::set< std::string > &  destination 
)
virtual

Implements ora::IMappingSchema.

Definition at line 928 of file PoolDatabaseSchema.cc.

References ora::PoolClassVersionTable::classVersionColumn(), ora::PoolClassVersionTable::mappingVersionColumn(), o2o::query, runTheMatrix::ret, and ora::PoolClassVersionTable::tableName().

929  {
930 
931  bool ret = false;
932  coral::ITable& classVersionTable = m_schema.tableHandle( PoolClassVersionTable::tableName() );
933  std::auto_ptr<coral::IQuery> query( classVersionTable.newQuery() );
934  query->setDistinct();
935  query->addToOutputList( PoolClassVersionTable::classVersionColumn() );
936  std::ostringstream condition;
938  coral::AttributeList condData;
939  condData.extend<std::string>(PoolClassVersionTable::mappingVersionColumn());
940  condData[ PoolClassVersionTable::mappingVersionColumn() ].data< std::string >() = mappingVersion;
941  query->setCondition(condition.str(),condData);
942  coral::ICursor& cursor = query->execute();
943  while ( cursor.next() ) {
944  ret = true;
945  const coral::AttributeList& currentRow = cursor.currentRow();
946  std::string classVersion = currentRow[ PoolClassVersionTable::classVersionColumn() ].data<std::string>();
947  destination.insert( classVersion );
948  }
949  return ret;
950 }
static std::string classVersionColumn()
static std::string mappingVersionColumn()
tuple query
Definition: o2o.py:269
static std::string tableName()
bool ora::PoolMappingSchema::getContainerTableMap ( std::map< std::string, int > &  destination)
virtual

Implements ora::IMappingSchema.

Definition at line 883 of file PoolDatabaseSchema.cc.

883  {
884  // not implemented for the moment
885  return false;
886 }
bool ora::PoolMappingSchema::getDependentClassesInContainerMapping ( int  containerId,
std::set< std::string > &  destination 
)
virtual

Implements ora::IMappingSchema.

Definition at line 922 of file PoolDatabaseSchema.cc.

923  {
924  // not implemented for the moment
925  return false;
926 }
bool ora::PoolMappingSchema::getMapping ( const std::string &  version,
ora::MappingRawData dest 
)
virtual

Implements ora::IMappingSchema.

Definition at line 729 of file PoolDatabaseSchema.cc.

References ora::MappingRawData::addElement(), ora::MappingElement::classMappingElementType(), ora::PoolMappingElementTable::columnNameColumn(), ora::MappingRawElement::elementType, ora::PoolMappingElementTable::elementTypeColumn(), ora::MappingRawElement::emptyScope(), ora::mappingTypeFromPool(), ora::PoolMappingElementTable::mappingVersionColumn(), ora::MappingElement::objectMappingElementType(), o2o::query, ora::rebuildPoolMapping(), runTheMatrix::ret, ora::MappingRawElement::scopeName, ora::PoolMappingElementTable::scopeNameColumn(), ora::MappingRawElement::tableName, ora::PoolMappingElementTable::tableName(), ora::PoolMappingElementTable::tableNameColumn(), ora::MappingRawElement::variableName, ora::PoolMappingElementTable::variableNameColumn(), ora::variableNameFromPool(), ora::PoolMappingElementTable::variableParIndexColumn(), ora::MappingRawElement::variableType, and ora::PoolMappingElementTable::variableTypeColumn().

730  {
731  bool ret = false;
732  coral::ITable& mappingTable = m_schema.tableHandle( PoolMappingElementTable::tableName() );
733  std::auto_ptr<coral::IQuery> query(mappingTable.newQuery());
734  coral::AttributeList outputBuffer;
735  outputBuffer.extend<std::string>( PoolMappingElementTable::elementTypeColumn() );
736  outputBuffer.extend<std::string>( PoolMappingElementTable::scopeNameColumn() );
737  outputBuffer.extend<std::string>( PoolMappingElementTable::variableNameColumn() );
738  outputBuffer.extend<std::string>( PoolMappingElementTable::variableTypeColumn() );
739  outputBuffer.extend<std::string>( PoolMappingElementTable::tableNameColumn() );
740  outputBuffer.extend<std::string>( PoolMappingElementTable::columnNameColumn() );
741  query->defineOutput( outputBuffer );
743  query->addToOutputList( PoolMappingElementTable::scopeNameColumn() );
746  query->addToOutputList( PoolMappingElementTable::tableNameColumn() );
747  query->addToOutputList( PoolMappingElementTable::columnNameColumn() );
748  std::ostringstream condition;
750  coral::AttributeList condData;
751  condData.extend<std::string>( PoolMappingElementTable::mappingVersionColumn() );
752  coral::AttributeList::iterator iAttribute = condData.begin();
753  iAttribute->data< std::string >() = version;
754  query->setCondition( condition.str(), condData );
755  query->addToOrderList( PoolMappingElementTable::scopeNameColumn() );
757  // check the order: column order has to be swapped!
759  coral::ICursor& cursor = query->execute();
760  std::set<std::string> topElements;
761  std::map<std::string,MappingRawElement> elementsByVarName;
762  while ( cursor.next() ) {
763  ret = true;
764  const coral::AttributeList& currentRow = cursor.currentRow();
765  std::string scope = currentRow[ PoolMappingElementTable::scopeNameColumn() ].data<std::string>();
766  std::string varName = currentRow[ PoolMappingElementTable::variableNameColumn() ].data<std::string>();
767  std::string elemId = scope+"::"+varName;
768  std::map<std::string,MappingRawElement>::iterator iE = elementsByVarName.find( elemId );
769  if( iE == elementsByVarName.end() ) {
770  iE = elementsByVarName.insert( std::make_pair( elemId, MappingRawElement())).first;
771  MappingRawElement& elem = iE->second;
772  elem.elementType = mappingTypeFromPool( currentRow[ PoolMappingElementTable::elementTypeColumn() ].data<std::string>() );
773  elem.scopeName = scope;
774  elem.variableName = variableNameFromPool( varName );
775  elem.variableType = currentRow[ PoolMappingElementTable::variableTypeColumn() ].data<std::string>();
776  elem.tableName = currentRow[ PoolMappingElementTable::tableNameColumn() ].data<std::string>();
777  if(elem.scopeName == emptyScope()) {
778  if( elem.elementType == MappingElement::objectMappingElementType() ){
779  if( topElements.find( elemId ) == topElements.end() ){
780  topElements.insert( elemId );
781  }
782  }
783  }
784  }
785  iE->second.columns.push_back( currentRow[ PoolMappingElementTable::columnNameColumn() ].data<std::string>() );
786  }
787  // re-ordering by scope
788  std::map<std::string, std::vector<MappingRawElement> > elementsByScope;
789  for( std::map<std::string,MappingRawElement>::iterator iEl = elementsByVarName.begin();
790  iEl != elementsByVarName.end(); ++iEl ){
791  // reversing the columns
792  std::vector<std::string> reverseCols;
793  for( std::vector<std::string>::reverse_iterator iR = iEl->second.columns.rbegin();
794  iR != iEl->second.columns.rend(); ++iR ){
795  reverseCols.push_back( *iR );
796  }
797  iEl->second.columns = reverseCols;
798  std::string scope = iEl->second.scopeName;
799  if( scope != emptyScope() ){
800  std::map<std::string, std::vector<MappingRawElement> >::iterator iS = elementsByScope.find( scope );
801  if( iS == elementsByScope.end() ){
802  elementsByScope.insert( std::make_pair( scope, std::vector<MappingRawElement>(1,iEl->second ) ));
803  } else {
804  iS->second.push_back( iEl->second );
805  }
806  }
807  }
808  // rebuilding + adding class elements
809  int eid = 0;
810  for( std::set<std::string>::const_iterator iEl = topElements.begin();
811  iEl != topElements.end(); ++iEl ){
812  // adding the class elements...
813  std::map<std::string,MappingRawElement>::iterator iE = elementsByVarName.find( *iEl );
814  MappingRawElement classElement = iE->second;
815  classElement.elementType = MappingElement::classMappingElementType();
816  classElement.scopeName = MappingRawElement::emptyScope();
817  dest.addElement( eid ) = classElement;
818  eid++;
819  MappingRawElement firstElement = iE->second;
820  firstElement.scopeName = iE->second.variableName;
821  dest.addElement( eid ) = firstElement;
822  eid++;
823  // rebuilding extending the scope...
824  rebuildPoolMapping( iE->second.variableName, iE->second.variableName, elementsByScope, dest, eid );
825  }
826  return ret;
827 }
MappingRawElement & addElement(int elementId)
static std::string tableNameColumn()
static std::string variableTypeColumn()
std::string mappingTypeFromPool(const std::string &mappingType)
static std::string columnNameColumn()
static std::string mappingVersionColumn()
static std::string variableParIndexColumn()
static std::string emptyScope()
static std::string emptyScope()
static std::string objectMappingElementType()
Returns the name of the object mapping element type.
void rebuildPoolMapping(const std::string &scope, const std::string &extraScope, const std::map< std::string, std::vector< MappingRawElement > > &elementsByScope, ora::MappingRawData &dest, int &counter)
std::string variableNameFromPool(const std::string &variableName)
static std::string scopeNameColumn()
static std::string variableNameColumn()
tuple query
Definition: o2o.py:269
static std::string classMappingElementType()
Returns the name of the class mapping element type.
static std::string elementTypeColumn()
bool ora::PoolMappingSchema::getMappingVersionListForContainer ( int  containerId,
std::set< std::string > &  destination,
bool  onlyDependency = false 
)
virtual

Implements ora::IMappingSchema.

Definition at line 888 of file PoolDatabaseSchema.cc.

References ora::PoolContainerHeaderTable::containerIdColumn(), ora::PoolContainerHeaderTable::containerNameColumn(), ora::PoolClassVersionTable::containerNameColumn(), ora::MappingElement::dependencyMappingElementType(), ora::PoolMappingElementTable::elementTypeColumn(), ora::PoolMappingElementTable::mappingVersionColumn(), ora::PoolClassVersionTable::mappingVersionColumn(), o2o::query, runTheMatrix::ret, ora::PoolMappingElementTable::tableName(), ora::PoolContainerHeaderTable::tableName(), and ora::PoolClassVersionTable::tableName().

890  {
891  bool ret = false;
892  std::auto_ptr<coral::IQuery> query( m_schema.newQuery() );
893  query->addToTableList( PoolClassVersionTable::tableName(), "T0" );
894  query->addToTableList( PoolContainerHeaderTable::tableName(), "T1" );
895  query->addToTableList( PoolMappingElementTable::tableName(), "T2" );
896  query->addToOutputList( "T0."+PoolClassVersionTable::mappingVersionColumn() );
897  query->setDistinct();
898  std::ostringstream condition;
902  coral::AttributeList condData;
903  condData.extend< int >( PoolContainerHeaderTable::containerIdColumn() );
904  condData[ PoolContainerHeaderTable::containerIdColumn() ].data< int >() = containerId + 1; //POOL starts counting from 1!;
905  if( onlyDependency ){
907  condData.extend< std::string >( PoolMappingElementTable::elementTypeColumn() );
909  }
910  query->setCondition(condition.str(),condData);
911  coral::ICursor& cursor = query->execute();
912  while ( cursor.next() ) {
913  ret = true;
914  const coral::AttributeList& currentRow = cursor.currentRow();
915  std::string mappingVersion = currentRow[ "T0."+PoolClassVersionTable::mappingVersionColumn() ].data<std::string>();
916  dest.insert( mappingVersion );
917  }
918  return ret;
919 }
static std::string containerNameColumn()
static std::string dependencyMappingElementType()
Returns the name of the dependent class mapping element type.
static std::string mappingVersionColumn()
static std::string containerIdColumn()
static std::string mappingVersionColumn()
tuple query
Definition: o2o.py:269
static std::string tableName()
static std::string containerNameColumn()
static std::string elementTypeColumn()
bool ora::PoolMappingSchema::getMappingVersionListForTable ( const std::string &  tableName,
std::set< std::string > &  destination 
)
virtual

Implements ora::IMappingSchema.

Definition at line 980 of file PoolDatabaseSchema.cc.

981  {
982  // not implemented for the moment
983  return false;
984 }
bool ora::PoolMappingSchema::getVersionList ( std::set< std::string > &  destination)
virtual

Implements ora::IMappingSchema.

Definition at line 699 of file PoolDatabaseSchema.cc.

References ora::PoolMappingVersionTable::mappingVersionColumn(), o2o::query, runTheMatrix::ret, and ora::PoolMappingVersionTable::tableName().

699  {
700  bool ret = false;
701  std::auto_ptr<coral::IQuery> query( m_schema.tableHandle( PoolMappingVersionTable::tableName() ).newQuery() );
703  coral::ICursor& cursor = query->execute();
704  while ( cursor.next() ) {
705  ret = true;
706  const coral::AttributeList& currentRow = cursor.currentRow();
707  std::string mappingVersion = currentRow[ PoolMappingVersionTable::mappingVersionColumn()].data<std::string>();
708  dest.insert( mappingVersion );
709  }
710  return ret;
711 }
tuple query
Definition: o2o.py:269
static std::string mappingVersionColumn()
void ora::PoolMappingSchema::init ( PoolDbCache dbCache)

Definition at line 695 of file PoolDatabaseSchema.cc.

Referenced by ora::PoolDatabaseSchema::PoolDatabaseSchema().

695  {
696  m_dbCache = &dbCache;
697 }
void ora::PoolMappingSchema::insertClassVersion ( const std::string &  className,
const std::string &  classVersion,
const std::string &  classId,
int  dependencyIndex,
int  containerId,
const std::string &  mappingVersion 
)
virtual

Implements ora::IMappingSchema.

Definition at line 1034 of file PoolDatabaseSchema.cc.

References ora::PoolClassVersionTable::classVersionColumn(), ora::PoolClassVersionTable::containerNameColumn(), idDealer::inputData, ora::PoolClassVersionTable::mappingVersionColumn(), ora::PoolClassVersionTable::tableName(), and ora::throwException().

1039  {
1040  if(!m_dbCache){
1041  throwException("MappingSchema handle has not been initialized.","PoolMappingSchema::insertClassVersion");
1042  }
1043 
1044  coral::ITable& classVersionTable = m_schema.tableHandle( PoolClassVersionTable::tableName() );
1045  coral::AttributeList inputData;
1046  inputData.extend<std::string>( PoolClassVersionTable::mappingVersionColumn());
1047  inputData.extend<std::string>( PoolClassVersionTable::classVersionColumn());
1048  inputData.extend<std::string>( PoolClassVersionTable::containerNameColumn());
1049 
1050  std::string containerName = m_dbCache->nameById( containerId );
1051  coral::AttributeList::iterator iInAttr = inputData.begin();
1052  iInAttr->data< std::string >() = mappingVersion;
1053  ++iInAttr;
1054  iInAttr->data< std::string >() = classVersion;
1055  ++iInAttr;
1056  iInAttr->data< std::string >() = containerName;
1057  classVersionTable.dataEditor().insertRow( inputData );
1058 }
static std::string classVersionColumn()
const std::string & nameById(int id)
static std::string mappingVersionColumn()
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:10
static std::string tableName()
static std::string containerNameColumn()
tuple inputData
Definition: idDealer.py:72
void ora::PoolMappingSchema::removeMapping ( const std::string &  version)
virtual

Implements ora::IMappingSchema.

Definition at line 871 of file PoolDatabaseSchema.cc.

References ora::PoolMappingVersionTable::mappingVersionColumn(), ora::PoolMappingVersionTable::tableName(), ora::PoolMappingElementTable::tableName(), and ora::PoolClassVersionTable::tableName().

871  {
872  // Remove all rows in the tables with the version.
873  coral::AttributeList whereData;
874  whereData.extend<std::string>( PoolMappingVersionTable::mappingVersionColumn() );
875  whereData.begin()->data<std::string>() = version;
876 
878  m_schema.tableHandle( PoolClassVersionTable::tableName() ).dataEditor().deleteRows( condition, whereData );
879  m_schema.tableHandle( PoolMappingElementTable::tableName() ).dataEditor().deleteRows( condition, whereData );
880  m_schema.tableHandle( PoolMappingVersionTable::tableName() ).dataEditor().deleteRows( condition, whereData );
881 }
static std::string tableName()
static std::string mappingVersionColumn()
bool ora::PoolMappingSchema::selectMappingVersion ( const std::string &  classId,
int  containerId,
std::string &  destination 
)
virtual

Implements ora::IMappingSchema.

Definition at line 986 of file PoolDatabaseSchema.cc.

References ora::MappingRules::classNameFromBaseId(), ora::PoolClassVersionTable::classVersionColumn(), ora::MappingRules::classVersionFromId(), ora::PoolContainerHeaderTable::containerIdColumn(), ora::PoolContainerHeaderTable::containerNameColumn(), ora::PoolClassVersionTable::containerNameColumn(), ora::PoolDbCacheData::m_className, ora::PoolDbCacheData::m_mappingVersion, ora::PoolClassVersionTable::mappingVersionColumn(), o2o::query, runTheMatrix::ret, ora::PoolContainerHeaderTable::tableName(), and ora::PoolClassVersionTable::tableName().

988  {
989  bool ret = false;
990  destination.clear();
991 
992  std::pair<bool,std::string> isBaseId = MappingRules::classNameFromBaseId( classId );
993  if( !isBaseId.first ){
994  std::auto_ptr<coral::IQuery> query( m_schema.newQuery() );
995  query->addToTableList( PoolClassVersionTable::tableName(), "T0" );
996  query->addToTableList( PoolContainerHeaderTable::tableName(), "T1" );
997  query->addToOutputList( "T0."+PoolClassVersionTable::mappingVersionColumn() );
998  std::ostringstream condition;
1002  coral::AttributeList condData;
1003  condData.extend<std::string>( PoolClassVersionTable::classVersionColumn() );
1004  condData.extend<int>( PoolContainerHeaderTable::containerIdColumn() );
1005  coral::AttributeList::iterator iAttribute = condData.begin();
1006  iAttribute->data< std::string >() = MappingRules::classVersionFromId( classId );
1007  ++iAttribute;
1008  iAttribute->data< int >() = containerId + 1; //POOL starts counting from 1!;
1009  query->setCondition( condition.str(), condData );
1010  coral::ICursor& cursor = query->execute();
1011  while ( cursor.next() ) {
1012  ret = true;
1013  const coral::AttributeList& currentRow = cursor.currentRow();
1014  destination = currentRow["T0."+PoolClassVersionTable::mappingVersionColumn()].data<std::string>();
1015  }
1016  } else {
1017  PoolDbCacheData& containerData = m_dbCache->find( containerId );
1018  // in POOL db this will be only possible for top level classes (not for dependencies)
1019  if( containerData.m_className == isBaseId.second ){
1020  destination = containerData.m_mappingVersion;
1021  ret = true;
1022  }
1023  }
1024 
1025  return ret;
1026 }
static std::string containerNameColumn()
static std::string containerIdColumn()
static std::string classVersionColumn()
PoolDbCacheData & find(int id)
static std::string classVersionFromId(const std::string &classId)
Definition: MappingRules.cc:51
static std::pair< bool, std::string > classNameFromBaseId(const std::string &classId)
Definition: MappingRules.cc:72
static std::string mappingVersionColumn()
tuple query
Definition: o2o.py:269
static std::string tableName()
static std::string containerNameColumn()
void ora::PoolMappingSchema::setMappingVersion ( const std::string &  classId,
int  containerId,
const std::string &  mappingVersion 
)
virtual

Implements ora::IMappingSchema.

Definition at line 1060 of file PoolDatabaseSchema.cc.

References ora::PoolClassVersionTable::classVersionColumn(), ora::MappingRules::classVersionFromId(), ora::PoolClassVersionTable::containerNameColumn(), idDealer::inputData, ora::PoolClassVersionTable::mappingVersionColumn(), ora::PoolClassVersionTable::tableName(), and ora::throwException().

1062  {
1063  if(!m_dbCache){
1064  throwException("MappingSchema handle has not been initialized.","PoolMappingSchema::setMappingVersion");
1065  }
1066  coral::ITable& classVersionTable = m_schema.tableHandle( PoolClassVersionTable::tableName() );
1067  coral::AttributeList inputData;
1068  inputData.extend<std::string>( PoolClassVersionTable::mappingVersionColumn());
1069  inputData.extend<std::string>( PoolClassVersionTable::classVersionColumn());
1070  inputData.extend<std::string>( PoolClassVersionTable::containerNameColumn());
1071  std::string classVersion = MappingRules::classVersionFromId( classId );
1072  std::string containerName = m_dbCache->nameById( containerId );
1073  coral::AttributeList::iterator iInAttr = inputData.begin();
1074  iInAttr->data< std::string >() = mappingVersion;
1075  ++iInAttr;
1076  iInAttr->data< std::string >() = classVersion;
1077  ++iInAttr;
1078  iInAttr->data< std::string >() = containerName;
1080  std::string whereClause = PoolClassVersionTable::classVersionColumn()+" =:"+ PoolClassVersionTable::classVersionColumn()+" AND "+
1082  classVersionTable.dataEditor().updateRows( setClause,whereClause, inputData );
1083 }
static std::string classVersionColumn()
static std::string classVersionFromId(const std::string &classId)
Definition: MappingRules.cc:51
const std::string & nameById(int id)
static std::string mappingVersionColumn()
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:10
static std::string tableName()
static std::string containerNameColumn()
tuple inputData
Definition: idDealer.py:72
void ora::PoolMappingSchema::storeMapping ( const MappingRawData mapping)
virtual

Implements ora::IMappingSchema.

Definition at line 829 of file PoolDatabaseSchema.cc.

References ora::PoolMappingElementTable::columnNameColumn(), ora::PoolMappingElementTable::elementIdColumn(), ora::MappingRawData::elements, ora::PoolMappingElementTable::elementTypeColumn(), ora::MappingRawElement::emptyScope(), ora::PoolMappingVersionTable::mappingVersionColumn(), ora::PoolMappingElementTable::mappingVersionColumn(), ora::PoolMappingElementTable::scopeNameColumn(), ora::PoolMappingVersionTable::tableName(), ora::PoolMappingElementTable::tableName(), ora::PoolMappingElementTable::tableNameColumn(), ora::PoolMappingElementTable::variableNameColumn(), ora::PoolMappingElementTable::variableParIndexColumn(), ora::PoolMappingElementTable::variableTypeColumn(), and ora::MappingRawData::version.

829  {
830  // first update the version table
831  coral::ITable& mappingVersionTable = m_schema.tableHandle( PoolMappingVersionTable::tableName() );
832  coral::AttributeList rowBuffer;
833  rowBuffer.extend< std::string >( PoolMappingVersionTable::mappingVersionColumn() );
834  rowBuffer[ PoolMappingVersionTable::mappingVersionColumn() ].data<std::string>()= mapping.version;
835  mappingVersionTable.dataEditor().insertRow( rowBuffer );
836 
837  // then update the element tables
838  coral::ITable& mappingElementTable = m_schema.tableHandle( PoolMappingElementTable::tableName() );
839  coral::AttributeList dataBuffer;
840  dataBuffer.extend< std::string >( PoolMappingElementTable::mappingVersionColumn() );
841  dataBuffer.extend< std::string >( PoolMappingElementTable::elementIdColumn() );
842  dataBuffer.extend< std::string >( PoolMappingElementTable::elementTypeColumn() );
843  dataBuffer.extend< std::string >( PoolMappingElementTable::scopeNameColumn() );
844  dataBuffer.extend< std::string >( PoolMappingElementTable::variableNameColumn() );
845  dataBuffer.extend< unsigned int >( PoolMappingElementTable::variableParIndexColumn() );
846  dataBuffer.extend< std::string >( PoolMappingElementTable::variableTypeColumn() );
847  dataBuffer.extend< std::string >( PoolMappingElementTable::tableNameColumn() );
848  dataBuffer.extend< std::string >( PoolMappingElementTable::columnNameColumn() );
849  dataBuffer[ PoolMappingElementTable::mappingVersionColumn() ].data<std::string>()= mapping.version;
850 
851  for( std::map < int, MappingRawElement >::const_iterator iElem = mapping.elements.begin();
852  iElem != mapping.elements.end(); iElem++ ){
853  for( size_t iParamIndex = 0; iParamIndex < iElem->second.columns.size(); iParamIndex++ ){
854  std::stringstream elemIdx;
855  elemIdx << iElem->first;
856  std::string scopeName = iElem->second.scopeName;
857  if( scopeName == MappingRawElement::emptyScope() ) scopeName = std::string(" ");
858  dataBuffer[ PoolMappingElementTable::elementIdColumn() ].data<std::string>() = elemIdx.str();
859  dataBuffer[ PoolMappingElementTable::elementTypeColumn()].data<std::string>()= iElem->second.elementType;
860  dataBuffer[ PoolMappingElementTable::scopeNameColumn() ].data<std::string>()= scopeName;
861  dataBuffer[ PoolMappingElementTable::variableNameColumn() ].data<std::string>()= iElem->second.variableName;
862  dataBuffer[ PoolMappingElementTable::variableParIndexColumn() ].data<unsigned int>() = iParamIndex;
863  dataBuffer[ PoolMappingElementTable::variableTypeColumn() ].data<std::string>()= iElem->second.variableType;
864  dataBuffer[ PoolMappingElementTable::tableNameColumn() ].data<std::string>()= iElem->second.tableName;
865  dataBuffer[ PoolMappingElementTable::columnNameColumn() ].data<std::string>()= iElem->second.columns[iParamIndex];
866  mappingElementTable.dataEditor().insertRow( dataBuffer );
867  }
868  }
869 }
static std::string tableNameColumn()
static std::string variableTypeColumn()
static std::string columnNameColumn()
static std::string mappingVersionColumn()
static std::string variableParIndexColumn()
static std::string elementIdColumn()
static std::string emptyScope()
static std::string scopeNameColumn()
static std::string variableNameColumn()
static std::string mappingVersionColumn()
static std::string elementTypeColumn()

Member Data Documentation

PoolDbCache* ora::PoolMappingSchema::m_dbCache
private

Definition at line 199 of file PoolDatabaseSchema.h.

coral::ISchema& ora::PoolMappingSchema::m_schema
private

Definition at line 198 of file PoolDatabaseSchema.h.