|
//____________________________________________________________________ // // // //____________________________________________________________________ // // $Id: BrRdbmPassDb.cxx,v 1.1 2001/10/08 11:01:18 cholm Exp $ // $Author: cholm $ // $Date: 2001/10/08 11:01:18 $ // $Copyright: (C) 2001 BRAHMS Collaboration <brahmlib@rhic.bnl.gov> // #ifndef BRAT_BrRdbmPassDb #include "BrRdbmPassDb.h" #endif #ifndef BRAT_BrException #include "BrException.h" #endif #ifndef WIN32 #include <cstdlib> #include <iostream> #else #include <stdlib.h> #include <iostream.h> #endif #include "TObjString.h" //____________________________________________________________________ ClassImp(BrRdbmPassDb); //____________________________________________________________________ BrRdbmPassDb::BrRdbmPassDb(const Char_t* name, const Char_t* title) { // Normal constructor. Singleton. fImplementation = new BrRdbmDb(name, title); } //____________________________________________________________________ BrPassDb* BrRdbmPassDb::Instance(void) { // Returns an instance of the Calibration Database connection. // Connection _must_ be constructed somewhere previousto calling // this static method. if (!fgInstance) { fgInstance = new BrRdbmPassDb; #if 0 throw new BrError("BrRdbmPassDb::Instance", "BrRdbmPassDb not instancetized yet"); #endif } return fgInstance; } //____________________________________________________________________ void BrRdbmPassDb::AddPass(BrDbPass*& pass) { // Add a pass to the database. Make sure that there are not two // entries of same run number with same revision. if (!IsConnected()) return; //First see if there is a pass in DB with this run number. If so, we //get it, find the revision id, increment and put the new one in. BrDbQuery* query = BrDbQuery::Select(BrDbPass::kTableName,0, Form("RunNo = %d ORDER BY RevisionId DESC", pass->GetRunNo())); TSQLResult* res = Query(query); delete query; Int_t largestRev = 0; if (res->GetRowCount() > 0) { TObjArray* ar = BrDbPass::MultipleInstance(res); // The first in the returned array is the one with the largest // revision number, due to the ordering in the query. BrDbPass* p = (BrDbPass*)ar->First(); largestRev = p->GetRevisionId(); delete p; delete ar; } delete res; if (DebugLevel() > 1) cout << "Setting revision to " << largestRev + 1 << endl; pass->SetRevisionId(largestRev + 1); //First do the pass tables. LockTables(BrDbPass::kTableName); pass->SetDBID(Increment()); Query(pass->Insert()); UnLockTables(); } //____________________________________________________________________ void BrRdbmPassDb::AddInputFile(BrDbInputFile*& inputFile) { // Add an inputfile to the database. Make sure that the passId is // set. if (!IsConnected()) return; if (strlen(inputFile->GetFileName()) < 1) throw new BrWarning("AddInputFile", "no file name"); if (inputFile->GetRunNo() < 0) throw new BrWarning("AddInputFile", "run number invalid: %d", inputFile->GetRunNo()); if (inputFile->GetPassId() < 0) throw new BrWarning("AddInputFile", "pass id invalid: %d", inputFile->GetPassId()); BrDbQuery* query = BrDbQuery::Select(BrDbInputFile::kTableName, 0, Form("FileName = '%s' AND RunNo = %d AND PassId = %d", inputFile->GetFileName(), inputFile->GetRunNo(), inputFile->GetPassId())); TSQLResult* res = Query(query); if (res->GetRowCount() > 0) throw new BrWarning("BrRdbmPassDb::AddInputFile", "inputfile %s already exists", inputFile->GetFileName()); delete res; LockTables(BrDbInputFile::kTableName); inputFile->SetDBID(Increment()); Query(inputFile->Insert()); UnLockTables(); } //____________________________________________________________________ void BrRdbmPassDb::AddOutputFile(BrDbOutputFile*& outputFile) { // Add an outputfile to the database. Make sure that the passId is // set. if (!IsConnected()) return; if (strlen(outputFile->GetFileName()) < 1) throw new BrWarning("AddOutputFile", "no file name"); if (outputFile->GetRunNo() < 0) throw new BrWarning("AddOutputFile", "run number invalid: %d", outputFile->GetRunNo()); if (outputFile->GetPassId() < 0) throw new BrWarning("AddOutputFile", "pass id invalid: %d", outputFile->GetPassId()); BrDbQuery* query = BrDbQuery::Select(BrDbOutputFile::kTableName, 0, Form("FileName = '%s' AND RunNo = %d AND PassId = %d", outputFile->GetFileName(), outputFile->GetRunNo(), outputFile->GetPassId())); TSQLResult* res = Query(query); if (res->GetRowCount() > 0) throw new BrWarning("BrRdbmPassDb::AddOutputFile", "outputfile %s already exists", outputFile->GetFileName()); delete res; LockTables(BrDbOutputFile::kTableName); outputFile->SetDBID(Increment()); Query(outputFile->Insert()); UnLockTables(); } //____________________________________________________________________ TObjArray* BrRdbmPassDb::GetXPass(const Char_t* condition) { // Find Parameters that matches condition <condition> Be aware that // this for the moment will return all runs with condition satisfied // with all revisions. This must be dealt with. Of course, the // user could select the revision he wanted in the condition. return BrDbPass::MultipleInstance(GetMultiple(BrDbPass::kTableName, condition)); } //____________________________________________________________________ TObjArray* BrRdbmPassDb::GetXPass(const Char_t* name, Int_t runno) { // return BrDbPass::MultipleInstance(GetMultiple(BrDbPass::kTableName, Form("PassName LIKE '%s' " "AND RunNo = %d", name, runno))); } //____________________________________________________________________ TObjArray* BrRdbmPassDb::GetXInputFile(const Char_t* condition) { // Get input files matching the condition return BrDbPass::MultipleInstance(GetMultiple(BrDbInputFile::kTableName, condition)); } //____________________________________________________________________ TObjArray* BrRdbmPassDb::GetXInputFile(Int_t passId) { // Get all input files associated with the pass ID given. return BrDbPass::MultipleInstance(GetMultiple(BrDbInputFile::kTableName, Form("PassId = %d", passId))); } //____________________________________________________________________ TObjArray* BrRdbmPassDb::GetXOutputFile(const Char_t* condition) { // Get output files matching the condition return BrDbPass::MultipleInstance(GetMultiple(BrDbOutputFile::kTableName, condition)); } //____________________________________________________________________ TObjArray* BrRdbmPassDb::GetXOutputFile(Int_t passId) { // Get all output files associated with the pass ID given. return BrDbPass::MultipleInstance(GetMultiple(BrDbOutputFile::kTableName, Form("PassId = %d", passId))); } //____________________________________________________________________ BrDbPass* BrRdbmPassDb::GetPass(const Char_t* condition) { // Find a pass that matches condition <condition> return BrDbPass::SingleInstance(GetSingle(BrDbPass::kTableName, condition)); } //____________________________________________________________________ BrDbPass* BrRdbmPassDb::GetPass(const Char_t* name, Int_t runno, Int_t revision) { // Find a pass with name <name> belonging to run <runno>. The latest // revision is returned, unless a specific revision is specified. if (revision >= 0) return GetPass(Form("PassName LIKE '%s' AND RunNo = %d " "AND RevisionId = %d", name, runno, revision)); TObjArray* a = GetXPass(Form("PassName LIKE '%s' AND RunNo = %d " "ORDER by RevisionId DESC", name, runno)); if (a->GetEntries() < 1) { delete a; return 0; } return (BrDbPass*)a->At(0); } //____________________________________________________________________ BrDbInputFile* BrRdbmPassDb::GetInputFile(const Char_t* condition) { return BrDbInputFile::SingleInstance(GetSingle(BrDbInputFile::kTableName, condition)); } //____________________________________________________________________ BrDbInputFile* BrRdbmPassDb::GetInputFile(const Char_t* fn, Int_t passId) { return BrDbInputFile::SingleInstance(GetSingle(BrDbInputFile::kTableName, Form("FileName LIKE '%s' " "AND PassId = %d", fn, passId))); } //____________________________________________________________________ BrDbOutputFile* BrRdbmPassDb::GetOutputFile(const Char_t* condition) { return BrDbOutputFile::SingleInstance(GetSingle(BrDbOutputFile::kTableName, condition)); } //____________________________________________________________________ BrDbOutputFile* BrRdbmPassDb::GetOutputFile(const Char_t* fn, Int_t passId) { return BrDbOutputFile::SingleInstance(GetSingle(BrDbOutputFile::kTableName, Form("FileName LIKE '%s' " "AND PassId = %d", fn, passId))); } //____________________________________________________________________ // // EOF // |
||||||
This page automatically generated by script docBrat by Christian Holm |
Copyright ; 2002 BRAHMS Collaboration
<brahmlib@rcf.rhic.bnl.gov>
|