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

DbuDaqConfigFilesText.cxx

Go to the documentation of this file.
00001 
00002 // $Id: DbuDaqConfigFilesText.cxx,v 1.9 2007/04/26 14:21:39 west Exp $
00003 //
00004 // DbuDaqConfigFilesText
00005 //
00006 // Package: DatabaseUpdater
00007 //
00008 // R. Hatcher  2002-04-19
00009 //
00010 // Concept:
00011 //   
00012 // Purpose:
00013 //
00015 
00016 #include "DatabaseInterface/DbiExceptionLog.h"
00017 #include "DatabaseUpdater/DbuDaqConfigFilesText.h"
00018 #include "MessageService/MsgService.h"
00019 #include "DatabaseInterface/DbiOutRowStream.h"
00020 #include "DatabaseInterface/DbiResultSet.h"
00021 #include "DatabaseInterface/DbiStatement.h"
00022 #include "DatabaseInterface/DbiValidityRec.h"
00023 #include <iostream>
00024 #include <cassert>
00025 
00026 #include "TMD5.h"
00027 #include "TSQLStatement.h"
00028 
00029 #include "DatabaseUpdater/RunTypeName.h"
00030 
00031 ClassImp(DbuDaqConfigFilesText)
00032 
00033 //   Definition of static data members
00034 //   *********************************
00035 
00036 CVSID("$Id: DbuDaqConfigFilesText.cxx,v 1.9 2007/04/26 14:21:39 west Exp $ CVSID_DBIRESULTPTR ");
00037 
00038 const std::string DbuDaqConfigFilesText::kNoText = "<<No ConfigFileText>>";
00039 const std::string DbuDaqConfigFilesText::kNoMD5  = "<<No MD5 value>>";
00040 
00041 //  Instantiate associated Result Pointer class.
00042 //  *******************************************
00043 
00044 #include "DatabaseInterface/DbiResultPtr.tpl"
00045 template class  DbiResultPtr<DbuDaqConfigFilesText>;
00046 
00047 #include "DatabaseInterface/DbiWriter.tpl"
00048 template class  DbiWriter<DbuDaqConfigFilesText>;
00049 
00050 //.....................................................................
00051 
00052 std::ostream& operator<<(std::ostream& os, const DbuDaqConfigFilesText& dcft)
00053 {
00054    os << dcft.GetName() 
00055       << " SeqNo " << dcft.fSeqNo
00056       << " MD5 \"" << dcft.fMD5 << "\""
00057       << endl
00058       << " Text \"" << dcft.fText << "\""
00059       << endl;
00060 
00061    return os;
00062 }
00063 
00064 //.....................................................................
00065 
00066 // Definition of member functions (alphabetical order)
00067 // ***************************************************
00068 
00069 //.....................................................................
00070 
00071 void DbuDaqConfigFilesText::Fill(DbiResultSet& rs,
00072                              const DbiValidityRec* vrec ) {
00073 //
00074 //
00075 //  Purpose:  Fill object from Result Set
00076 //
00077 //  Arguments: 
00078 //    rs           in    Result Set used to fill object
00079 //    vrec         in    Associated validity record (or 0 if filling
00080 //                                                    DbiValidityRec)
00081 //
00082 //  Return:    
00083 //
00084 //  Contact:   R. Hatcher
00085 //
00086 //  Specification:-
00087 //  =============
00088 //
00089 //  o Fill object from current row of Result Set.
00090 
00091 //  Program Notes:-
00092 //  =============
00093 
00094 //  None.
00095 
00096    rs >> fMD5
00097       >> fText;
00098 
00099    fSeqNo = ((vrec) ? vrec->GetSeqNo() : 0 );
00100 }
00101 
00102 //.....................................................................
00103 
00104 void DbuDaqConfigFilesText::Store(DbiOutRowStream& ors,
00105                              const DbiValidityRec* /* vrec */) const {
00106 //
00107 //
00108 //  Purpose:  Stream object to output row stream
00109 //
00110 //  Arguments: 
00111 //    ors          in     Output row stream.
00112 //    vrec         in     Associated validity record (or 0 if filling
00113 //                                                    DbiValidityRec)
00114 //
00115 //  Return:    
00116 //
00117 //  Contact:   R. Hatcher
00118 //
00119 //  Specification:-
00120 //  =============
00121 //
00122 //  o  Stream object to output row stream.
00123 
00124 //  Program Notes:-
00125 //  =============
00126 
00127 //  None.
00128 
00129    ors << fMD5
00130        << fText;
00131    
00132 }
00133 
00134 //.....................................................................
00135 
00136 #ifdef RWH_OLD
00137 Int_t DbuDaqConfigFilesText::CalcUniqueSeqNo(Detector::Detector_t det,
00138                                         Int_t run, Short_t subrun)
00139 {
00140 //
00141 //
00142 //  Purpose:  Calculate unique SeqNo
00143 //
00144 //  Return:   an integer
00145 //
00146 //  Contact:   R. Hatcher
00147 //
00148 //  Specification:-
00149 //  =============
00150 //
00151 
00152 //  Program Notes:-
00153 //  =============
00154 
00155 //  None.
00156 
00157 // similar to file naming convention
00158 //   Char_t detchar = Detector::AsString(det)[0];
00159 //   string fname = Form("%c%8.8d_%4.4d",detchar,run,subrun);
00160 // take care since can overflow int
00161 //  use two fewers places for sub and two fewer for run
00162 //  "drrrrrrss"
00163 
00164    return subrun + 100*(run + 1000000*det);
00165 }
00166 
00167 //.....................................................................
00168 #endif
00169 
00170 std::string& DbuDaqConfigFilesText::CalcMD5()
00171 {
00172 //
00173 //
00174 //  Purpose:  Calculate and record MD5 value
00175 //
00176 //  Return:   nothing
00177 //
00178 //  Contact:   R. Hatcher
00179 //
00180 //  Specification:-
00181 //  =============
00182 //
00183 
00184 //  Program Notes:-
00185 //  =============
00186 
00187 //  None.
00188 
00189   TMD5 md5;
00190   md5.Update((const UChar_t*)fText.c_str(),(UInt_t)fText.size());
00191   md5.Final();
00192   fMD5 = md5.AsString();
00193   return fMD5;
00194 }
00195 
00196 //.....................................................................
00197 Int_t DbuDaqConfigFilesText::LookupSeqNo(DbiStatement* stmt) const
00198 {
00199 //
00200 //
00201 //  Purpose:  Lookup the SeqNo for this MD5
00202 //
00203 //  Return:   the SEQNO (or 0 if no match exists)
00204 //
00205 //  Contact:   R. Hatcher
00206 //
00207 //  Specification:-
00208 //  =============
00209 //
00210 
00211 //  Program Notes:-
00212 //  =============
00213 
00214 //  None.
00215 
00216   // ensure MD5 is up-to-date
00217   // CalcMD5(); ... not const
00218   const char* sqlbase = 
00219     "select SEQNO from DBUDAQCONFIGFILESTEXT where CONFIGFILES_MD5='%s';\0";
00220   TString sqlquery = Form(sqlbase,fMD5.c_str());
00221 
00222   TSQLStatement* tsqlstmt = stmt->ExecuteQuery(sqlquery);
00223   
00224   Int_t nrows = 0, seqno = 0;
00225   while ( 1 ) {
00226     if ( ! tsqlstmt->NextResultRow() ) break;
00227     nrows++;
00228     seqno = tsqlstmt->GetInt(0);
00229   }
00230   // accept the last one
00231   
00232   if (nrows>1) {
00233     MSG("Dbu",Msg::kWarning) 
00234       << "DbuDaqConfigFilesText saw " << nrows << " that statisfied '"
00235       << sqlquery
00236       << "'" << endl;
00237   }
00238   return seqno;
00239 }
00240 
00241 //.....................................................................
00242 
00243 const char* DbuDaqConfigFilesText::GetTableDescr()
00244 {
00245 //
00246 //
00247 //  Purpose:  Return a string describing rows in the table
00248 //            Used in creating temporary tables
00249 //
00250 //  Return:   const char* to parenthesized comma separated list
00251 //            of column name and type pairs
00252 //
00253 //  Contact:   R. Hatcher
00254 //
00255 //  Specification:-
00256 //  =============
00257 //
00258 
00259 //  Program Notes:-
00260 //  =============
00261 
00262 //  None.
00263 
00264    const char* const_tabledescr = "( \
00265        SEQNO             int,        \
00266        ROW_COUNTER       int,        \
00267        CONFIGFILES_MD5   char(32),   \
00268        CONFIGFILES_TEXT  mediumtext, \
00269        primary key (SEQNO,ROW_COUNTER) \
00270        )";
00271 
00272    return const_tabledescr;
00273 }
00274 
00275 /*    Template for New Member Function
00276 
00277 //.....................................................................
00278 
00279 DbuDaqConfigFilesText:: {
00280 //
00281 //
00282 //  Purpose:  
00283 //
00284 //  Arguments: 
00285 //    xxxxxxxxx    in    yyyyyy
00286 //
00287 //  Return:    
00288 //
00289 //  Contact:   R. Hatcher
00290 //
00291 //  Specification:-
00292 //  =============
00293 //
00294 //  o 
00295 
00296 //  Program Notes:-
00297 //  =============
00298 
00299 //  None.
00300 
00301 
00302 }
00303 
00304 */
00305 

Generated on Mon Feb 15 11:06:35 2010 for loon by  doxygen 1.3.9.1