BRAT 2.4.5
Class index
Full class index
brahmlib
BRAHMS
ROOT page
//____________________________________________________________________
// 
// 
// 

//____________________________________________________________________
//
// $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>
Last Update on by

Validate HTML
Validate CSS