rdbModel::Supersede Class Reference

#include <Supersede.h>

List of all members.

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 TablegetTable () const
Visitor::VisitorState accept (Visitor *v)
AssertiongetOnlyIf ()
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

Tablem_myTable
Assertionm_onlyIf
std::vector< Set * > m_setOld
std::vector< Set * > m_setNew
std::vector< std::stringm_oldDefaults
 column names where old-row value is to be used as default
std::vector< std::stringm_oldForced
 column names where old-row value is to be copied to new row
std::vector< std::stringm_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< std::stringm_fixedInterp
std::vector< std::stringm_fromOld
 Name of all columns to be fetched from old row by Table::supersedeRow.
bool m_normalized


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

Definition at line 20 of file Supersede.h.


Constructor & Destructor Documentation

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

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   }


Member Function Documentation

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]

Definition at line 37 of file Supersede.h.

References m_ask.

00037                                                {
00038       return m_ask; }

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]

Definition at line 27 of file Supersede.h.

References m_setOld.

00027 {return m_setOld;}

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]

Definition at line 31 of file Supersede.h.

References m_myTable.

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

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]

Definition at line 57 of file Supersede.h.

References m_onlyIf.

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).

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]

Definition at line 66 of file Supersede.h.

Referenced by getTable().

bool rdbModel::Supersede::m_normalized [private]

Definition at line 93 of file Supersede.h.

Referenced by normalize().

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]

Definition at line 68 of file Supersede.h.

Referenced by getOnlyIf(), and setOnlyIf().

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().


Generated on Tue Nov 29 23:36:36 2016 for BOSS_7.0.2 by  doxygen 1.4.7