Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

rdbModel::Supersede Class Reference

#include <Supersede.h>

List of all members.

Public Member Functions

Visitor::VisitorState accept (Visitor *v)
Visitor::VisitorState accept (Visitor *v)
void addSet (Set *s)
void addSet (Set *s)
const std::vector< std::string > & getAsk () const
const std::vector< std::string > & getAsk () const
const std::vector< FieldVal > & getFixed () const
const std::vector< FieldVal > & getFixed () const
const std::vector< std::string > & getFixedInterp () const
const std::vector< std::string > & getFixedInterp () const
const std::vector< std::string > & getForced () const
const std::vector< std::string > & getForced () const
const std::vector< std::string > & getFromOld () const
const std::vector< std::string > & getFromOld () const
const std::vector< std::string > & getOldDefaulted () const
const std::vector< std::string > & getOldDefaulted () const
AssertiongetOnlyIf ()
AssertiongetOnlyIf ()
const std::vector< Set * > & getSetNew () const
const std::vector< Set * > & getSetNew () const
const std::vector< Set * > & getSetOld () const
const std::vector< Set * > & getSetOld () const
const TablegetTable () const
const TablegetTable () const
void normalize ()
void normalize ()
void setOnlyIf (Assertion *onlyIf)
void setOnlyIf (Assertion *onlyIf)
 Supersede (Table *table, Assertion *onlyIf=0)
 Supersede (Table *table, Assertion *onlyIf=0)
 ~Supersede ()
 ~Supersede ()

Private Attributes

std::vector< std::string > m_ask
 Names of columns for which client must supply a value (no default).
std::vector< std::string > m_ask
 Names of columns for which client must supply a value (no default).
std::vector< FieldValm_fixed
 Names of columns for which <supersede> supplies fixed value for new row.
std::vector< FieldValm_fixed
 Names of columns for which <supersede> supplies fixed value for new row.
std::vector< std::string > m_fixedInterp
std::vector< std::string > m_fixedInterp
std::vector< std::string > m_fromOld
 Name of all columns to be fetched from old row by Table::supersedeRow.
std::vector< std::string > m_fromOld
 Name of all columns to be fetched from old row by Table::supersedeRow.
Tablem_myTable
Tablem_myTable
bool m_normalized
std::vector< std::string > m_oldDefaults
 column names where old-row value is to be used as default
std::vector< std::string > m_oldDefaults
 column names where old-row value is to be used as default
std::vector< std::string > m_oldForced
 column names where old-row value is to be copied to new row
std::vector< std::string > m_oldForced
 column names where old-row value is to be copied to new row
Assertionm_onlyIf
Assertionm_onlyIf
std::vector< Set * > m_setNew
std::vector< Set * > m_setNew
std::vector< Set * > m_setOld
std::vector< Set * > m_setOld


Detailed Description

Supersede operation needs to o change one or more column values in row being superseded o set values in new, superseding row. Default is to assume values come from the old row; only specify those that don't


Constructor & Destructor Documentation

rdbModel::Supersede::Supersede Table table,
Assertion onlyIf = 0
 

00009                                                       : 
00010     m_myTable(table), m_onlyIf(onlyIf), m_normalized(false) {
00011     m_setOld.clear();
00012     m_setNew.clear();
00013     m_oldDefaults.clear();
00014     m_oldForced.clear();
00015     m_ask.clear();
00016     m_fixed.clear();
00017   }

rdbModel::Supersede::~Supersede  ) 
 

00075                         {
00076     while (m_setOld.size() ) {
00077       Set* s  = m_setOld.back();
00078       m_setOld.pop_back();
00079       delete s;
00080     }
00081     while (m_setNew.size() ) {
00082       Set* s  = m_setNew.back();
00083       m_setNew.pop_back();
00084       delete s;
00085     }
00086     //    delete m_onlyIf;    probably already handled by ~Table
00087   }

rdbModel::Supersede::Supersede Table table,
Assertion onlyIf = 0
 

rdbModel::Supersede::~Supersede  ) 
 


Member Function Documentation

Visitor::VisitorState rdbModel::Supersede::accept Visitor v  ) 
 

Visitor::VisitorState rdbModel::Supersede::accept Visitor v  ) 
 

00090                                                   {
00091     Visitor::VisitorState state = v->visitSupersede(this);
00092     if (state == Visitor::VBRANCHDONE) return Visitor::VCONTINUE;
00093     return state;
00094   }

void rdbModel::Supersede::addSet Set s  ) 
 

void rdbModel::Supersede::addSet Set s  ) 
 

00019                                {
00020     FIELDTYPE vtype = s->getDestType();
00021     switch(vtype) {
00022     case FIELDTYPEold: 
00023     case FIELDTYPEoldDef:    // this shouldn't occur
00024       m_setOld.push_back(s); break;
00025     case FIELDTYPEtoBe: 
00026     case FIELDTYPEtoBeDef:    // nor this
00027       m_setNew.push_back(s); break;
00028     default: throw RdbException("Bad value type for <set> destination");
00029     }
00030     return;
00031   }

const std::vector<std::string>& rdbModel::Supersede::getAsk  )  const [inline]
 

00037                                                {
00038       return m_ask; }

const std::vector<std::string>& rdbModel::Supersede::getAsk  )  const [inline]
 

00037                                                {
00038       return m_ask; }

const std::vector<FieldVal>& rdbModel::Supersede::getFixed  )  const [inline]
 

00046 { return m_fixed;}

const std::vector<FieldVal>& rdbModel::Supersede::getFixed  )  const [inline]
 

00046 { return m_fixed;}

const std::vector<std::string>& rdbModel::Supersede::getFixedInterp  )  const [inline]
 

00047                                                        { 
00048       return m_fixedInterp;}

const std::vector<std::string>& rdbModel::Supersede::getFixedInterp  )  const [inline]
 

00047                                                        { 
00048       return m_fixedInterp;}

const std::vector<std::string>& rdbModel::Supersede::getForced  )  const [inline]
 

00050 { return m_oldForced;}

const std::vector<std::string>& rdbModel::Supersede::getForced  )  const [inline]
 

00050 { return m_oldForced;}

const std::vector<std::string>& rdbModel::Supersede::getFromOld  )  const [inline]
 

00043                                                    {
00044       return m_fromOld;}

const std::vector<std::string>& rdbModel::Supersede::getFromOld  )  const [inline]
 

00043                                                    {
00044       return m_fromOld;}

const std::vector<std::string>& rdbModel::Supersede::getOldDefaulted  )  const [inline]
 

00040                                                         {
00041       return m_oldDefaults; }

const std::vector<std::string>& rdbModel::Supersede::getOldDefaulted  )  const [inline]
 

00040                                                         {
00041       return m_oldDefaults; }

Assertion* rdbModel::Supersede::getOnlyIf  )  [inline]
 

00035 {return m_onlyIf;}

Assertion* rdbModel::Supersede::getOnlyIf  )  [inline]
 

00035 {return m_onlyIf;}

const std::vector<Set*>& rdbModel::Supersede::getSetNew  )  const [inline]
 

00027 {return m_setOld;}

const std::vector<Set*>& rdbModel::Supersede::getSetNew  )  const [inline]
 

00027 {return m_setOld;}

const std::vector<Set*>& rdbModel::Supersede::getSetOld  )  const [inline]
 

00026 {return m_setOld;}

const std::vector<Set*>& rdbModel::Supersede::getSetOld  )  const [inline]
 

00026 {return m_setOld;}

const Table* rdbModel::Supersede::getTable  )  const [inline]
 

00031 {return m_myTable;}

const Table* rdbModel::Supersede::getTable  )  const [inline]
 

00031 {return m_myTable;}

void rdbModel::Supersede::normalize  ) 
 

Initialize m_oldDefaults, m_oldForced, m_ask and m_fixed if it hasn't been done already

void rdbModel::Supersede::normalize  ) 
 

Initialize m_oldDefaults, m_oldForced, m_ask and m_fixed if it hasn't been done already

00034                             {
00035     if (m_normalized) return;
00036     //    unsigned nOld = m_setOld.size();
00037     unsigned nNew = m_setNew.size();
00038     // For each object in m_setNew, store information in one of the 
00039     // vectors of column names or in m_fixed for easy access later
00040     for (unsigned iNew = 0; iNew < nNew; iNew++) {
00041       //      FIELDTYPE srcType = m_setOld[iOld]->getSrcType();
00042       //      switch (srcType) {
00043       switch (m_setNew[iNew]->getSrcType()) {
00044       case FIELDTYPEold: 
00045         m_oldForced.push_back(m_setNew[iNew]->getDestColName());
00046         break;
00047       case FIELDTYPEoldDef: 
00048         m_oldDefaults.push_back(m_setNew[iNew]->getDestColName());
00049         break;
00050       case FIELDTYPEask:
00051         m_ask.push_back(m_setNew[iNew]->getDestColName());
00052         break;
00053       case FIELDTYPElit:
00054         m_fixed.push_back(FieldVal(m_setNew[iNew]->getDestColName(),
00055                                    m_setNew[iNew]->getSrcValue()));
00056         m_fixedInterp.push_back(m_setNew[iNew]->getInterp());
00057         break;
00058       default:
00059         throw RdbException("Supersede::normalize Unrecognized <set>");
00060       }
00061     }
00062 
00063     m_fromOld.reserve(m_oldDefaults.size() + m_oldForced.size());
00064     m_fromOld.clear();
00065     for (unsigned i = 0; i < m_oldDefaults.size(); i++) {
00066       m_fromOld.push_back(m_oldDefaults[i]);
00067     }
00068     for (unsigned i = 0; i < m_oldForced.size(); i++) {
00069       m_fromOld.push_back(m_oldForced[i]);
00070     }
00071     m_normalized = true;
00072   }

void rdbModel::Supersede::setOnlyIf Assertion onlyIf  )  [inline]
 

00057 {m_onlyIf = onlyIf;}

void rdbModel::Supersede::setOnlyIf Assertion onlyIf  )  [inline]
 

00057 {m_onlyIf = onlyIf;}


Member Data Documentation

std::vector<std::string> rdbModel::Supersede::m_ask [private]
 

Names of columns for which client must supply a value (no default).

std::vector<std::string> rdbModel::Supersede::m_ask [private]
 

Names of columns for which client must supply a value (no default).

std::vector<FieldVal> rdbModel::Supersede::m_fixed [private]
 

Names of columns for which <supersede> supplies fixed value for new row.

std::vector<FieldVal> rdbModel::Supersede::m_fixed [private]
 

Names of columns for which <supersede> supplies fixed value for new row.

std::vector<std::string> rdbModel::Supersede::m_fixedInterp [private]
 

Parallel vector to keep track of which among fixed columns require further interpretation. May want to move this into FieldVal

std::vector<std::string> rdbModel::Supersede::m_fixedInterp [private]
 

Parallel vector to keep track of which among fixed columns require further interpretation. May want to move this into FieldVal

std::vector<std::string> rdbModel::Supersede::m_fromOld [private]
 

Name of all columns to be fetched from old row by Table::supersedeRow.

std::vector<std::string> rdbModel::Supersede::m_fromOld [private]
 

Name of all columns to be fetched from old row by Table::supersedeRow.

Table* rdbModel::Supersede::m_myTable [private]
 

Table* rdbModel::Supersede::m_myTable [private]
 

bool rdbModel::Supersede::m_normalized [private]
 

std::vector<std::string> rdbModel::Supersede::m_oldDefaults [private]
 

column names where old-row value is to be used as default

Always need to fetch the same set of columns from the row to be superseded. Some of the values must be used in the new row; others are just defaults.

std::vector<std::string> rdbModel::Supersede::m_oldDefaults [private]
 

column names where old-row value is to be used as default

Always need to fetch the same set of columns from the row to be superseded. Some of the values must be used in the new row; others are just defaults.

std::vector<std::string> rdbModel::Supersede::m_oldForced [private]
 

column names where old-row value is to be copied to new row

std::vector<std::string> rdbModel::Supersede::m_oldForced [private]
 

column names where old-row value is to be copied to new row

Assertion* rdbModel::Supersede::m_onlyIf [private]
 

Assertion* rdbModel::Supersede::m_onlyIf [private]
 

std::vector<Set*> rdbModel::Supersede::m_setNew [private]
 

std::vector<Set*> rdbModel::Supersede::m_setNew [private]
 

std::vector<Set*> rdbModel::Supersede::m_setOld [private]
 

std::vector<Set*> rdbModel::Supersede::m_setOld [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 19:22:45 2011 for BOSS6.5.5 by  doxygen 1.3.9.1