#include <Supersede.h>
Public Member Functions | |
Supersede (Table *table, Assertion *onlyIf=0) | |
~Supersede () | |
const std::vector< Set * > & | getSetOld () const |
const std::vector< Set * > & | getSetNew () const |
void | addSet (Set *s) |
const Table * | getTable () const |
Visitor::VisitorState | accept (Visitor *v) |
Assertion * | getOnlyIf () |
const std::vector< std::string > & | getAsk () const |
const std::vector< std::string > & | getOldDefaulted () const |
const std::vector< std::string > & | getFromOld () const |
const std::vector< FieldVal > & | getFixed () const |
const std::vector< std::string > & | getFixedInterp () const |
const std::vector< std::string > & | getForced () const |
void | setOnlyIf (Assertion *onlyIf) |
void | normalize () |
Private Attributes | |
Table * | m_myTable |
Assertion * | m_onlyIf |
std::vector< Set * > | m_setOld |
std::vector< Set * > | m_setNew |
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_ask |
Names of columns for which client must supply a value (no default). | |
std::vector< FieldVal > | m_fixed |
Names of columns for which <supersede> supplies fixed value for new row. | |
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. | |
bool | m_normalized |
Definition at line 20 of file Supersede.h.
Definition at line 9 of file Supersede.cxx.
References m_ask, m_fixed, m_oldDefaults, m_oldForced, m_setNew, and m_setOld.
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 | ( | ) |
Definition at line 75 of file Supersede.cxx.
References m_setNew, m_setOld, and s.
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 }
Visitor::VisitorState rdbModel::Supersede::accept | ( | Visitor * | v | ) |
Definition at line 90 of file Supersede.cxx.
References v, rdbModel::Visitor::VBRANCHDONE, and rdbModel::Visitor::VCONTINUE.
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 | ) |
Definition at line 19 of file Supersede.cxx.
References rdbModel::FIELDTYPEold, rdbModel::FIELDTYPEoldDef, rdbModel::FIELDTYPEtoBe, rdbModel::FIELDTYPEtoBeDef, m_setNew, m_setOld, and s.
Referenced by rdbModel::XercesBuilder::buildSupersede().
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] |
const std::vector<FieldVal>& rdbModel::Supersede::getFixed | ( | ) | const [inline] |
Definition at line 46 of file Supersede.h.
References m_fixed.
Referenced by rdbModel::Table::supersedeRow().
00046 { return m_fixed;}
const std::vector<std::string>& rdbModel::Supersede::getFixedInterp | ( | ) | const [inline] |
Definition at line 47 of file Supersede.h.
References m_fixedInterp.
Referenced by rdbModel::Table::supersedeRow().
00047 { 00048 return m_fixedInterp;}
const std::vector<std::string>& rdbModel::Supersede::getForced | ( | ) | const [inline] |
Definition at line 50 of file Supersede.h.
References m_oldForced.
Referenced by rdbModel::Table::supersedeRow().
00050 { return m_oldForced;}
const std::vector<std::string>& rdbModel::Supersede::getFromOld | ( | ) | const [inline] |
Definition at line 43 of file Supersede.h.
References m_fromOld.
Referenced by rdbModel::Table::supersedeRow().
00043 { 00044 return m_fromOld;}
const std::vector<std::string>& rdbModel::Supersede::getOldDefaulted | ( | ) | const [inline] |
Definition at line 40 of file Supersede.h.
References m_oldDefaults.
Referenced by rdbModel::Table::supersedeRow().
00040 { 00041 return m_oldDefaults; }
Assertion* rdbModel::Supersede::getOnlyIf | ( | ) | [inline] |
Definition at line 35 of file Supersede.h.
References m_onlyIf.
Referenced by rdbModel::Table::isSupersedable().
00035 {return m_onlyIf;}
const std::vector<Set*>& rdbModel::Supersede::getSetNew | ( | ) | const [inline] |
const std::vector<Set*>& rdbModel::Supersede::getSetOld | ( | ) | const [inline] |
Definition at line 26 of file Supersede.h.
References m_setOld.
Referenced by rdbModel::Table::supersedeRow().
00026 {return m_setOld;}
const Table* rdbModel::Supersede::getTable | ( | ) | const [inline] |
void rdbModel::Supersede::normalize | ( | ) |
Initialize m_oldDefaults, m_oldForced, m_ask and m_fixed if it hasn't been done already
Definition at line 34 of file Supersede.cxx.
References rdbModel::FIELDTYPEask, rdbModel::FIELDTYPElit, rdbModel::FIELDTYPEold, rdbModel::FIELDTYPEoldDef, genRecEmupikp::i, m_ask, m_fixed, m_fixedInterp, m_fromOld, m_normalized, m_oldDefaults, m_oldForced, and m_setNew.
Referenced by rdbModel::XercesBuilder::buildSupersede().
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] |
std::vector<std::string> rdbModel::Supersede::m_ask [private] |
Names of columns for which client must supply a value (no default).
Definition at line 81 of file Supersede.h.
Referenced by getAsk(), normalize(), and Supersede().
std::vector<FieldVal> rdbModel::Supersede::m_fixed [private] |
Names of columns for which <supersede> supplies fixed value for new row.
Definition at line 84 of file Supersede.h.
Referenced by getFixed(), normalize(), and Supersede().
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
Definition at line 88 of file Supersede.h.
Referenced by getFixedInterp(), and normalize().
std::vector<std::string> rdbModel::Supersede::m_fromOld [private] |
Name of all columns to be fetched from old row by Table::supersedeRow.
Definition at line 91 of file Supersede.h.
Referenced by getFromOld(), and normalize().
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.
Definition at line 76 of file Supersede.h.
Referenced by getOldDefaulted(), normalize(), and Supersede().
std::vector<std::string> rdbModel::Supersede::m_oldForced [private] |
column names where old-row value is to be copied to new row
Definition at line 78 of file Supersede.h.
Referenced by getForced(), normalize(), and Supersede().
Assertion* rdbModel::Supersede::m_onlyIf [private] |
std::vector<Set*> rdbModel::Supersede::m_setNew [private] |
Definition at line 70 of file Supersede.h.
Referenced by addSet(), normalize(), Supersede(), and ~Supersede().
std::vector<Set*> rdbModel::Supersede::m_setOld [private] |
Definition at line 69 of file Supersede.h.
Referenced by addSet(), getSetNew(), getSetOld(), Supersede(), and ~Supersede().