/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[12];
};
static const struct sqlcxp sqlfpn =
{
    11,
    "horainfo.pc"
};


static unsigned int sqlctx = 152819;


static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
              int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
            void  *sqhstv[5];
   unsigned int   sqhstl[5];
            int   sqhsts[5];
            void  *sqindv[5];
            int   sqinds[5];
   unsigned int   sqharm[5];
   unsigned int   *sqharc[5];
   unsigned short  sqadto[5];
   unsigned short  sqtdso[5];
} sqlstm = {12,5};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(char *, int *); }

 static const char *sq0006 = 
"select run_id ,filename ,TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS') ,TO_CHA\
R(run_stop,'DD-MON-YYYY HH24:MI:SS') ,events  from daq.daq_runs_ana where ((((\
upper(exp_id)=:b0 and run_start is  not null ) and run_start between TO_DATE(:\
b1,'DD-MON-YYYY HH24:MI:SS') and TO_DATE(:b2,'DD-MON-YYYY HH24:MI:SS')) and fi\
lename is  not null ) and filename<>'null') order by run_start            ";

 static const char *sq0009 = 
"select ref_run_id ,ref_run_name ,TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS')\
 ,TO_CHAR(run_stop,'DD-MON-YYYY HH24:MI:SS')  from hanal.simul_project p ,hana\
l.simul_ref_run rr where (((upper(exp_id)=:b0 and p.project_id=rr.project_id) \
and run_start between TO_DATE(:b1,'DD-MON-YYYY HH24:MI:SS') and TO_DATE(:b2,'D\
D-MON-YYYY HH24:MI:SS')) and rr.generation=(select max(generation)  from hanal\
.simul_ref_run where project_id=p.project_id)) order by ref_run_id            ";

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4130,1,0,0,
5,0,0,1,102,0,4,52,0,0,2,1,0,1,0,2,97,0,0,1,3,0,0,
28,0,0,2,75,0,4,74,0,0,2,1,0,1,0,2,3,0,0,1,97,0,0,
51,0,0,3,65,0,6,95,0,0,2,2,0,1,0,2,3,0,0,1,97,0,0,
74,0,0,4,147,0,4,117,0,0,3,2,0,1,0,2,3,0,0,1,97,0,0,1,97,0,0,
101,0,0,5,110,0,4,143,0,0,3,1,0,1,0,2,9,0,0,2,9,0,0,1,3,0,0,
128,0,0,6,384,0,9,225,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,
155,0,0,6,0,0,13,227,0,0,5,0,0,1,0,2,3,0,0,2,9,0,0,2,97,0,0,2,97,0,0,2,3,0,0,
190,0,0,6,0,0,15,246,0,0,0,0,0,1,0,
205,0,0,7,98,0,4,278,0,0,2,1,0,1,0,2,97,0,0,1,97,0,0,
228,0,0,8,99,0,4,284,0,0,2,1,0,1,0,2,97,0,0,1,3,0,0,
251,0,0,9,466,0,9,353,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,
278,0,0,9,0,0,13,355,0,0,4,0,0,1,0,2,3,0,0,2,9,0,0,2,97,0,0,2,97,0,0,
309,0,0,9,0,0,15,371,0,0,0,0,0,1,0,
324,0,0,10,106,0,4,404,0,0,2,1,0,1,0,2,97,0,0,1,3,0,0,
347,0,0,11,108,0,4,410,0,0,2,1,0,1,0,2,97,0,0,1,97,0,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Last Modified : 04/05/2006 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
// HOraInfo
//
// Class for additional information from database Oracle
// (uses the Oracle C/C++ precompiler)
// Functions in this class are not used by the analysis but can be called
// by the user on the ROOT interpreter to get additional information from
// Oracle tables.
//
//////////////////////////////////////////////////////////////////////////////
using namespace std;
#include "horainfo.h"
#include "horaconn.h"
#include "hruninfo.h"
#include <iostream>
#include <iomanip>
#include <cstdlib>

#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern

// Oracle communication area
#include <oraca.h>
// Include the SQL Communications Area
#include <sqlca.h>
 
ClassImp(HOraInfo)

#define NMAX_INFO 2000
 
void HOraInfo::showSqlError(const Char_t* f) {
  // shows SQL error messages
  Error(f,"\n%s",sqlca.sqlerrm.sqlerrmc);
}


void HOraInfo::showRunStart(Int_t run) {
  // prints the start date and time of given run
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int id; 
    char runDate[21];
    short runDate_Ind=-1;
  /* EXEC SQL END DECLARE SECTION; */ 

  id=run;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("showRunStart(Int_t)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  /* EXEC SQL SELECT TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS')
           INTO :runDate INDICATOR :runDate_Ind
           FROM daq.daq_runs_ana
           WHERE run_id = :id; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 2;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS') into :b0\
:b1  from daq.daq_runs_ana where run_id=:b2";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)runDate;
  sqlstm.sqhstl[0] = (unsigned int  )21;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)&runDate_Ind;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)&id;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto notfound;
  if (sqlca.sqlcode < 0) showSqlError("showRunStart(Int_t)");
}


  if (runDate_Ind>=0) cout<<"Run "<<run<<" started at "<<runDate<<'\n';
  else cout << "no Run_Start for run "<<run<<'\n';
  return;
notfound:
  cout << "Run not found" <<endl;
  return;
}

Int_t HOraInfo::getRunId(const Text_t* daqFilename) {
  // returns the run id of a daq file
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* daqfile;
    int run;
  /* EXEC SQL END DECLARE SECTION; */ 

  daqfile=(Char_t*)daqFilename;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("getRunId(Text_t*)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  /* EXEC SQL SELECT run_id INTO :run
           FROM daq.daq_files
           WHERE UPPER(filename) = UPPER(:daqfile); */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 2;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select run_id into :b0  from daq.daq_files where UPPER(file\
name)=UPPER(:b1)";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )28;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)&run;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)daqfile;
  sqlstm.sqhstl[1] = (unsigned int  )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto notfound;
  if (sqlca.sqlcode < 0) showSqlError("getRunId(Text_t*)");
}

           
  return run;
notfound:
  Error("getRunId(Text_t*)","No such DAQ file %s",daqFilename);
  return -1;
}


Int_t HOraInfo::getRefRunId(const Text_t* daqFilename) {
  // returns the run id of the last run, where run start <= timestamp extracted
  // from daqFilename, or -1 if no run is found
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* daqfile;
    int   run = -1;
  /* EXEC SQL END DECLARE SECTION; */ 

  daqfile=(Char_t*)daqFilename;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("getRefRunId(Text_t*)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  /* EXEC SQL EXECUTE
    BEGIN
      :run := hades_oper.get_reference_run(:daqfile);
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 2;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin :run := hades_oper . get_reference_run ( :daqfile ) ;\
 END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )51;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)&run;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)daqfile;
  sqlstm.sqhstl[1] = (unsigned int  )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto notfound;
  if (sqlca.sqlcode < 0) showSqlError("getRefRunId(Text_t*)");
}


  return run;
notfound:
  showSqlError("getRefRunId(Text_t*)");
  return -1;
}


Int_t HOraInfo::getLastRun(const Text_t* beamtime) {
  // returns the id of the last run of the specified beamtime
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* bt;
    int run;
  /* EXEC SQL END DECLARE SECTION; */ 

  bt=(Char_t*)beamtime;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("getLastRun(Text_t*)"); */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  /* EXEC SQL SELECT MAX(run_id) INTO :run
           FROM daq.daq_runs_ana
           WHERE exp_id = :bt
           AND run_start = ( SELECT MAX(run_start)
                             FROM daq.daq_runs_ana           
                             WHERE exp_id = :bt ); */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select max(run_id) into :b0  from daq.daq_runs_ana where (e\
xp_id=:b1 and run_start=(select max(run_start)  from daq.daq_runs_ana where ex\
p_id=:b1))";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )74;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)&run;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)bt;
  sqlstm.sqhstl[1] = (unsigned int  )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)bt;
  sqlstm.sqhstl[2] = (unsigned int  )0;
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto notfound;
  if (sqlca.sqlcode < 0) showSqlError("getLastRun(Text_t*)");
}


  return run;
notfound:
  Error("getLastRun(Text_t*)","No run found for beamtime %s",beamtime);
  return -1;
}

Bool_t HOraInfo::getDaqFilename(Int_t runId,TString& filename) {
  // returns the DAQ filename of the specified runId
  // generates a filename (prefix auto) from the starttime in case the filename is null
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int     id;
    /* varchar fname[128]; */ 
struct { unsigned short len; unsigned char arr[128]; } fname;

    /* varchar fstart[20]; */ 
struct { unsigned short len; unsigned char arr[20]; } fstart;

    short   fname_Ind; 
    short   fstart_Ind; 
  /* EXEC SQL END DECLARE SECTION; */ 

  id=runId;
  /* EXEC SQL WHENEVER SQLERROR DO
    showSqlError("getDaqFilename"); */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  /* EXEC SQL SELECT filename, to_char(run_start,'YYDDDHH24MISS')
           INTO :fname:fname_Ind, :fstart:fstart_Ind
           FROM daq.daq_runs_ana
           where run_id = :id; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select filename ,to_char(run_start,'YYDDDHH24MISS') into :b\
0:b1,:b2:b3  from daq.daq_runs_ana where run_id=:b4";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )101;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)&fname;
  sqlstm.sqhstl[0] = (unsigned int  )130;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)&fname_Ind;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)&fstart;
  sqlstm.sqhstl[1] = (unsigned int  )22;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)&fstart_Ind;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)&id;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto notfound;
  if (sqlca.sqlcode < 0) showSqlError("getDaqFilename");
}


  if (fname_Ind!=-1) {
    fname.arr[fname.len]='\0';
    filename=(Char_t*)(fname.arr);
  }
  if (filename.CompareTo("null")==0) {
    if (fstart_Ind!=-1) {
      fstart.arr[fstart.len]='\0';
      filename="auto";
      filename.Append((Char_t*)(fstart.arr));
      filename.Append(".hld");
    } else {
      filename="\0";
      Warning("getDaqFilename","No runStart for runId %i",runId);
      return kFALSE;
    }
  }
  return kTRUE;
notfound:
  Warning("getDaqFilename","RunId %i not found",runId);
  return kFALSE;
}

TList* HOraInfo::getListOfRuns(const Char_t* beamtime,
                               const Char_t* startAt, const Char_t* endAt) {
  // returns the list of runs for the specifies experiment and range
  // accepts dates (format DD-MON-YYYY HH24:MI:SS), hld-filenames and run ids
  if (strlen(beamtime)==0) return 0;
  TString expName(beamtime);
  expName.ToUpper();
  TString rangeStart;
  TString rangeEnd;
  Bool_t rc=kTRUE;
  if (expName.Contains("SIM")) return getListOfSimRefRuns(expName.Data(),startAt,endAt);
  if (strlen(startAt)!=0) rc=getRunStart(startAt,rangeStart);
  else rangeStart="01-JAN-1990 00:00:00";
  if (!rc) return 0;
  if (strlen(endAt)!=0) rc=getRunStart(endAt,rangeEnd);
  else rangeEnd="01-JAN-4000 00:00:00";
  if (!rc) return 0;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pexp;
    char* pstart;
    char* pend;
    struct {
      int     rid[NMAX_INFO];
      /* varchar rname[NMAX_INFO][81]; */ 
struct { unsigned short len; unsigned char arr[82]; } rname[2000];

      char    ts[NMAX_INFO][21];
      char    te[NMAX_INFO][21];
      int     nevt[NMAX_INFO];
    } runs;
    struct {
      short rid_Ind[NMAX_INFO];
      short rname_Ind[NMAX_INFO];
      short ts_Ind[NMAX_INFO];
      short te_Ind[NMAX_INFO];
      short nevt_Ind[NMAX_INFO];
    } runs_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  pexp=(Char_t*)expName.Data();
  pstart=(Char_t*)rangeStart.Data();
  pend=(Char_t*)rangeEnd.Data();
  Int_t nTot=0;
  Int_t nLast=0;
  TList* runsList=new TList();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE runs_cursor CURSOR FOR
           SELECT run_id, filename,
                  TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS'),
                  TO_CHAR(run_stop,'DD-MON-YYYY HH24:MI:SS'),
                  events
           FROM daq.daq_runs_ana
           WHERE upper(exp_id)= :pexp
             AND run_start IS NOT NULL
             AND run_start BETWEEN TO_DATE(:pstart,'DD-MON-YYYY HH24:MI:SS')
                           AND TO_DATE(:pend,'DD-MON-YYYY HH24:MI:SS')
             AND filename is not null and filename != 'null'
           ORDER BY run_start; */ 

  /* EXEC SQL OPEN runs_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0006;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )128;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqcmod = (unsigned int )0;
  sqlstm.sqhstv[0] = (         void  *)pexp;
  sqlstm.sqhstl[0] = (unsigned int  )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)pstart;
  sqlstm.sqhstl[1] = (unsigned int  )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)pend;
  sqlstm.sqhstl[2] = (unsigned int  )0;
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorfound;
}


  do {
    /* EXEC SQL FETCH runs_cursor INTO :runs INDICATOR :runs_Ind; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 5;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )155;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqfoff = (           int )0;
    sqlstm.sqfmod = (unsigned int )2;
    sqlstm.sqhstv[0] = (         void  *)runs.rid;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)runs_Ind.rid_Ind;
    sqlstm.sqinds[0] = (         int  )sizeof(short);
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)runs.rname;
    sqlstm.sqhstl[1] = (unsigned int  )83;
    sqlstm.sqhsts[1] = (         int  )84;
    sqlstm.sqindv[1] = (         void  *)runs_Ind.rname_Ind;
    sqlstm.sqinds[1] = (         int  )sizeof(short);
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)runs.ts;
    sqlstm.sqhstl[2] = (unsigned int  )21;
    sqlstm.sqhsts[2] = (         int  )21;
    sqlstm.sqindv[2] = (         void  *)runs_Ind.ts_Ind;
    sqlstm.sqinds[2] = (         int  )sizeof(short);
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)runs.te;
    sqlstm.sqhstl[3] = (unsigned int  )21;
    sqlstm.sqhsts[3] = (         int  )21;
    sqlstm.sqindv[3] = (         void  *)runs_Ind.te_Ind;
    sqlstm.sqinds[3] = (         int  )sizeof(short);
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqharc[3] = (unsigned int   *)0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqhstv[4] = (         void  *)runs.nevt;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[4] = (         int  )sizeof(int);
    sqlstm.sqindv[4] = (         void  *)runs_Ind.nevt_Ind;
    sqlstm.sqinds[4] = (         int  )sizeof(short);
    sqlstm.sqharm[4] = (unsigned int  )0;
    sqlstm.sqharc[4] = (unsigned int   *)0;
    sqlstm.sqadto[4] = (unsigned short )0;
    sqlstm.sqtdso[4] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) goto errorfound;
}


    nLast=sqlca.sqlerrd[2]-nTot;
    for (Int_t i=0;i<nLast;i++) {
      runs.rname[i].arr[runs.rname[i].len]='\0';
      HRunInfo* p=new HRunInfo((Char_t*)(runs.rname[i].arr));
      p->setRunId(runs.rid[i]);
      runs.ts[i][20]='\0';
      p->setStartTime((Char_t*)(runs.ts[i]));
      if (runs_Ind.te_Ind[i]!=-1) {
        runs.te[i][20]='\0';
        p->setEndTime((Char_t*)(runs.te[i]));
      }
      if (runs_Ind.nevt_Ind[i]!=-1) {
        p->setNumEvents(runs.nevt[i]);
      }
      runsList->Add(p);
      nTot++;
    }
  } while (nLast==NMAX_INFO);
  /* EXEC SQL CLOSE runs_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 5;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )190;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorfound;
}


  cout<<"*** Total number of runs: "<<nTot<<endl;
  return runsList;
errorfound:
  pConn->showSqlError("getListOfRuns");
  if (runsList) {
    runsList->Delete();
    delete runsList;
    runsList=0;
  }
  return 0;
}

Bool_t HOraInfo::getRunStart(const Char_t* pString,TString& pTime) {
  // gets the run start for a DAQ run
  // pString can be a filename with extension .hld or a run id
  // or a date with date format DD-MON-YYYY HH24:MI:SS
  TString s(pString);
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pfile;
    int   pid;    
    char  ts[21];
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  pfile=0;
  pid=-1;
  if (s.Contains("-")) {
    pTime=pString;
  } else {
    if (s.Contains(".hld")) {
      pfile=(Char_t*)pString;
      /* EXEC SQL SELECT TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS')
               INTO :ts
               FROM daq.daq_files
               WHERE filename = :pfile; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 5;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = "select TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS') into\
 :b0  from daq.daq_files where filename=:b1";
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )205;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqhstv[0] = (         void  *)ts;
      sqlstm.sqhstl[0] = (unsigned int  )21;
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         void  *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)pfile;
      sqlstm.sqhstl[1] = (unsigned int  )0;
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         void  *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode == 1403) goto notfound;
      if (sqlca.sqlcode < 0) goto errorfound;
}


    } else {
      pid=atoi(pString);
      /* EXEC SQL SELECT TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS')
               INTO :ts
               FROM daq.daq_runs_ana
               WHERE run_id = :pid; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 5;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = "select TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS') into\
 :b0  from daq.daq_runs_ana where run_id=:b1";
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )228;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqhstv[0] = (         void  *)ts;
      sqlstm.sqhstl[0] = (unsigned int  )21;
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         void  *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)&pid;
      sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         void  *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode == 1403) goto notfound;
      if (sqlca.sqlcode < 0) goto errorfound;
}


    }
    ts[20]='\0';    
    pTime=ts;
  }
  return kTRUE;
errorfound:
  pConn->showSqlError("getRunStart");
  return kFALSE;
notfound:
  Error("getRunStart","Run not found for %s",pString);
  return kFALSE;
}

TList* HOraInfo::getListOfSimRefRuns(const Char_t* project,
                               const Char_t* startAt, const Char_t* endAt) {
  // returns the list of simulation reference runs (only last generation)
  // for the specifies project and range
  TString rangeStart;
  TString rangeEnd;
  Bool_t rc=kTRUE;
  if (strlen(startAt)!=0) rc=getSimRefRunStart(startAt,rangeStart);
  else rangeStart="01-JAN-1990 00:00:00";
  if (!rc) return 0;
  if (strlen(endAt)!=0) rc=getSimRefRunStart(endAt,rangeEnd);
  else rangeEnd="01-JAN-4000 00:00:00";
  if (!rc) return 0;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pexp;
    char* pstart;
    char* pend;
    struct {
      int     rid[NMAX_INFO];
      /* varchar rname[NMAX_INFO][81]; */ 
struct { unsigned short len; unsigned char arr[82]; } rname[2000];

      char    ts[NMAX_INFO][21];
      char    te[NMAX_INFO][21];
    } refruns;
    struct {
      short rid_Ind[NMAX_INFO];
      short rname_Ind[NMAX_INFO];
      short ts_Ind[NMAX_INFO];
      short te_Ind[NMAX_INFO];
    } refruns_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  pexp=(Char_t*)project;
  pstart=(Char_t*)rangeStart.Data();
  pend=(Char_t*)rangeEnd.Data();
  Int_t nTot=0;
  Int_t nLast=0;
  TList* runsList=new TList();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE refruns_cursor CURSOR FOR
           SELECT ref_run_id, ref_run_name,
                  TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS'),
                  TO_CHAR(run_stop,'DD-MON-YYYY HH24:MI:SS')
           FROM hanal.simul_project p,
                hanal.simul_ref_run rr
           WHERE upper(exp_id)= :pexp
             AND p.project_id = rr.project_id
             AND run_start BETWEEN TO_DATE(:pstart,'DD-MON-YYYY HH24:MI:SS')
                           AND TO_DATE(:pend,'DD-MON-YYYY HH24:MI:SS')
             AND rr.generation = ( SELECT MAX(generation)
                                   FROM hanal.simul_ref_run
                                   WHERE project_id = p.project_id )
           ORDER BY ref_run_id; */ 

  /* EXEC SQL OPEN refruns_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 5;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0009;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )251;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqcmod = (unsigned int )0;
  sqlstm.sqhstv[0] = (         void  *)pexp;
  sqlstm.sqhstl[0] = (unsigned int  )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)pstart;
  sqlstm.sqhstl[1] = (unsigned int  )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (         void  *)pend;
  sqlstm.sqhstl[2] = (unsigned int  )0;
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         void  *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorfound;
}


  do {
    /* EXEC SQL FETCH refruns_cursor INTO :refruns INDICATOR :refruns_Ind; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 5;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )278;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqfoff = (           int )0;
    sqlstm.sqfmod = (unsigned int )2;
    sqlstm.sqhstv[0] = (         void  *)refruns.rid;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)refruns_Ind.rid_Ind;
    sqlstm.sqinds[0] = (         int  )sizeof(short);
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqharc[0] = (unsigned int   *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)refruns.rname;
    sqlstm.sqhstl[1] = (unsigned int  )83;
    sqlstm.sqhsts[1] = (         int  )84;
    sqlstm.sqindv[1] = (         void  *)refruns_Ind.rname_Ind;
    sqlstm.sqinds[1] = (         int  )sizeof(short);
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqharc[1] = (unsigned int   *)0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)refruns.ts;
    sqlstm.sqhstl[2] = (unsigned int  )21;
    sqlstm.sqhsts[2] = (         int  )21;
    sqlstm.sqindv[2] = (         void  *)refruns_Ind.ts_Ind;
    sqlstm.sqinds[2] = (         int  )sizeof(short);
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqharc[2] = (unsigned int   *)0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqhstv[3] = (         void  *)refruns.te;
    sqlstm.sqhstl[3] = (unsigned int  )21;
    sqlstm.sqhsts[3] = (         int  )21;
    sqlstm.sqindv[3] = (         void  *)refruns_Ind.te_Ind;
    sqlstm.sqinds[3] = (         int  )sizeof(short);
    sqlstm.sqharm[3] = (unsigned int  )0;
    sqlstm.sqharc[3] = (unsigned int   *)0;
    sqlstm.sqadto[3] = (unsigned short )0;
    sqlstm.sqtdso[3] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) goto errorfound;
}


    nLast=sqlca.sqlerrd[2]-nTot;
    for (Int_t i=0;i<nLast;i++) {
      refruns.rname[i].arr[refruns.rname[i].len]='\0';
      HRunInfo* p=new HRunInfo((Char_t*)(refruns.rname[i].arr));
      p->setRunId(refruns.rid[i]);
      refruns.ts[i][20]='\0';
      p->setStartTime((Char_t*)(refruns.ts[i]));
      if (refruns_Ind.te_Ind[i]!=-1) {
        refruns.te[i][20]='\0';
        p->setEndTime((Char_t*)(refruns.te[i]));
      }
      runsList->Add(p);
      nTot++;
    }
  } while (nLast==NMAX_INFO);
  /* EXEC SQL CLOSE refruns_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 5;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )309;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorfound;
}


  cout<<"*** Total number of runs: "<<nTot<<endl;
  return runsList;
errorfound:
  pConn->showSqlError("getListOfSimRefRuns");
  if (runsList) {
    runsList->Delete();
    delete runsList;
    runsList=0;
  }
  return 0;
}

Bool_t HOraInfo::getSimRefRunStart(const Char_t* pString,TString& pTime) {
  // gets the run start for a simulation reference run
  // pString can be a filename with extension .hld or a run id
  // or a date with date format DD-MON-YYYY HH24:MI:SS
  TString s(pString);
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pfile;
    int   pid;    
    char  ts[21];
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */ 

  pfile=0;
  pid=-1;
  if (s.Contains("-")) {
    pTime=pString;
  } else {
    Char_t c=pString[0];
    if (c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') {
      pid=atoi(pString);
      /* EXEC SQL SELECT TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS')
               INTO :ts
               FROM hanal.simul_ref_run
               WHERE ref_run_id = :pid; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 5;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = "select TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS') into\
 :b0  from hanal.simul_ref_run where ref_run_id=:b1";
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )324;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqhstv[0] = (         void  *)ts;
      sqlstm.sqhstl[0] = (unsigned int  )21;
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         void  *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)&pid;
      sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         void  *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode == 1403) goto notfound;
      if (sqlca.sqlcode < 0) goto errorfound;
}


    } else {
      pfile=(Char_t*)pString;
      /* EXEC SQL SELECT TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS')
               INTO :ts
               FROM hanal.simul_ref_run
               WHERE ref_run_name = :pfile; */ 

{
      struct sqlexd sqlstm;
      sqlorat((void **)0, &sqlctx, &oraca);
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 5;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = "select TO_CHAR(run_start,'DD-MON-YYYY HH24:MI:SS') into\
 :b0  from hanal.simul_ref_run where ref_run_name=:b1";
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )347;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqhstv[0] = (         void  *)ts;
      sqlstm.sqhstl[0] = (unsigned int  )21;
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         void  *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned int  )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (         void  *)pfile;
      sqlstm.sqhstl[1] = (unsigned int  )0;
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         void  *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned int  )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
      if (sqlca.sqlcode == 1403) goto notfound;
      if (sqlca.sqlcode < 0) goto errorfound;
}


    }
    ts[20]='\0';    
    pTime=ts;
  }
  return kTRUE;
errorfound:
  pConn->showSqlError("getRefRunStart");
  return kFALSE;
notfound:
  Error("getRefRunStart","Simulation reference run not found for %s",pString);
  return kFALSE;
}

Last change: Sat May 22 13:05:04 2010
Last generated: 2010-05-22 13:05

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.