DbiResult Class Reference

#include <DbiResult.h>

Inheritance diagram for DbiResult:
DbiResultAgg DbiResultNonAgg

List of all members.

Public Member Functions

 DbiResult (DbiResultSet *resultSet=0, const DbiValidityRec *vrec=0, const string &sqlQualifiers="")
virtual ~DbiResult ()
virtual Bool_t CanReuse () const
virtual Bool_t CanSave () const
virtual void Connect () const
virtual DbiResultKeyCreateKey () const =0
virtual void Disconnect () const
const DbiExceptionLogGetExceptionLog () const
Int_t GetID () const
virtual const DbiResultKeyGetKey () const
virtual UInt_t GetNumAggregates () const =0
virtual UInt_t GetNumClients () const
virtual UInt_t GetNumRows () const =0
const string & GetSqlQualifiers () const
virtual const DbiTableRowGetTableRow (UInt_t rowNum) const =0
virtual const DbiTableRowGetTableRowByIndex (UInt_t index) const
virtual const DbiValidityRecGetValidityRec (const DbiTableRow *=0) const
virtual const DbiValidityRecGetValidityRecGlobal () const
Bool_t IsExtendedContext () const
virtual Bool_t Owns (const DbiTableRow *) const
Bool_t ResultsFromDb () const
virtual const string & TableName () const
void CaptureExceptionLog (UInt_t startFrom)
virtual Bool_t CanDelete (const DbiResult *res=0)
 Return true if no clients and unlikely to be reused.
virtual Bool_t Satisfies (const VldContext &vc, const Dbi::Task &task)
virtual Bool_t Satisfies (const string &)
virtual Bool_t Satisfies (const DbiValidityRec &, const string &="")
virtual void DeRegisterKey ()
 Key handling.
virtual void RegisterKey ()
virtual void Streamer (DbiBinaryFile &file)
virtual void SetCanReuse (Bool_t reuse)

Protected Member Functions

void SetResultsFromDb ()
void BuildLookUpTable () const
Bool_t LookUpBuilt () const
virtual void SetTableName (const string &tableName)
virtual void SetValidityRec (const DbiValidityRec &vRec)

Private Attributes

Int_t fID
 Unique ID within the current job.
Bool_t fCanReuse
DbiValidityRec fEffVRec
IndexToRow_t fIndexKeys
const DbiResultKeyfKey
Bool_t fResultsFromDb
 True is at least part didn't come from cache.
Int_t fNumClients
string fTableName
string fSqlQualifiers
DbiExceptionLog fExceptionLog
 Exception log produced when query was executed.

Static Private Attributes

static Int_t fgLastID
 Used to allocate unique ID within the current job.

Detailed Description

Id
DbiResult.h,v 1.22 2006/08/08 10:51:32 west Exp

Definition at line 48 of file DbiResult.h.


Constructor & Destructor Documentation

DbiResult::DbiResult ( DbiResultSet resultSet = 0,
const DbiValidityRec vrec = 0,
const string &  sqlQualifiers = "" 
)

Definition at line 51 of file DbiResult.cxx.

References fEffVRec, fTableName, Msg::kVerbose, LEA_CTOR, MSG, and DbiRowStream::TableNameTc().

00053                                                   :
00054 fID(++fgLastID),
00055 fCanReuse(kTRUE),
00056 fEffVRec(0),
00057 fKey(0),
00058 fResultsFromDb(kFALSE),
00059 fNumClients(0),
00060 fTableName("Unknown"),
00061 fSqlQualifiers(sqlQualifiers)
00062 {
00063 //
00064 //
00065 //  Purpose:  Default constructor
00066 //
00067 //  Arguments: 
00068 //      resultSet     in   Pointer DbiResultSet from query. May be null.  
00069 //      vrec          in   Pointer to validity record from query. 
00070 //                         May be null
00071 //      sqlQualifier  in   Extended Context sql qualifiers
00072 //
00073 //  Return:    n/a
00074 //
00075 //  Contact:   N. West
00076 //
00077 //  Specification:-
00078 //  =============
00079 //
00080 //  o Create Result from DbiResultSet generated by query.
00081 
00082 
00083 //  Program Notes:-
00084 //  =============
00085 
00086 // None.
00087 
00088   LEA_CTOR    //Leak Checker
00089 
00090   MSG("Dbi", Msg::kVerbose) << "Creating DbiResult" << endl;
00091 
00092   if ( vrec ) fEffVRec = *vrec;
00093   if ( resultSet ) fTableName = resultSet->TableNameTc();
00094  
00095 }

DbiResult::~DbiResult (  )  [virtual]

Definition at line 99 of file DbiResult.cxx.

References DeRegisterKey(), fNumClients, Msg::kVerbose, Msg::kWarning, LEA_DTOR, and MSG.

00099                       {
00100 //
00101 //
00102 //  Purpose: Destructor
00103 //
00104 //  Arguments: 
00105 //    None.
00106 //
00107 //  Return:    n/a
00108 //
00109 //  Contact:   N. West
00110 //
00111 //  Specification:-
00112 //  =============
00113 //
00114 //  o  Destroy Result.
00115 
00116 
00117 //  Program Notes:-
00118 //  =============
00119 
00120 //  None.
00121 
00122   LEA_DTOR    //Leak Checker
00123 
00124   MSG("Dbi", Msg::kVerbose) << "Destroying DbiResult." << endl;
00125 
00126   if ( fNumClients ) {
00127     MSG("Dbi", Msg::kWarning) 
00128       << "Warning: Destroying DbiResult with " << fNumClients 
00129       << " clients " << endl;
00130   }
00131 
00132   this->DeRegisterKey();
00133 
00134 }


Member Function Documentation

void DbiResult::BuildLookUpTable (  )  const [protected]

Definition at line 137 of file DbiResult.cxx.

References fIndexKeys, DbiTableRow::GetAggregateNo(), DbiTableRow::GetIndex(), GetNumRows(), DbiTableRow::GetOwner(), DbiValidityRec::GetSeqNo(), GetTableRow(), GetTableRowByIndex(), GetValidityRec(), IsExtendedContext(), Msg::kError, Msg::kVerbose, MAXMSG, MSG, and TableName().

Referenced by DbiResultNonAgg::GetTableRowByIndex(), and DbiResultNonAgg::Streamer().

00137                                        {
00138 //
00139 //
00140 //  Purpose:  Build look-up Natural Index -> TableRow.
00141 //
00142 //  Contact:   N. West
00143 //
00144 //  Program Notes:-
00145 //  =============
00146 //
00147 //  This member function assumes that the sub-class can support
00148 //  the GetTableRow(...) and GetNumRows methods so take care if 
00149 //  called in the sub-class ctor.
00150 
00151 //  Extended Context serach can produce duplicates.
00152   Bool_t duplicatesOK = this->IsExtendedContext();
00153 
00154   MSG("Dbi", Msg::kVerbose) << "Building look-uptable. Allow duplicates: " 
00155                             << duplicatesOK << endl;
00156 
00157   for ( Int_t rowNo = this->GetNumRows()-1; 
00158         rowNo >= 0;
00159         --rowNo ) {
00160     const DbiTableRow* row  = this->GetTableRow(rowNo);
00161     UInt_t index            = row->GetIndex(rowNo);
00162 //  Ensure we use this class's GetTableRowByIndex, the method is
00163 //  virtual but if the subclass has called this method then it must
00164 //  be the right one to use. [Actually DbiResultAgg overrides
00165 //  GetTableRowByIndex, but only to make building lazy].
00166     const DbiTableRow* row2 = this->DbiResult::GetTableRowByIndex(index);
00167 
00168     MSG("Dbi", Msg::kVerbose)
00169           << "Look-up. Row no " << rowNo
00170           << " index " << index 
00171           << " row,row2 " << (void*) row << "," << (void*) row2 << endl;
00172    
00173     if ( row2 != 0 && row2 != row && ! duplicatesOK ) {
00174       std::ostringstream msg;
00175       msg << "Duplicated row natural index: " << index  
00176           << " Found at row " <<  rowNo
00177           << " of table " <<  this->TableName()
00178           << ":-\n     index of agg " <<  row->GetAggregateNo();
00179       if ( row->GetOwner() ) msg << "(SEQNO " << row->GetOwner()->GetValidityRec(row).GetSeqNo() << ")";
00180       msg << " matches agg " <<  row2->GetAggregateNo();
00181       if ( row2->GetOwner() ) msg << "(SEQNO " << row2->GetOwner()->GetValidityRec(row2).GetSeqNo() << ")";
00182       MAXMSG("Dbi",Msg::kError,20) << msg.str() << endl;
00183    }
00184 
00185     else  fIndexKeys[index] = row;
00186   }  
00187 
00188 }

Bool_t DbiResult::CanDelete ( const DbiResult res = 0  )  [virtual]

Return true if no clients and unlikely to be reused.

Definition at line 192 of file DbiResult.cxx.

References CanReuse(), GetNumClients(), GetValidityRec(), and SetCanReuse().

Referenced by DbiCache::Purge().

00192                                                 {
00193 //
00194 //
00195 //  Purpose:  See if suitable for deleting.
00196 //
00197 //  Arguments: 
00198 //    res          in    A DbiResult that is currently used. 
00199 //                       Optional: default = 0.
00200 
00201 //  If the query would be satisfied apart from the date, then
00202 //  assume we have moved out of the validity window, never
00203 //  to return!
00204 
00205   if (     res 
00206         && this->CanReuse() 
00207         && this->GetValidityRec().HasExpired(res->GetValidityRec()) 
00208      )  this->SetCanReuse(kFALSE);
00209 
00210   return ! this->GetNumClients() && ! this->CanReuse();
00211 }

virtual Bool_t DbiResult::CanReuse (  )  const [inline, virtual]

Definition at line 61 of file DbiResult.h.

References fCanReuse.

Referenced by CanDelete(), DbiResultAgg::Satisfies(), Satisfies(), and DbiResultNonAgg::Satisfies().

00061 { return fCanReuse; }

virtual Bool_t DbiResult::CanSave (  )  const [inline, virtual]

Definition at line 62 of file DbiResult.h.

Referenced by DbiTableProxy::SaveToL2Cache().

00062 { return kTRUE; }

void DbiResult::CaptureExceptionLog ( UInt_t  startFrom  ) 

Definition at line 215 of file DbiResult.cxx.

References DbiExceptionLog::Clear(), DbiExceptionLog::Copy(), fExceptionLog, and DbiExceptionLog::GetGELog().

Referenced by DbiTableProxy::Query().

00215                                                     {
00216 //
00217 //
00218 //  Purpose: Capture Exception Log from latest entries in Global Exception Log. 
00219 
00220   fExceptionLog.Clear();
00221   DbiExceptionLog::GetGELog().Copy(fExceptionLog,startFrom);
00222 
00223 }

virtual void DbiResult::Connect (  )  const [inline, virtual]
virtual DbiResultKey* DbiResult::CreateKey (  )  const [pure virtual]

Implemented in DbiResultAgg, and DbiResultNonAgg.

Referenced by DbiResultAgg::CreateKey(), and RegisterKey().

void DbiResult::DeRegisterKey (  )  [virtual]

Key handling.

Definition at line 227 of file DbiResult.cxx.

References DbiRecord::DeleteKey(), fKey, DbiServices::GetRecord(), Msg::kWarning, and MSG.

Referenced by ~DbiResult().

00227                               {
00228 //
00229 //
00230 //  Purpose: Deregister key if it exists. 
00231 
00232   if ( ! fKey ) return;
00233 
00234   DbiRecord* record = DbiServices::GetRecord();
00235   if ( ! record ) {
00236     MSG("Dbi",Msg::kWarning) << "Attempting to deregister DbiResultKey at " << (void*) fKey 
00237                              << " but owning DbiRecord cannot be found." << endl; 
00238   }
00239   else {
00240     record->DeleteKey(fKey);
00241     fKey = 0;
00242   }
00243 
00244 }

virtual void DbiResult::Disconnect (  )  const [inline, virtual]

Definition at line 65 of file DbiResult.h.

References fNumClients.

Referenced by DbiResultPtr< T >::Disconnect().

00065 { --fNumClients; } 

const DbiExceptionLog& DbiResult::GetExceptionLog (  )  const [inline]

Definition at line 66 of file DbiResult.h.

References fExceptionLog.

00066 { return fExceptionLog; }

Int_t DbiResult::GetID (  )  const [inline]

Definition at line 67 of file DbiResult.h.

References fID.

Referenced by DbiResultPtr< T >::GetResultID().

00067 { return fID; }

const DbiResultKey * DbiResult::GetKey (  )  const [virtual]

Definition at line 247 of file DbiResult.cxx.

References fKey, and DbiResultKey::GetEmptyKey().

Referenced by DbiCache::Adopt(), and DbiResultPtr< T >::GetKey().

00247                                             {
00248 
00249 //  Purpose:  Get the associated DbiResultKey, or an empty one if none exists.
00250 
00251   return fKey ? fKey : DbiResultKey::GetEmptyKey();
00252 
00253 }

virtual UInt_t DbiResult::GetNumAggregates (  )  const [pure virtual]

Implemented in DbiResultAgg, and DbiResultNonAgg.

Referenced by DbiCache::Search().

virtual UInt_t DbiResult::GetNumClients (  )  const [inline, virtual]

Definition at line 70 of file DbiResult.h.

References fNumClients.

Referenced by CanDelete(), DbiCache::Purge(), and Satisfies().

00070                                                      { 
00071                                                    return fNumClients; }

virtual UInt_t DbiResult::GetNumRows (  )  const [pure virtual]
const string& DbiResult::GetSqlQualifiers (  )  const [inline]

Definition at line 73 of file DbiResult.h.

References fSqlQualifiers.

Referenced by IsExtendedContext(), DbiResultAgg::Satisfies(), and DbiResultNonAgg::Satisfies().

00073 { return fSqlQualifiers; }

virtual const DbiTableRow* DbiResult::GetTableRow ( UInt_t  rowNum  )  const [pure virtual]
const DbiTableRow * DbiResult::GetTableRowByIndex ( UInt_t  index  )  const [virtual]

Reimplemented in DbiResultNonAgg.

Definition at line 257 of file DbiResult.cxx.

References fIndexKeys.

Referenced by BuildLookUpTable(), and DbiResultPtr< T >::GetRowByIndex().

00257                                                                    {
00258 //
00259 //
00260 //  Purpose:  Return row corresponding to Natural Index (or 0 if none)
00261 //
00262 //  Contact:   N. West
00263 //
00264 
00265 // Use Find rather than operator[] to avoid creating entry 
00266 // if index missing
00267   IndexToRow_t::const_iterator idx = fIndexKeys.find(index);
00268   return ( idx == fIndexKeys.end() ) ? 0 : (*idx).second;
00269 
00270 }

virtual const DbiValidityRec& DbiResult::GetValidityRec ( const DbiTableRow = 0  )  const [inline, virtual]
virtual const DbiValidityRec& DbiResult::GetValidityRecGlobal (  )  const [inline, virtual]

Definition at line 79 of file DbiResult.h.

References fEffVRec.

Referenced by DbiCache::Adopt(), GetValidityRec(), DbiResultAgg::GetValidityRec(), and DbiResultAgg::Streamer().

00079                                                             { 
00080                                                       return fEffVRec; }

Bool_t DbiResult::IsExtendedContext (  )  const [inline]

Definition at line 81 of file DbiResult.h.

References GetSqlQualifiers().

Referenced by BuildLookUpTable(), and Satisfies().

00081                                                          { 
00082                                        return this->GetSqlQualifiers() != ""; }

Bool_t DbiResult::LookUpBuilt (  )  const [inline, protected]

Definition at line 116 of file DbiResult.h.

References fIndexKeys.

Referenced by DbiResultNonAgg::GetTableRowByIndex().

00116 { return fIndexKeys.size() > 0; } 

virtual Bool_t DbiResult::Owns ( const DbiTableRow  )  const [inline, virtual]

Reimplemented in DbiResultNonAgg.

Definition at line 83 of file DbiResult.h.

00083 { return kFALSE; }

void DbiResult::RegisterKey (  )  [virtual]

Definition at line 274 of file DbiResult.cxx.

References DbiRecord::AdoptKey(), CreateKey(), fKey, GetNumRows(), DbiServices::GetRecord(), Msg::kWarning, and MSG.

Referenced by DbiCache::Adopt().

00274                             {
00275 //
00276 //
00277 //  Purpose: Create and register key if set not empty and not already done. 
00278 
00279   if ( fKey || this->GetNumRows() == 0) return;
00280 
00281   DbiRecord* record = DbiServices::GetRecord();
00282   if ( ! record ) {
00283     MSG("Dbi",Msg::kWarning) << "cannot create and register key"
00284                              << ", owning DbiRecord cannot be found." << endl; 
00285   }
00286   else {
00287     DbiResultKey* key = this->CreateKey();
00288     record->AdoptKey(key);
00289     fKey = key;
00290   }
00291 
00292 }

Bool_t DbiResult::ResultsFromDb (  )  const [inline]

Definition at line 84 of file DbiResult.h.

References fResultsFromDb.

Referenced by DbiResultPtr< T >::ResultsFromDb(), and DbiTableProxy::SaveToL2Cache().

00084 { return fResultsFromDb; }

virtual Bool_t DbiResult::Satisfies ( const DbiValidityRec ,
const string &  = "" 
) [inline, virtual]

Reimplemented in DbiResultNonAgg.

Definition at line 100 of file DbiResult.h.

00101                                                  {return kFALSE;}

virtual Bool_t DbiResult::Satisfies ( const string &   )  [inline, virtual]

Not all DbiResult classes can satisfy these types of query so those that do must override.

Reimplemented in DbiResultAgg.

Definition at line 99 of file DbiResult.h.

00099 {return kFALSE;}

Bool_t DbiResult::Satisfies ( const VldContext vc,
const Dbi::Task task 
) [virtual]

All DbiResult classes can satisfy this type of primary query so impliment here.

Definition at line 295 of file DbiResult.cxx.

References CanReuse(), GetNumClients(), GetValidityRec(), DbiValidityRec::HasExpired(), DbiValidityRec::IsCompatible(), IsExtendedContext(), Msg::kDebug, MSG, and SetCanReuse().

Referenced by DbiCache::Search().

00296                                                  {
00297 //
00298 //
00299 //  Purpose:  Check to see if this Result satisfies specific context query.
00300 //
00301 //  Arguments: 
00302 //    vc           in    Context of query
00303 //    task         in    Task of query
00304 //
00305 //  Return:    kTRUE if can satisfy query.
00306 //
00307 //  Contact:   N. West
00308 //
00309 //  Program Notes:-
00310 //  =============
00311 
00312 //  If it cannot satisfy the query in a way that suggests 
00313 //  that its unlikely that it will satisfy future queries
00314 //  then mark as cannot reuse so that it becomes eligible
00315 //  for purging.
00316 
00317 // Extended Context queries cannot satisfy specific context queries.
00318 
00319   Bool_t isExtendedContext = this->IsExtendedContext();
00320   Bool_t canReuse          = this->CanReuse();
00321   Bool_t isCompatible      = this->GetValidityRec().IsCompatible(vc,task);
00322   Bool_t hasExpired        = this->GetValidityRec().HasExpired(vc,task);
00323   UInt_t numClients        = this->GetNumClients();
00324   MSG("Dbi",Msg::kDebug) 
00325     << "    Checking result with DbiValidityRec:- \n      " << this->GetValidityRec()
00326     << "  With extended context: " << isExtendedContext
00327     << " CanReuse: " << canReuse
00328     << " Is Compatible: " << isCompatible
00329     << " HasExpired: " <<  hasExpired
00330     << " number of clients: " << numClients
00331     << endl;
00332 
00333   if ( isExtendedContext ) return kFALSE;
00334 
00335   if ( canReuse && isCompatible )  return kTRUE;
00336     
00337 //  If the query would be satisfied apart from the date, then
00338 //  assume we have moved out of the validity window, never
00339 //  to return!
00340 
00341   if ( canReuse && hasExpired && numClients == 0 )  {
00342     MSG("Dbi",Msg::kDebug) << "    Marking result as not reusable" << endl;
00343    this-> SetCanReuse(kFALSE);
00344   }
00345 
00346   return kFALSE;
00347 
00348 }

virtual void DbiResult::SetCanReuse ( Bool_t  reuse  )  [inline, virtual]

Definition at line 108 of file DbiResult.h.

References fCanReuse.

Referenced by CanDelete(), DbiResultAgg::DbiResultAgg(), DbiTableProxy::Query(), and Satisfies().

00108 { fCanReuse = reuse ; }

void DbiResult::SetResultsFromDb (  )  [inline, protected]

Definition at line 111 of file DbiResult.h.

References fResultsFromDb.

00111 { fResultsFromDb = kTRUE; }

virtual void DbiResult::SetTableName ( const string &  tableName  )  [inline, protected, virtual]

Definition at line 120 of file DbiResult.h.

References fTableName.

00120                                                      { 
00121                                                fTableName = tableName; }

virtual void DbiResult::SetValidityRec ( const DbiValidityRec vRec  )  [inline, protected, virtual]

Definition at line 122 of file DbiResult.h.

References fEffVRec.

00122                                                           { 
00123                                                       fEffVRec = vRec; }

void DbiResult::Streamer ( DbiBinaryFile file  )  [virtual]

Reimplemented in DbiResultAgg, and DbiResultNonAgg.

Definition at line 351 of file DbiResult.cxx.

References fCanReuse, fEffVRec, fNumClients, fResultsFromDb, fTableName, DbiBinaryFile::IsReading(), DbiBinaryFile::IsWriting(), Msg::kDebug, Msg::kVerbose, MSG, and DbiValidityRec::Streamer().

Referenced by operator<<(), and operator>>().

00351                                             {
00352 //
00353 //
00354 //  Purpose:  I/O to binary file
00355 //
00356 //  Program Notes:-
00357 //  =============
00358 
00359 //  Don't store fIndexKeys; it will be rebuilt on input by the subclass.
00360 
00361   if ( file.IsReading() ) {
00362     MSG("Dbi", Msg::kDebug) << "    Restoring DbiResult ..." << endl;
00363     file >> fCanReuse;
00364     fEffVRec.Streamer(file);
00365     MSG("Dbi", Msg::kVerbose) << "    Restored " << fEffVRec << endl;
00366     fResultsFromDb = kFALSE;
00367     fNumClients    = 0;
00368     file >> fTableName;
00369     MSG("Dbi", Msg::kVerbose) << "    Restored string " << fTableName << endl;
00370   }
00371   else if ( file.IsWriting() ) {
00372     MSG("Dbi", Msg::kDebug) << "    Saving DbiResult ..." << endl;
00373     file << fCanReuse;
00374     MSG("Dbi", Msg::kVerbose) << "    Saving " << fEffVRec << endl;
00375     fEffVRec.Streamer(file);
00376     MSG("Dbi", Msg::kVerbose) << "    Saving string " << fTableName << endl;
00377     file << fTableName;
00378   }
00379 }

virtual const string& DbiResult::TableName (  )  const [inline, virtual]

Member Data Documentation

Bool_t DbiResult::fCanReuse [private]

Definition at line 134 of file DbiResult.h.

Referenced by CanReuse(), SetCanReuse(), and Streamer().

Definition at line 137 of file DbiResult.h.

Referenced by DbiResult(), GetValidityRecGlobal(), SetValidityRec(), and Streamer().

Exception log produced when query was executed.

Definition at line 158 of file DbiResult.h.

Referenced by CaptureExceptionLog(), and GetExceptionLog().

Int_t DbiResult::fgLastID [static, private]

Used to allocate unique ID within the current job.

Definition at line 162 of file DbiResult.h.

Int_t DbiResult::fID [private]

Unique ID within the current job.

Definition at line 131 of file DbiResult.h.

Referenced by GetID().

IndexToRow_t DbiResult::fIndexKeys [mutable, private]

Definition at line 140 of file DbiResult.h.

Referenced by BuildLookUpTable(), GetTableRowByIndex(), and LookUpBuilt().

const DbiResultKey* DbiResult::fKey [private]

Definition at line 143 of file DbiResult.h.

Referenced by DeRegisterKey(), GetKey(), and RegisterKey().

Int_t DbiResult::fNumClients [mutable, private]

Definition at line 148 of file DbiResult.h.

Referenced by Connect(), Disconnect(), GetNumClients(), Streamer(), and ~DbiResult().

Bool_t DbiResult::fResultsFromDb [private]

True is at least part didn't come from cache.

Definition at line 146 of file DbiResult.h.

Referenced by ResultsFromDb(), SetResultsFromDb(), and Streamer().

string DbiResult::fSqlQualifiers [private]

Null unless Extended Context query in which case it contains:- context-sql;data-sql;fill-options

Definition at line 155 of file DbiResult.h.

Referenced by GetSqlQualifiers().

string DbiResult::fTableName [private]

Definition at line 151 of file DbiResult.h.

Referenced by DbiResult(), SetTableName(), Streamer(), and TableName().


The documentation for this class was generated from the following files:

Generated on 24 Jul 2017 for loon by  doxygen 1.6.1