CMS 3D CMS Logo

Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes

ora::OraContainerHeaderTable Class Reference

#include <OraDatabaseSchema.h>

Inheritance diagram for ora::OraContainerHeaderTable:
ora::IContainerHeaderTable ora::IDatabaseTable

List of all members.

Public Member Functions

void addContainer (int id, const std::string &containerName, const std::string &className)
void create ()
void decrementNumberOfObjects (int id)
void drop ()
bool exists ()
bool getContainerData (std::map< std::string, ContainerHeaderData > &destination)
void incrementNumberOfObjects (int id)
 OraContainerHeaderTable (coral::ISchema &dbSchema)
void removeContainer (int id)
void updateNumberOfObjects (const std::map< int, unsigned int > &numberOfObjectsForContainerIds)
virtual ~OraContainerHeaderTable ()

Static Public Member Functions

static std::string classNameColumn ()
static std::string containerIdColumn ()
static std::string containerNameColumn ()
static std::string numberOfObjectsColumn ()
static std::string tableName ()

Private Member Functions

void updateContainer (int id, const std::string &setClause)

Private Attributes

coral::ISchema & m_schema

Detailed Description

Definition at line 88 of file OraDatabaseSchema.h.


Constructor & Destructor Documentation

ora::OraContainerHeaderTable::OraContainerHeaderTable ( coral::ISchema &  dbSchema) [explicit]

Definition at line 385 of file OraDatabaseSchema.cc.

                                                                           :
  m_schema(dbSchema){
}
ora::OraContainerHeaderTable::~OraContainerHeaderTable ( ) [virtual]

Definition at line 389 of file OraDatabaseSchema.cc.

                                                    {
}

Member Function Documentation

void ora::OraContainerHeaderTable::addContainer ( int  id,
const std::string &  containerName,
const std::string &  className 
) [virtual]

Implements ora::IContainerHeaderTable.

Definition at line 416 of file OraDatabaseSchema.cc.

                                                                             {
  coral::AttributeList dataToInsert;
  unsigned int numberOfObjects = 0;
  dataToInsert.extend<int>( containerIdColumn());
  dataToInsert.extend<std::string>( containerNameColumn());
  dataToInsert.extend<std::string>( classNameColumn());
  dataToInsert.extend<unsigned int>( numberOfObjectsColumn());
  dataToInsert[ containerIdColumn() ].data<int>() = containerId;
  dataToInsert[ containerNameColumn() ].data<std::string>() = containerName;
  dataToInsert[ classNameColumn() ].data<std::string>() = className;
  dataToInsert[ numberOfObjectsColumn() ].data<unsigned int>() = numberOfObjects;
  coral::ITable& containerTable = m_schema.tableHandle( tableName() );
  containerTable.dataEditor().insertRow( dataToInsert );
}
std::string ora::OraContainerHeaderTable::classNameColumn ( ) [static]

Definition at line 375 of file OraDatabaseSchema.cc.

                                                     {
  static std::string s_column("CLASS_NAME");
  return s_column;
}
std::string ora::OraContainerHeaderTable::containerIdColumn ( ) [static]

Definition at line 364 of file OraDatabaseSchema.cc.

Referenced by ora::OraClassVersionTable::create().

                                                       {
  static std::string s_column("CONTAINER_ID");
  return s_column;
}
std::string ora::OraContainerHeaderTable::containerNameColumn ( ) [static]

Definition at line 370 of file OraDatabaseSchema.cc.

                                                         {
  static std::string s_column("CONTAINER_NAME");
  return s_column;  
}
void ora::OraContainerHeaderTable::create ( ) [virtual]

Implements ora::IDatabaseTable.

Definition at line 494 of file OraDatabaseSchema.cc.

References asciidump::table, and ora::throwException().

                                       {
  if( m_schema.existsTable( tableName() )){
    throwException( "ORA database container header table already exists in this schema.",
                    "OraContainerHeaderTable::create");
  }
  
  coral::TableDescription descr( "OraDb" );
  descr.setName( tableName() );
  descr.insertColumn( containerIdColumn(),
                      coral::AttributeSpecification::typeNameForType<int>() );
  descr.insertColumn( containerNameColumn(),
                      coral::AttributeSpecification::typeNameForType<std::string>() );
  descr.insertColumn( classNameColumn(),
                      coral::AttributeSpecification::typeNameForType<std::string>() );
  descr.insertColumn( numberOfObjectsColumn(),
                      coral::AttributeSpecification::typeNameForType<unsigned int>() );
  descr.setNotNullConstraint( containerIdColumn() );
  descr.setNotNullConstraint( containerNameColumn() );
  descr.setNotNullConstraint( classNameColumn() );
  descr.setNotNullConstraint( numberOfObjectsColumn() );
  descr.setPrimaryKey( std::vector<std::string>( 1, containerIdColumn() ) );
  descr.setUniqueConstraint( containerNameColumn() );
  coral::ITable& table = m_schema.createTable( descr );
  table.privilegeManager().grantToPublic( coral::ITablePrivilegeManager::Select );
}
void ora::OraContainerHeaderTable::decrementNumberOfObjects ( int  id) [virtual]

Implements ora::IContainerHeaderTable.

Definition at line 460 of file OraDatabaseSchema.cc.

                                                                           {
  std::stringstream setClause;
  setClause << numberOfObjectsColumn() << " = " <<numberOfObjectsColumn() << " - 1";
  return updateContainer( containerId, setClause.str() );
}
void ora::OraContainerHeaderTable::drop ( ) [virtual]

Implements ora::IDatabaseTable.

Definition at line 520 of file OraDatabaseSchema.cc.

                                     {
  m_schema.dropIfExistsTable( tableName() );
}
bool ora::OraContainerHeaderTable::exists ( ) [virtual]

Implements ora::IDatabaseTable.

Definition at line 490 of file OraDatabaseSchema.cc.

                                       {
  return m_schema.existsTable( tableName() );
}
bool ora::OraContainerHeaderTable::getContainerData ( std::map< std::string, ContainerHeaderData > &  destination) [virtual]
void ora::OraContainerHeaderTable::incrementNumberOfObjects ( int  id) [virtual]

Implements ora::IContainerHeaderTable.

Definition at line 454 of file OraDatabaseSchema.cc.

                                                                           {
  std::stringstream setClause;
  setClause << numberOfObjectsColumn() << " = " <<numberOfObjectsColumn() << " + 1";
  return updateContainer( containerId, setClause.str() );
}
std::string ora::OraContainerHeaderTable::numberOfObjectsColumn ( ) [static]

Definition at line 380 of file OraDatabaseSchema.cc.

                                                           {
  static std::string s_column("NUMBER_OF_OBJECTS");
  return s_column;  
}
void ora::OraContainerHeaderTable::removeContainer ( int  id) [virtual]

Implements ora::IContainerHeaderTable.

Definition at line 433 of file OraDatabaseSchema.cc.

                                                        {
  std::stringstream whereClause;
  whereClause << containerIdColumn() << "= :" <<containerIdColumn();
  coral::AttributeList whereData;
  whereData.extend< int >( containerIdColumn() );
  whereData.begin()->data< int >() = id;
  coral::ITable& containerTable = m_schema.tableHandle( tableName() );
  containerTable.dataEditor().deleteRows(whereClause.str(),whereData);
}
std::string ora::OraContainerHeaderTable::tableName ( ) [static]

Definition at line 358 of file OraDatabaseSchema.cc.

Referenced by ora::OraClassVersionTable::create().

                                               {
  static std::string s_name("ORA_CONTAINER");
  return s_name;
}
void ora::OraContainerHeaderTable::updateContainer ( int  id,
const std::string &  setClause 
) [private]

Definition at line 443 of file OraDatabaseSchema.cc.

                                                                                {
  std::stringstream whereClause;
  whereClause << containerIdColumn() << "= :" <<containerIdColumn();
  coral::AttributeList updateData;
  updateData.extend<int>( containerIdColumn() );
  updateData.begin()->data<int>() = containerId;
  coral::ITable& containerTable = m_schema.tableHandle( tableName() );
  containerTable.dataEditor().updateRows(setClause,whereClause.str(),updateData);
}
void ora::OraContainerHeaderTable::updateNumberOfObjects ( const std::map< int, unsigned int > &  numberOfObjectsForContainerIds) [virtual]

Implements ora::IContainerHeaderTable.

Definition at line 466 of file OraDatabaseSchema.cc.

                                                                                                                      {
  if( numberOfObjectsForContainerIds.size() ){

    std::stringstream whereClause;
    whereClause << containerIdColumn() << "= :" <<containerIdColumn();
    std::stringstream setClause;
    setClause << numberOfObjectsColumn() << " = :" <<numberOfObjectsColumn();
    coral::AttributeList updateData;
    updateData.extend<unsigned int>( numberOfObjectsColumn() );
    updateData.extend<int>( containerIdColumn() );

    coral::ITable& containerTable = m_schema.tableHandle( tableName() );
    std::auto_ptr<coral::IBulkOperation> bulkUpdate( containerTable.dataEditor().bulkUpdateRows( setClause.str(), whereClause.str(), updateData,(int)numberOfObjectsForContainerIds.size()));

    for( std::map<int,unsigned int>::const_iterator iCont = numberOfObjectsForContainerIds.begin();
         iCont != numberOfObjectsForContainerIds.end(); ++iCont ){
      updateData[containerIdColumn()].data<int>() = iCont->first;
      updateData[numberOfObjectsColumn()].data<unsigned int>() = iCont->second;
      bulkUpdate->processNextIteration();
    }
    bulkUpdate->flush();
  }
}

Member Data Documentation

coral::ISchema& ora::OraContainerHeaderTable::m_schema [private]

Definition at line 112 of file OraDatabaseSchema.h.