/* 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[18];
};
static const struct sqlcxp sqlfpn =
{
    17,
    "horaslowreader.pc"
};


static unsigned int sqlctx = 9842619;


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[14];
   unsigned int   sqhstl[14];
            int   sqhsts[14];
            void  *sqindv[14];
            int   sqinds[14];
   unsigned int   sqharm[14];
   unsigned int   *sqharc[14];
   unsigned short  sqadto[14];
   unsigned short  sqtdso[14];
} sqlstm = {12,14};

// 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 *sq0002 = 
"select TO_CHAR(starttime,'yyyy-mm-dd hh24:mi:ss') , interval  ,ndata  from h\
ades_slow.hscs_archiver_rate where (starttime>=TO_DATE(:b0,'yyyy-mm-dd hh24:mi\
:ss') and starttime<TO_DATE(:b1,'yyyy-mm-dd hh24:mi:ss')) order by starttime  \
          ";

 static const char *sq0004 = 
"select period_id ,TO_CHAR(period_begin,'yyyy-mm-dd hh24:mi:ss') ,TO_CHAR(per\
iod_end,'yyyy-mm-dd hh24:mi:ss') ,run_id ,filename  from hades_slow.hscs_perio\
ds where (partition=:b0 and period_id between :b1 and :b2) order by period_id \
           ";

 static const char *sq0006 = 
"select period_id ,mean_value ,sigma_value ,min_value ,max_value ,num_data_ro\
ws ,stat ,mon_num_data_rows  from hades_slow.channel_run_summary_view_ana wher\
e (pv_id=:b0 and period_id between :b1 and :b2) order by period_id            ";

 static const char *sq0008 = 
"select TO_CHAR( timestamp ,'yyyy-mm-dd hh24:mi:ss') ,nanosecs ,nvl(value,0.)\
 ,sevr  from hades_slow.archive_data_f where ( timestamp  between TO_DATE(:b0,\
'yyyy-mm-dd hh24:mi:ss') and TO_DATE(:b1,'yyyy-mm-dd hh24:mi:ss') and pv_id=:b\
2) order by  timestamp ,nanosecs            ";

 static const char *sq0009 = 
"select TO_CHAR( timestamp ,'yyyy-mm-dd hh24:mi:ss') ,nanosecs ,nvl(value,0) \
,sevr  from hades_slow.archive_data_i where ( timestamp  between TO_DATE(:b0,'\
yyyy-mm-dd hh24:mi:ss') and TO_DATE(:b1,'yyyy-mm-dd hh24:mi:ss') and pv_id=:b2\
) order by  timestamp ,nanosecs            ";

 static const char *sq0010 = 
"select TO_CHAR(starttime,'yyyy-mm-dd hh24:mi:ss') , interval  ,ndata  from h\
ades_scs.hscs_archiver_rate where (starttime>=TO_DATE(:b0,'yyyy-mm-dd hh24:mi:\
ss') and starttime<TO_DATE(:b1,'yyyy-mm-dd hh24:mi:ss')) order by starttime   \
         ";

 static const char *sq0012 = 
"select period_id ,TO_CHAR(period_begin,'yyyy-mm-dd hh24:mi:ss') ,TO_CHAR(per\
iod_end,'yyyy-mm-dd hh24:mi:ss') ,run_id ,filename  from hades_scs.hscs_period\
s where period_id between :b0 and :b1 order by period_id            ";

 static const char *sq0013 = 
"select period_id ,NVL(mean_value,(-999)) ,NVL(sigma_value,(-999)) ,NVL(min_v\
alue,(-999)) ,NVL(max_value,(-999)) ,num_data_rows ,NVL(stat,0) ,NVL(mon_num_d\
ata_rows,(-1))  from hades_scs.channel_run_summary_view where (pv_id=:b0 and p\
eriod_id between :b1 and :b2) order by period_id            ";

 static const char *sq0016 = 
"select distinct TO_CHAR( timestamp ,'yyyy-mm-dd hh24:mi:ss') ts ,nanosecs ,N\
VL(value,0.) ,sevr  from hades_scs.archive_data_f_view where ( timestamp  betw\
een TO_DATE(NVL(:b0,(SYSDATE-(1/24))),'yyyy-mm-dd hh24:mi:ss') and TO_DATE(NVL\
(:b1,SYSDATE),'yyyy-mm-dd hh24:mi:ss') and pv_id=:b2) order by ts,nanosecs    \
        ";

 static const char *sq0017 = 
"select distinct TO_CHAR( timestamp ,'yyyy-mm-dd hh24:mi:ss') ts ,nanosecs ,N\
VL(value,0) ,sevr  from hades_scs.archive_data_i_view where ( timestamp  betwe\
en TO_DATE(:b0,'yyyy-mm-dd hh24:mi:ss') and TO_DATE(:b1,'yyyy-mm-dd hh24:mi:ss\
') and pv_id=:b2) order by ts,nanosecs            ";

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,180,0,4,89,0,0,3,1,0,1,0,2,97,0,0,2,97,0,0,1,97,0,0,
32,0,0,2,242,0,9,146,0,0,2,2,0,1,0,1,97,0,0,1,97,0,0,
55,0,0,2,0,0,13,148,0,0,3,0,0,1,0,2,97,0,0,2,3,0,0,2,3,0,0,
82,0,0,2,0,0,15,162,0,0,0,0,0,1,0,
97,0,0,3,219,0,4,198,0,0,6,3,0,1,0,2,3,0,0,2,3,0,0,2,3,0,0,1,97,0,0,1,97,0,0,1,
97,0,0,
136,0,0,4,243,0,9,255,0,0,3,3,0,1,0,1,97,0,0,1,3,0,0,1,3,0,0,
163,0,0,4,0,0,13,257,0,0,5,0,0,1,0,2,3,0,0,2,97,0,0,2,97,0,0,2,3,0,0,2,9,0,0,
198,0,0,4,0,0,15,275,0,0,0,0,0,1,0,
213,0,0,5,82,0,4,298,0,0,3,1,0,1,0,2,3,0,0,2,9,0,0,1,97,0,0,
240,0,0,6,232,0,9,362,0,0,3,3,0,1,0,1,3,0,0,1,3,0,0,1,3,0,0,
267,0,0,6,0,0,13,364,0,0,8,0,0,1,0,2,3,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,3,
0,0,2,3,0,0,2,3,0,0,
314,0,0,6,0,0,15,382,0,0,0,0,0,1,0,
329,0,0,7,543,0,4,448,0,0,14,5,0,1,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,
4,0,0,2,9,0,0,2,3,0,0,2,97,0,0,1,3,0,0,1,97,0,0,1,97,0,0,1,97,0,0,1,97,0,0,
400,0,0,8,276,0,9,557,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,1,3,0,0,
427,0,0,8,0,0,13,559,0,0,4,0,0,1,0,2,97,0,0,2,3,0,0,2,4,0,0,2,3,0,0,
458,0,0,8,0,0,15,574,0,0,0,0,0,1,0,
473,0,0,9,275,0,9,615,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,1,3,0,0,
500,0,0,9,0,0,13,617,0,0,4,0,0,1,0,2,97,0,0,2,3,0,0,2,3,0,0,2,3,0,0,
531,0,0,9,0,0,15,632,0,0,0,0,0,1,0,
546,0,0,10,241,0,9,672,0,0,2,2,0,1,0,1,97,0,0,1,97,0,0,
569,0,0,10,0,0,13,674,0,0,3,0,0,1,0,2,97,0,0,2,3,0,0,2,3,0,0,
596,0,0,10,0,0,15,688,0,0,0,0,0,1,0,
611,0,0,11,193,0,4,715,0,0,5,2,0,1,0,2,3,0,0,2,3,0,0,2,3,0,0,1,97,0,0,1,97,0,0,
646,0,0,12,222,0,9,768,0,0,2,2,0,1,0,1,3,0,0,1,3,0,0,
669,0,0,12,0,0,13,770,0,0,5,0,0,1,0,2,3,0,0,2,97,0,0,2,97,0,0,2,3,0,0,2,9,0,0,
704,0,0,12,0,0,15,788,0,0,0,0,0,1,0,
719,0,0,13,292,0,9,846,0,0,3,3,0,1,0,1,3,0,0,1,3,0,0,1,3,0,0,
746,0,0,13,0,0,13,848,0,0,8,0,0,1,0,2,3,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,
3,0,0,2,3,0,0,2,3,0,0,
793,0,0,13,0,0,15,868,0,0,0,0,0,1,0,
808,0,0,14,303,0,4,920,0,0,10,1,0,1,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,
2,4,0,0,2,9,0,0,2,3,0,0,2,97,0,0,1,3,0,0,
863,0,0,15,88,0,4,975,0,0,3,1,0,1,0,2,3,0,0,2,9,0,0,1,97,0,0,
890,0,0,16,318,0,9,1052,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,1,3,0,0,
917,0,0,16,0,0,13,1054,0,0,4,0,0,1,0,2,97,0,0,2,3,0,0,2,4,0,0,2,3,0,0,
948,0,0,16,0,0,15,1069,0,0,0,0,0,1,0,
963,0,0,17,282,0,9,1110,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,1,3,0,0,
990,0,0,17,0,0,13,1112,0,0,4,0,0,1,0,2,97,0,0,2,3,0,0,2,3,0,0,2,3,0,0,
1021,0,0,17,0,0,15,1127,0,0,0,0,0,1,0,
};


//*-- AUTHOR  : Ilse Koenig
//*-- Created  : 16/08/2004 by Ilse Koenig
//*-- Modified : 14/11/2005 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
//
// HOraSlowReader
//
// Class to read slowcontrol data from Oracle
//
//////////////////////////////////////////////////////////////////////////////

#include "hdbconn.h"
#include "horaslowreader.h"
#include "horaslowpartition.h"
#include "horaslowperiod.h"
#include "horaslowchannel.h"
#include "horaslowchanrunsum.h"
#include "horaslowchanmeta.h"
#include "horaslowchanraw.h"
#include "horaslowarchrateobj.h"
#include <stdio.h>
#include <stdlib.h>

#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern

// Oracle communication area
#include <oraca.h>
// SQL Communications Area
#include <sqlca.h>

ClassImp(HOraSlowReader)

#define NMAX_SCS 2000

HOraSlowReader::HOraSlowReader() {
  // Constructor
  pConn=new HDbConn();
}

HOraSlowReader::~HOraSlowReader() {
  // Destructor
  if (pConn) {
    delete pConn;
    pConn=0;
  }
}

Bool_t HOraSlowReader::open() {
  // Opens an Oracle connection (default user account hades_ana)
  if (pConn->isOpen()) return kTRUE;
  return pConn->connectDb("HADES_ANA");  
}

void HOraSlowReader::close() {
  // Disconnects from Oracle
  pConn->closeDbConn();
}

Bool_t HOraSlowReader::isOpen() {
  return pConn->isOpen();
}

void HOraSlowReader::print() {
  // Prints information about the database connection
  if (pConn->isOpen())
    cout<<"Connected to Oracle-Database db-hades\n";
  else cout<<"*** no connection to Oracle established  ***\n";
}

Bool_t HOraSlowReader::readPartition(HOraSlowPartition* partition) {
  // Reads the start time and end time of the data partion
  if (!pConn->isOpen()||!partition) return kFALSE;
  if (strcmp(partition->GetName(),"online")==0) {
    if (strlen(partition->getStartTime())==0) partition->setStartTime("1970-01-01 00:00:00");
    if (strlen(partition->getEndTime())==0) partition->setEndTime("4000-01-01 00:00:00");
    return kTRUE;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pname;
    char  ts[20];
    char  te[20];
  /* EXEC SQL END DECLARE SECTION; */ 

  pname=(Char_t*)partition->GetName();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL SELECT TO_CHAR(starttime,'yyyy-mm-dd hh24:mi:ss'),
                  TO_CHAR(NVL(endtime,SYSDATE),'yyyy-mm-dd hh24:mi:ss')
           INTO :ts, :te
           FROM hades_slow.archive_partitionmgnt
           WHERE partitionname = :pname; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select TO_CHAR(starttime,'yyyy-mm-dd hh24:mi:ss') ,TO_CHAR(\
NVL(endtime,SYSDATE),'yyyy-mm-dd hh24:mi:ss') into :b0,:b1  from hades_slow.ar\
chive_partitionmgnt where partitionname=: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  *)ts;
  sqlstm.sqhstl[0] = (unsigned int  )20;
  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  *)te;
  sqlstm.sqhstl[1] = (unsigned int  )20;
  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  *)pname;
  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) goto errorfound;
}


  ts[19]='\0';
  te[19]='\0';
  if (strlen(partition->getStartTime())==0) partition->setStartTime(ts);
  if (strlen(partition->getEndTime())==0) partition->setEndTime(te);
  return kTRUE;
notfound:
  Error("readPartition","Partition %s not found",partition->GetName());
  return kFALSE;
errorfound:
  pConn->showSqlError("readPartition");  
  return kFALSE;
}

Bool_t HOraSlowReader::readArchiverRates(HOraSlowPartition* partition) {
  // Reads the archiver rates in the time range specified in partition
  if (!pConn->isOpen()||!partition) return kFALSE;
  TString start=partition->getStartTime();
  TString end=partition->getEndTime();
  if (start.IsNull()||end.IsNull()) {
    readPartition(partition);
    start=partition->getStartTime();
    end=partition->getEndTime();
  }
  if (start.IsNull()||end.IsNull()) return kFALSE;
  if (strcmp(partition->GetName(),"online")==0) return readOnlineArchiverRates(partition);
  TString t1=start(0,10);
  TString t2=end(0,10);
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* tstart;
    char* tend;
    struct {
      char stime[NMAX_SCS][20];
      int  nminutes[NMAX_SCS];
      int  nentries[NMAX_SCS];
    } rates;
  /* EXEC SQL END DECLARE SECTION; */ 

  tstart=(Char_t*)t1.Data();
  tend=(Char_t*)t2.Data();
  TObjArray* data=0;
  Int_t nTot=0;
  Int_t nLast=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE rates_cursor CURSOR FOR
           SELECT TO_CHAR(starttime,'yyyy-mm-dd hh24:mi:ss'),
                  interval, ndata
           FROM hades_slow.hscs_archiver_rate
           WHERE starttime >= TO_DATE(:tstart,'yyyy-mm-dd hh24:mi:ss')
             AND starttime < TO_DATE(:tend,'yyyy-mm-dd hh24:mi:ss')
           ORDER BY starttime; */ 

  /* EXEC SQL OPEN rates_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0002;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )32;
  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  *)tstart;
  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  *)tend;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH rates_cursor INTO :rates; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 3;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )55;
    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  *)rates.stime;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)rates.nminutes;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)rates.nentries;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )sizeof(int);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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.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;
    if (nLast>0) {
      if (data==0) data=new TObjArray(nLast);
      else data->Expand(sqlca.sqlerrd[2]);
      for (Int_t i=0;i<nLast;i++) {
        rates.stime[i][19]='\0';
        Int_t v=(Int_t)(rates.nentries[i]/rates.nminutes[i]);
        HOraSlowArchRateObj* p=new HOraSlowArchRateObj(rates.stime[i],v);
        data->AddAt(p,nTot);
        nTot++;
      }
    } 
  } while (nLast==NMAX_SCS&&nTot<=100000);
  /* EXEC SQL CLOSE rates_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )82;
  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;
}


  partition->setRates(data);
  return kTRUE;
errorfound:
  pConn->showSqlError("readArchiverRates");  
  return kFALSE;
}

Bool_t HOraSlowReader::readRunPeriods(HOraSlowPartition* partition) {
  // Reads the run periods in the partition range
  if (!pConn->isOpen()||!partition) return kFALSE;
  TString start=partition->getStartTime();
  TString end=partition->getEndTime();
  if (start.IsNull()||end.IsNull()) {
    readPartition(partition);
    start=partition->getStartTime();
    end=partition->getEndTime();
  }
  if (start.IsNull()||end.IsNull()) return kFALSE;
  if (strcmp(partition->GetName(),"online")==0) return readOnlineRunPeriods(partition);
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pname;
    char* pstart;
    char* pend;
    int   nruns;
    int   minid;
    int   maxid;
    short nruns_Ind;
    short minid_Ind;
    short maxid_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  pname=(Char_t*)partition->GetName();
  pstart=(Char_t*)start.Data();
  pend=(Char_t*)end.Data();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL SELECT count(1), min(id), max(id)
           INTO :nruns:nruns_Ind, :minid:minid_Ind, :maxid:maxid_Ind
           FROM hades_slow.hscs_run_period
           WHERE partition_name = :pname
             AND starttime BETWEEN TO_DATE(:pstart,'yyyy-mm-dd hh24:mi:ss')
                 AND TO_DATE(:pend,'yyyy-mm-dd hh24:mi:ss'); */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 6;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select count(1) ,min(id) ,max(id) into :b0:b1,:b2:b3,:b4:b5\
  from hades_slow.hscs_run_period where (partition_name=:b6 and starttime betw\
een TO_DATE(:b7,'yyyy-mm-dd hh24:mi:ss') and TO_DATE(:b8,'yyyy-mm-dd hh24:mi:s\
s'))";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )97;
  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  *)&nruns;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)&nruns_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  *)&minid;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)&minid_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  *)&maxid;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         void  *)&maxid_Ind;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqhstv[3] = (         void  *)pname;
  sqlstm.sqhstl[3] = (unsigned int  )0;
  sqlstm.sqhsts[3] = (         int  )0;
  sqlstm.sqindv[3] = (         void  *)0;
  sqlstm.sqinds[3] = (         int  )0;
  sqlstm.sqharm[3] = (unsigned int  )0;
  sqlstm.sqadto[3] = (unsigned short )0;
  sqlstm.sqtdso[3] = (unsigned short )0;
  sqlstm.sqhstv[4] = (         void  *)pstart;
  sqlstm.sqhstl[4] = (unsigned int  )0;
  sqlstm.sqhsts[4] = (         int  )0;
  sqlstm.sqindv[4] = (         void  *)0;
  sqlstm.sqinds[4] = (         int  )0;
  sqlstm.sqharm[4] = (unsigned int  )0;
  sqlstm.sqadto[4] = (unsigned short )0;
  sqlstm.sqtdso[4] = (unsigned short )0;
  sqlstm.sqhstv[5] = (         void  *)pend;
  sqlstm.sqhstl[5] = (unsigned int  )0;
  sqlstm.sqhsts[5] = (         int  )0;
  sqlstm.sqindv[5] = (         void  *)0;
  sqlstm.sqinds[5] = (         int  )0;
  sqlstm.sqharm[5] = (unsigned int  )0;
  sqlstm.sqadto[5] = (unsigned short )0;
  sqlstm.sqtdso[5] = (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;
}


  if (nruns_Ind!=-1 && nruns>0) {
    TObjArray* data=partition->setNumPeriods(nruns);
    return readPeriods(pname,data,nruns,minid,maxid);
  }
notfound:
  Error("readRunPeriods","No run summary for partition %s or specified time range",
        partition->GetName());
  return kFALSE;
errorfound:
  pConn->showSqlError("readRunPeriods");  
  return kFALSE;
}

Bool_t HOraSlowReader::readPeriods(Char_t* partitionName,TObjArray* data,Int_t nData,
                                   Int_t minPeriodId,Int_t maxPeriodId) {
  // Private function to read the run periods in the partition range
  if (!data) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pname;
    int   minid;
    int   maxid;
    struct {
      int     id[NMAX_SCS];
      char    ts[NMAX_SCS][20];
      char    te[NMAX_SCS][20];
      int     rid[NMAX_SCS];
      /* varchar rname[NMAX_SCS][81]; */ 
struct { unsigned short len; unsigned char arr[82]; } rname[2000];

    } periods;
    struct {
      short id_Ind[NMAX_SCS];
      short ts_Ind[NMAX_SCS];
      short te_Ind[NMAX_SCS];
      short rid_Ind[NMAX_SCS];
      short rname_Ind[NMAX_SCS];
    } periods_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  pname=partitionName;
  minid=minPeriodId;
  maxid=maxPeriodId;
  Int_t nTot=0;
  Int_t nLast=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE run_cursor CURSOR FOR
           SELECT period_id,
                  TO_CHAR(period_begin,'yyyy-mm-dd hh24:mi:ss'),
                  TO_CHAR(period_end,'yyyy-mm-dd hh24:mi:ss'),
                  run_id, filename
           FROM hades_slow.hscs_periods
           WHERE partition = :pname AND period_id BETWEEN :minid AND :maxid
           ORDER BY period_id; */ 

  /* EXEC SQL OPEN run_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 6;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0004;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )136;
  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  *)pname;
  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  *)&minid;
  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.sqhstv[2] = (         void  *)&maxid;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH run_cursor INTO :periods INDICATOR :periods_Ind; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 6;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )163;
    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  *)periods.id;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)periods_Ind.id_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  *)periods.ts;
    sqlstm.sqhstl[1] = (unsigned int  )20;
    sqlstm.sqhsts[1] = (         int  )20;
    sqlstm.sqindv[1] = (         void  *)periods_Ind.ts_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  *)periods.te;
    sqlstm.sqhstl[2] = (unsigned int  )20;
    sqlstm.sqhsts[2] = (         int  )20;
    sqlstm.sqindv[2] = (         void  *)periods_Ind.te_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  *)periods.rid;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)periods_Ind.rid_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  *)periods.rname;
    sqlstm.sqhstl[4] = (unsigned int  )83;
    sqlstm.sqhsts[4] = (         int  )84;
    sqlstm.sqindv[4] = (         void  *)periods_Ind.rname_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++) {
      HOraSlowPeriod* p=new HOraSlowPeriod();
      periods.ts[i][19]='\0';
      periods.te[i][19]='\0';
      p->setPeriodId(periods.id[i]);
      p->setStartTime((Char_t*)(periods.ts[i]));
      p->setEndTime((Char_t*)(periods.te[i]));
      if (periods_Ind.rid_Ind[i]!=-1) p->setRunId(periods.rid[i]);
      if (periods_Ind.rname_Ind[i]!=-1) {
        periods.rname[i].arr[periods.rname[i].len]='\0';      
        p->setFilename((Char_t*)(periods.rname[i].arr));
      }
      data->AddAt(p,nTot);
      nTot++;
    } 
  } while (nLast==NMAX_SCS&&nTot<nData);
  /* EXEC SQL CLOSE run_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 6;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )198;
  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<<"*** Run periods read: "<<nTot<<endl;
  if (nTot==nData) return kTRUE;
  else {
    Error("readPeriods","Too few data read");
    return kFALSE;
  }
errorfound:
  pConn->showSqlError("readPeriods");  
  return kFALSE;
}  

Int_t HOraSlowReader::readChannelId(HOraSlowChannel* pChannel) {
  // Reads the channel id and data type of a channel
  if (!pConn->isOpen()||!pChannel) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char*   chname;
    int     chid;
    /* varchar chtype[3]; */ 
struct { unsigned short len; unsigned char arr[3]; } chtype;

  /* EXEC SQL END DECLARE SECTION; */ 

  chname=(Char_t*)pChannel->GetName();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL SELECT pv_id, pv_type INTO :chid, :chtype
           FROM hades_slow.hscs_channel
           WHERE pv_name = :chname; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 6;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select pv_id ,pv_type into :b0,:b1  from hades_slow.hscs_ch\
annel where pv_name=:b2";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )213;
  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  *)&chid;
  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  *)&chtype;
  sqlstm.sqhstl[1] = (unsigned int  )5;
  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  *)chname;
  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) goto errorfound;
}


  pChannel->setChannelId(chid);
  chtype.arr[chtype.len]='\0';
  pChannel->setChannelType((Char_t*)chtype.arr);  
  return chid;
notfound:
  Warning("readChannelId","Channel %s not found",chname);
  return -1;
errorfound:
  pConn->showSqlError("readChannelId");  
  return -1;
}  

Bool_t HOraSlowReader::readChannelRunSum(HOraSlowPartition* partition,
                                         HOraSlowChannel* pChannel) {
  // Reads the summary information of a channel for the given partition
  if (!pConn->isOpen()||!partition||!pChannel) return kFALSE;
  if (strcmp(partition->GetName(),"online")==0) {
    return readOnlineChannelRunSum(partition,pChannel);
  }
  TObjArray* periods=partition->getRunPeriods();
  if (!periods) return kFALSE; 
  Int_t lastIndex=periods->GetLast();
  if (lastIndex<0) return kFALSE;
  Int_t channelId=pChannel->getChannelId();
  if (channelId<0) {
    channelId=readChannelId(pChannel);
  }
  if (channelId<=0) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    int pmin;
    int pmax;
    struct {
      int     pid[NMAX_SCS];
      double  vmean[NMAX_SCS];
      double  vsigma[NMAX_SCS];
      double  vmin[NMAX_SCS];
      double  vmax[NMAX_SCS];
      int     nd[NMAX_SCS];
      int     vstat[NMAX_SCS];
      int     vmon[NMAX_SCS];
    } runsum;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=channelId;
  pmin=((HOraSlowPeriod*)(periods->At(0)))->getPeriodId();
  pmax=((HOraSlowPeriod*)(periods->At(lastIndex)))->getPeriodId();
  Int_t nData=lastIndex+1;
  TObjArray* data=new TObjArray(nData);
  Int_t nTot=0;
  Int_t nLast=0;
  Int_t periodId=0;
  HOraSlowPeriod* period=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE chansum_cursor CURSOR FOR
           SELECT period_id, mean_value, sigma_value, min_value, max_value,
                  num_data_rows, stat, mon_num_data_rows
           FROM hades_slow.channel_run_summary_view_ana
           WHERE pv_id = :chid
           AND period_id BETWEEN :pmin AND :pmax
           ORDER BY period_id; */ 

  /* EXEC SQL OPEN chansum_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 6;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0006;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )240;
  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  *)&chid;
  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  *)&pmin;
  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.sqhstv[2] = (         void  *)&pmax;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH chansum_cursor INTO :runsum; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 8;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )267;
    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  *)runsum.pid;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)runsum.vmean;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[1] = (         int  )sizeof(double);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)runsum.vsigma;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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  *)runsum.vmin;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[3] = (         int  )sizeof(double);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    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  *)runsum.vmax;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[4] = (         int  )sizeof(double);
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    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.sqhstv[5] = (         void  *)runsum.nd;
    sqlstm.sqhstl[5] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[5] = (         int  )sizeof(int);
    sqlstm.sqindv[5] = (         void  *)0;
    sqlstm.sqinds[5] = (         int  )0;
    sqlstm.sqharm[5] = (unsigned int  )0;
    sqlstm.sqharc[5] = (unsigned int   *)0;
    sqlstm.sqadto[5] = (unsigned short )0;
    sqlstm.sqtdso[5] = (unsigned short )0;
    sqlstm.sqhstv[6] = (         void  *)runsum.vstat;
    sqlstm.sqhstl[6] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[6] = (         int  )sizeof(int);
    sqlstm.sqindv[6] = (         void  *)0;
    sqlstm.sqinds[6] = (         int  )0;
    sqlstm.sqharm[6] = (unsigned int  )0;
    sqlstm.sqharc[6] = (unsigned int   *)0;
    sqlstm.sqadto[6] = (unsigned short )0;
    sqlstm.sqtdso[6] = (unsigned short )0;
    sqlstm.sqhstv[7] = (         void  *)runsum.vmon;
    sqlstm.sqhstl[7] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[7] = (         int  )sizeof(int);
    sqlstm.sqindv[7] = (         void  *)0;
    sqlstm.sqinds[7] = (         int  )0;
    sqlstm.sqharm[7] = (unsigned int  )0;
    sqlstm.sqharc[7] = (unsigned int   *)0;
    sqlstm.sqadto[7] = (unsigned short )0;
    sqlstm.sqtdso[7] = (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++) {
      HOraSlowChanRunSum* p=new HOraSlowChanRunSum();
      period=(HOraSlowPeriod*)(periods->At(nTot));
      periodId=period->getPeriodId();
      if (periodId==runsum.pid[i]) {
        p->setPeriod(period);
        p->fill(runsum.pid[i],runsum.vmean[i],runsum.vsigma[i],
                runsum.vmin[i],runsum.vmax[i],runsum.nd[i],
                runsum.vstat[i],runsum.vmon[i]);
      } else {
        p->fill(periodId,-999.,0.,-999.,-999.,0,1,-1);
      }      
      data->AddAt(p,nTot);
      nTot++;
    } 
  } while (nLast==NMAX_SCS&&nTot<(lastIndex+1));
  /* EXEC SQL CLOSE chansum_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 8;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )314;
  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;
}


  pChannel->setRunSumData(data);
  if (nTot==nData) {
    cout<<"Run summary data for channel "<<pChannel->GetName()<<" read from Oracle\n";
    return kTRUE;
  } else {
    Error("readChannelRunSum","Too few data read");
    return kFALSE;
  }
errorfound:
  pConn->showSqlError("readChannelRunSum");  
  return kFALSE;
}  

Bool_t HOraSlowReader::readChannelMetaData(HOraSlowPartition* partition,
                                         HOraSlowChannel* pChannel) {
  // Reads the meta information of a channel for the given partition
  if (!pConn->isOpen()||!partition||!pChannel) return kFALSE;
  TString start=partition->getStartTime();
  TString end=partition->getEndTime();
  if (start.IsNull()||end.IsNull()) {
    readPartition(partition);
    start=partition->getStartTime();
    end=partition->getEndTime();
  }
  if (start.IsNull()||end.IsNull()) return kFALSE;
  if (strcmp(partition->GetName(),"online")==0) return readOnlineChannelMetaData(pChannel);
  Int_t channelId=pChannel->getChannelId();
  if (channelId<0) {
    channelId=readChannelId(pChannel);
  }
  if (channelId<=0) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    char* pstart;
    char* pend;
    struct {
      double  lgraph[NMAX_SCS];
      double  hgraph[NMAX_SCS];
      double  lwarn[NMAX_SCS];
      double  hwarn[NMAX_SCS];
      double  lalarm[NMAX_SCS];
      double  halarm[NMAX_SCS];
      /* varchar un[NMAX_SCS][21]; */ 
struct { unsigned short len; unsigned char arr[22]; } un[2000];

      int     prec[NMAX_SCS];
      char    ts[NMAX_SCS][20];
    } meta;
    struct {
      short lgraph_Ind[NMAX_SCS];
      short hgraph_Ind[NMAX_SCS];
      short lwarn_Ind[NMAX_SCS];
      short hwarn_Ind[NMAX_SCS];
      short lalarm_Ind[NMAX_SCS];
      short halarm_Ind[NMAX_SCS];
      short un_Ind[NMAX_SCS];
      short prec_Ind[NMAX_SCS];
      short ts_Ind[NMAX_SCS];
    } meta_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=channelId;
  pstart=(Char_t*)start.Data();
  pend=(Char_t*)end.Data();
  Int_t nData=0;
  Int_t maxPrec=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL SELECT lgraph_limit, hgraph_limit, lwarn_limit, hwarn_limit,
                  lalarm_limit, halarm_limit, units, precision,
                  TO_CHAR(md_starttime,'yyyy-mm-dd hh24:mi:ss')
           INTO :meta INDICATOR : meta_Ind
           FROM hades_slow.arch_meta
           WHERE pv_id = :chid
             AND ( ( md_starttime < TO_DATE(:pstart,'yyyy-mm-dd hh24:mi:ss')
                     AND ( md_endtime IS NULL
                           OR md_endtime > TO_DATE(:pstart,'yyyy-mm-dd hh24:mi:ss') ) )
                OR ( md_starttime BETWEEN TO_DATE(:pstart,'yyyy-mm-dd hh24:mi:ss')
                     AND TO_DATE(:pend,'yyyy-mm-dd hh24:mi:ss') ) )
           ORDER BY md_starttime; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select lgraph_limit ,hgraph_limit ,lwarn_limit ,hwarn_limit\
 ,lalarm_limit ,halarm_limit ,units ,precision ,TO_CHAR(md_starttime,'yyyy-mm-\
dd hh24:mi:ss') into :s1:s2 ,:s3:s4 ,:s5:s6 ,:s7:s8 ,:s9:s10 ,:s11:s12 ,:s13:s\
14 ,:s15:s16 ,:s17:s18   from hades_slow.arch_meta where (pv_id=:b2 and ((md_s\
tarttime<TO_DATE(:b3,'yyyy-mm-dd hh24:mi:ss') and (md_endtime is null  or md_e\
ndtime>TO_DATE(:b3,'yyyy-mm-dd hh24:mi:ss'))) or md_starttime between TO_DATE(\
:b3,'yyyy-mm-dd hh24:mi:ss') and TO_DATE(:b6,'yyyy-mm-dd hh24:mi:ss'))) order \
by md_starttime ";
  sqlstm.iters = (unsigned int  )2000;
  sqlstm.offset = (unsigned int  )329;
  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  *)meta.lgraph;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[0] = (         int  )sizeof(double);
  sqlstm.sqindv[0] = (         void  *)meta_Ind.lgraph_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  *)meta.hgraph;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[1] = (         int  )sizeof(double);
  sqlstm.sqindv[1] = (         void  *)meta_Ind.hgraph_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  *)meta.lwarn;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[2] = (         int  )sizeof(double);
  sqlstm.sqindv[2] = (         void  *)meta_Ind.lwarn_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  *)meta.hwarn;
  sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[3] = (         int  )sizeof(double);
  sqlstm.sqindv[3] = (         void  *)meta_Ind.hwarn_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  *)meta.lalarm;
  sqlstm.sqhstl[4] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[4] = (         int  )sizeof(double);
  sqlstm.sqindv[4] = (         void  *)meta_Ind.lalarm_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.sqhstv[5] = (         void  *)meta.halarm;
  sqlstm.sqhstl[5] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[5] = (         int  )sizeof(double);
  sqlstm.sqindv[5] = (         void  *)meta_Ind.halarm_Ind;
  sqlstm.sqinds[5] = (         int  )sizeof(short);
  sqlstm.sqharm[5] = (unsigned int  )0;
  sqlstm.sqharc[5] = (unsigned int   *)0;
  sqlstm.sqadto[5] = (unsigned short )0;
  sqlstm.sqtdso[5] = (unsigned short )0;
  sqlstm.sqhstv[6] = (         void  *)meta.un;
  sqlstm.sqhstl[6] = (unsigned int  )23;
  sqlstm.sqhsts[6] = (         int  )24;
  sqlstm.sqindv[6] = (         void  *)meta_Ind.un_Ind;
  sqlstm.sqinds[6] = (         int  )sizeof(short);
  sqlstm.sqharm[6] = (unsigned int  )0;
  sqlstm.sqharc[6] = (unsigned int   *)0;
  sqlstm.sqadto[6] = (unsigned short )0;
  sqlstm.sqtdso[6] = (unsigned short )0;
  sqlstm.sqhstv[7] = (         void  *)meta.prec;
  sqlstm.sqhstl[7] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[7] = (         int  )sizeof(int);
  sqlstm.sqindv[7] = (         void  *)meta_Ind.prec_Ind;
  sqlstm.sqinds[7] = (         int  )sizeof(short);
  sqlstm.sqharm[7] = (unsigned int  )0;
  sqlstm.sqharc[7] = (unsigned int   *)0;
  sqlstm.sqadto[7] = (unsigned short )0;
  sqlstm.sqtdso[7] = (unsigned short )0;
  sqlstm.sqhstv[8] = (         void  *)meta.ts;
  sqlstm.sqhstl[8] = (unsigned int  )20;
  sqlstm.sqhsts[8] = (         int  )20;
  sqlstm.sqindv[8] = (         void  *)meta_Ind.ts_Ind;
  sqlstm.sqinds[8] = (         int  )sizeof(short);
  sqlstm.sqharm[8] = (unsigned int  )0;
  sqlstm.sqharc[8] = (unsigned int   *)0;
  sqlstm.sqadto[8] = (unsigned short )0;
  sqlstm.sqtdso[8] = (unsigned short )0;
  sqlstm.sqhstv[9] = (         void  *)&chid;
  sqlstm.sqhstl[9] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[9] = (         int  )sizeof(int);
  sqlstm.sqindv[9] = (         void  *)0;
  sqlstm.sqinds[9] = (         int  )0;
  sqlstm.sqharm[9] = (unsigned int  )0;
  sqlstm.sqadto[9] = (unsigned short )0;
  sqlstm.sqtdso[9] = (unsigned short )0;
  sqlstm.sqhstv[10] = (         void  *)pstart;
  sqlstm.sqhstl[10] = (unsigned int  )0;
  sqlstm.sqhsts[10] = (         int  )0;
  sqlstm.sqindv[10] = (         void  *)0;
  sqlstm.sqinds[10] = (         int  )0;
  sqlstm.sqharm[10] = (unsigned int  )0;
  sqlstm.sqadto[10] = (unsigned short )0;
  sqlstm.sqtdso[10] = (unsigned short )0;
  sqlstm.sqhstv[11] = (         void  *)pstart;
  sqlstm.sqhstl[11] = (unsigned int  )0;
  sqlstm.sqhsts[11] = (         int  )0;
  sqlstm.sqindv[11] = (         void  *)0;
  sqlstm.sqinds[11] = (         int  )0;
  sqlstm.sqharm[11] = (unsigned int  )0;
  sqlstm.sqadto[11] = (unsigned short )0;
  sqlstm.sqtdso[11] = (unsigned short )0;
  sqlstm.sqhstv[12] = (         void  *)pstart;
  sqlstm.sqhstl[12] = (unsigned int  )0;
  sqlstm.sqhsts[12] = (         int  )0;
  sqlstm.sqindv[12] = (         void  *)0;
  sqlstm.sqinds[12] = (         int  )0;
  sqlstm.sqharm[12] = (unsigned int  )0;
  sqlstm.sqadto[12] = (unsigned short )0;
  sqlstm.sqtdso[12] = (unsigned short )0;
  sqlstm.sqhstv[13] = (         void  *)pend;
  sqlstm.sqhstl[13] = (unsigned int  )0;
  sqlstm.sqhsts[13] = (         int  )0;
  sqlstm.sqindv[13] = (         void  *)0;
  sqlstm.sqinds[13] = (         int  )0;
  sqlstm.sqharm[13] = (unsigned int  )0;
  sqlstm.sqadto[13] = (unsigned short )0;
  sqlstm.sqtdso[13] = (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;
}


  nData=sqlca.sqlerrd[2];
  if (nData>0) {
    TObjArray* data=new TObjArray(nData);
    for (Int_t i=0;i<sqlca.sqlerrd[2];i++) {
      HOraSlowChanMeta* p=new HOraSlowChanMeta();
      if (meta_Ind.lgraph_Ind[i]!=-1) p->setLowGraphLimit(meta.lgraph[i]);
      if (meta_Ind.hgraph_Ind[i]!=-1) p->setHighGraphLimit(meta.hgraph[i]);
      if (meta_Ind.lwarn_Ind[i]!=-1) p->setLowWarnLimit(meta.lwarn[i]);
      if (meta_Ind.hwarn_Ind[i]!=-1) p->setHighWarnLimit(meta.hwarn[i]);
      if (meta_Ind.lalarm_Ind[i]!=-1) p->setLowAlarmLimit(meta.lalarm[i]);
      if (meta_Ind.halarm_Ind[i]!=-1) p->setHighAlarmLimit(meta.halarm[i]);
      if (meta_Ind.un_Ind[i]!=-1) {
        meta.un[i].arr[meta.un[i].len]='\0';
        p->setUnits((Char_t*)meta.un[i].arr);
      }
      if (meta_Ind.prec_Ind[i]!=-1) {
        p->setPrecision(meta.prec[i]);
        if (meta.prec[i]>maxPrec) maxPrec=meta.prec[i];
      }
      if (meta_Ind.ts_Ind[i]!=-1) {
        meta.ts[i][19]='\0';
        p->setStartTime((Char_t*)meta.ts[i]);
      }
      data->AddAt(p,i);
    }
    pChannel->setMetaData(data);
    pChannel->setMaxPrecision(maxPrec);
    cout<<"Meta data for channel "<<pChannel->GetName()<<" read from Oracle\n";
    return kTRUE;
  }
  Error("readChannelMetaData","No meta data found for channel %s",pChannel->GetName());
  return kTRUE;
errorfound:
  pConn->showSqlError("readChannelMetaData");  
  return kFALSE;
}  

Bool_t HOraSlowReader::readRawData(HOraSlowChannel* channel,
                                   const Char_t* start, const Char_t* end) {
  // Reads the raw data of a channel in the specified time range
  if (!pConn->isOpen()||channel==0||start==0||end==0) return kFALSE;
  Int_t channelId=channel->getChannelId();
  if (channelId<0) {
    channelId=readChannelId(channel);
  }
  if (channelId<=0) return kFALSE;
  TString channelType=channel->getChannelType();
  Int_t nData=0;
  if (channelType.CompareTo("F")==0) {
    nData=readRawF(channel,start,end);
  } else if (channelType.CompareTo("I")==0) {
    nData=readRawI(channel,start,end);
  } else {
    Error("readRawData","No interface for channel type %s",channelType.Data());
    return kFALSE;
  }
  if (nData>0) {
    cout<<"Number of raw data: "<<nData<<'\n';
    return kTRUE;
  } else if (nData==0) {
    Error("readRawData","No raw data found!");
  }
  return kFALSE; 
}

Int_t HOraSlowReader::readRawF(HOraSlowChannel* channel,
                                const Char_t* start, const Char_t* end) {
  // Private funtion to reads the raw data of a channel (data type Float_t)
  // in the specified time range
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    char* tstart;
    char* tend;
    struct {
      char   ti[NMAX_SCS][20];
      int    na[NMAX_SCS];
      double va[NMAX_SCS];
      int    se[NMAX_SCS];
    } rawdata;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=channel->getChannelId();
  tstart=(Char_t*)start;
  tend=(Char_t*)end;
  TObjArray* data=0;
  Int_t nTot=0;
  Int_t nLast=0;
  TString lastTimestamp;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE rawf_cursor CURSOR FOR
           SELECT TO_CHAR(timestamp,'yyyy-mm-dd hh24:mi:ss'),
                  nanosecs, nvl(value,0.), sevr  
           FROM hades_slow.archive_data_f
           WHERE timestamp BETWEEN TO_DATE(:tstart,'yyyy-mm-dd hh24:mi:ss')
                               AND TO_DATE(:tend,'yyyy-mm-dd hh24:mi:ss')
           AND pv_id = :chid
           ORDER BY timestamp, nanosecs; */ 

  /* EXEC SQL OPEN rawf_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0008;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )400;
  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  *)tstart;
  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  *)tend;
  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  *)&chid;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH rawf_cursor INTO :rawdata; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )427;
    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  *)rawdata.ti;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)rawdata.na;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)rawdata.va;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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  *)rawdata.se;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    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;
    if (nLast>0) {
      if (data==0) data=new TObjArray(nLast);
      else data->Expand(sqlca.sqlerrd[2]);
      for (Int_t i=0;i<nLast;i++) {
        HOraSlowChanRaw* p=new HOraSlowChanRaw();
        rawdata.ti[i][19]='\0';
        p->fill(rawdata.ti[i],rawdata.na[i],rawdata.va[i],rawdata.se[i]);
        data->AddAt(p,nTot);
        nTot++;
      }
      lastTimestamp=rawdata.ti[nLast-1];
    } 
  } while (nLast==NMAX_SCS&&nTot<=20000);
  /* EXEC SQL CLOSE rawf_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )458;
  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;
}


  if (nTot>=20000) channel->setRawData(data,start,lastTimestamp.Data());
  else channel->setRawData(data,start,end);
  return nTot;
errorfound:
  pConn->showSqlError("readRawF");  
  return -1;
}  

Int_t HOraSlowReader::readRawI(HOraSlowChannel* channel,
                               const Char_t* start, const Char_t* end) {
  // Private funtion to reads the raw data of a channel (data type Int_t)
  // in the specified time range
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    char* tstart;
    char* tend;
    struct {
      char ti[NMAX_SCS][20];
      int  na[NMAX_SCS];
      int  va[NMAX_SCS];
      int  se[NMAX_SCS];
    } rawdata;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=channel->getChannelId();
  tstart=(Char_t*)start;
  tend=(Char_t*)end;
  TObjArray* data=0;
  Int_t nTot=0;
  Int_t nLast=0;
  TString lastTimestamp;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE rawi_cursor CURSOR FOR
           SELECT TO_CHAR(timestamp,'yyyy-mm-dd hh24:mi:ss'),
                  nanosecs, nvl(value,0), sevr  
           FROM hades_slow.archive_data_i
           WHERE timestamp BETWEEN TO_DATE(:tstart,'yyyy-mm-dd hh24:mi:ss')
                               AND TO_DATE(:tend,'yyyy-mm-dd hh24:mi:ss')
           AND pv_id = :chid
           ORDER BY timestamp, nanosecs; */ 

  /* EXEC SQL OPEN rawi_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0009;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )473;
  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  *)tstart;
  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  *)tend;
  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  *)&chid;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH rawi_cursor INTO :rawdata; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )500;
    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  *)rawdata.ti;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)rawdata.na;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)rawdata.va;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )sizeof(int);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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  *)rawdata.se;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    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;
    if (nLast>0) {
      if (data==0) data=new TObjArray(nLast);
      else data->Expand(sqlca.sqlerrd[2]);
      for (Int_t i=0;i<nLast;i++) {
        HOraSlowChanRaw* p=new HOraSlowChanRaw();
        rawdata.ti[i][19]='\0';
        p->fill(rawdata.ti[i],rawdata.na[i],rawdata.va[i],rawdata.se[i]);
        data->AddAt(p,nTot);
        nTot++;
      }
      lastTimestamp=rawdata.ti[nLast-1];
    } 
  } while (nLast==NMAX_SCS&&nTot<=20000);
  /* EXEC SQL CLOSE rawi_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )531;
  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;
}


  if (nTot>=20000) channel->setRawData(data,start,lastTimestamp.Data());
  else channel->setRawData(data,start,end);
  return nTot;
errorfound:
  pConn->showSqlError("readRawI");  
  return -1;
}  

//-------------------------------------------------------------------------------
//----------------------------  online  -----------------------------------------
//-------------------------------------------------------------------------------

Bool_t HOraSlowReader::readOnlineArchiverRates(HOraSlowPartition* partition) {
  // Reads the online archiver rates in the time range specified in partition
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* tstart;
    char* tend;
    struct {
      char stime[NMAX_SCS][20];
      int  nminutes[NMAX_SCS];
      int  nentries[NMAX_SCS];
    } rates;
  /* EXEC SQL END DECLARE SECTION; */ 

  tstart=(Char_t*)partition->getStartTime();
  tend=(Char_t*)partition->getEndTime();
  TObjArray* data=0;
  Int_t nTot=0;
  Int_t nLast=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE ratesol_cursor CURSOR FOR
           SELECT TO_CHAR(starttime,'yyyy-mm-dd hh24:mi:ss'),
                  interval, ndata
           FROM hades_scs.hscs_archiver_rate
           WHERE starttime >= TO_DATE(:tstart,'yyyy-mm-dd hh24:mi:ss')
             AND starttime < TO_DATE(:tend,'yyyy-mm-dd hh24:mi:ss')
           ORDER BY starttime; */ 

  /* EXEC SQL OPEN ratesol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0010;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )546;
  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  *)tstart;
  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  *)tend;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH ratesol_cursor INTO :rates; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )569;
    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  *)rates.stime;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)rates.nminutes;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)rates.nentries;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )sizeof(int);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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.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;
    if (nLast>0) {
      if (data==0) data=new TObjArray(nLast);
      else data->Expand(sqlca.sqlerrd[2]);
      for (Int_t i=0;i<nLast;i++) {
        rates.stime[i][19]='\0';
        Int_t v=(Int_t)(rates.nentries[i]/rates.nminutes[i]);
        HOraSlowArchRateObj* p=new HOraSlowArchRateObj(rates.stime[i],v);
        data->AddAt(p,nTot);
        nTot++;
      }
    } 
  } while (nLast==NMAX_SCS&&nTot<=100000);
  /* EXEC SQL CLOSE ratesol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )596;
  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;
}


  partition->setRates(data);
  return kTRUE;
errorfound:
  pConn->showSqlError("readOnlineArchiverRates");  
  return kFALSE;
}

Bool_t HOraSlowReader::readOnlineRunPeriods(HOraSlowPartition* partition) {
  // Reads the run periods in the online partition
  TString start=partition->getStartTime();
  TString end=partition->getEndTime();
cout<<partition->getStartTime()<<"  "<<partition->getEndTime()<<endl;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* pstart;
    char* pend;
    int   nruns;
    int   minid;
    int   maxid;
    short nruns_Ind;
    short minid_Ind;
    short maxid_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  pstart=(Char_t*)start.Data();
  pend=(Char_t*)end.Data();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL SELECT count(1), min(id), max(id)
           INTO :nruns:nruns_Ind, :minid:minid_Ind, :maxid:maxid_Ind
           FROM hades_scs.hscs_run_period
           WHERE starttime BETWEEN TO_DATE(:pstart,'yyyy-mm-dd hh24:mi:ss')
                 AND TO_DATE(:pend,'yyyy-mm-dd hh24:mi:ss'); */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select count(1) ,min(id) ,max(id) into :b0:b1,:b2:b3,:b4:b5\
  from hades_scs.hscs_run_period where starttime between TO_DATE(:b6,'yyyy-mm-\
dd hh24:mi:ss') and TO_DATE(:b7,'yyyy-mm-dd hh24:mi:ss')";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )611;
  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  *)&nruns;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)&nruns_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  *)&minid;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)&minid_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  *)&maxid;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         void  *)&maxid_Ind;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned int  )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqhstv[3] = (         void  *)pstart;
  sqlstm.sqhstl[3] = (unsigned int  )0;
  sqlstm.sqhsts[3] = (         int  )0;
  sqlstm.sqindv[3] = (         void  *)0;
  sqlstm.sqinds[3] = (         int  )0;
  sqlstm.sqharm[3] = (unsigned int  )0;
  sqlstm.sqadto[3] = (unsigned short )0;
  sqlstm.sqtdso[3] = (unsigned short )0;
  sqlstm.sqhstv[4] = (         void  *)pend;
  sqlstm.sqhstl[4] = (unsigned int  )0;
  sqlstm.sqhsts[4] = (         int  )0;
  sqlstm.sqindv[4] = (         void  *)0;
  sqlstm.sqinds[4] = (         int  )0;
  sqlstm.sqharm[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 == 1403) goto notfound;
  if (sqlca.sqlcode < 0) goto errorfound;
}


  if (nruns_Ind!=-1 && nruns>0) {
    TObjArray* data=partition->setNumPeriods(nruns);
    return readOnlinePeriods(data,nruns,minid,maxid);
  }
notfound:
  Error("readOnlineRunPeriods","No run summary for online partition or specified time range");
  return kFALSE;
errorfound:
  pConn->showSqlError("readOnlineRunPeriods");  
  return kFALSE;
}

Bool_t HOraSlowReader::readOnlinePeriods(TObjArray* data,Int_t nData,
                                   Int_t minPeriodId,Int_t maxPeriodId) {
  // Private function to read the run periods in the online partition
  if (!data) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int   minid;
    int   maxid;
    struct {
      int     id[NMAX_SCS];
      char    ts[NMAX_SCS][20];
      char    te[NMAX_SCS][20];
      int     rid[NMAX_SCS];
      /* varchar rname[NMAX_SCS][81]; */ 
struct { unsigned short len; unsigned char arr[82]; } rname[2000];

    } periods;
    struct {
      short id_Ind[NMAX_SCS];
      short ts_Ind[NMAX_SCS];
      short te_Ind[NMAX_SCS];
      short rid_Ind[NMAX_SCS];
      short rname_Ind[NMAX_SCS];
    } periods_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  minid=minPeriodId;
  maxid=maxPeriodId;
  Int_t nTot=0;
  Int_t nLast=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE runol_cursor CURSOR FOR
           SELECT period_id,
                  TO_CHAR(period_begin,'yyyy-mm-dd hh24:mi:ss'),
                  TO_CHAR(period_end,'yyyy-mm-dd hh24:mi:ss'),
                  run_id, filename
           FROM hades_scs.hscs_periods
           WHERE period_id BETWEEN :minid AND :maxid
           ORDER BY period_id; */ 

  /* EXEC SQL OPEN runol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0012;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )646;
  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  *)&minid;
  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  *)&maxid;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH runol_cursor INTO :periods INDICATOR :periods_Ind; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )669;
    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  *)periods.id;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)periods_Ind.id_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  *)periods.ts;
    sqlstm.sqhstl[1] = (unsigned int  )20;
    sqlstm.sqhsts[1] = (         int  )20;
    sqlstm.sqindv[1] = (         void  *)periods_Ind.ts_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  *)periods.te;
    sqlstm.sqhstl[2] = (unsigned int  )20;
    sqlstm.sqhsts[2] = (         int  )20;
    sqlstm.sqindv[2] = (         void  *)periods_Ind.te_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  *)periods.rid;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)periods_Ind.rid_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  *)periods.rname;
    sqlstm.sqhstl[4] = (unsigned int  )83;
    sqlstm.sqhsts[4] = (         int  )84;
    sqlstm.sqindv[4] = (         void  *)periods_Ind.rname_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++) {
      HOraSlowPeriod* p=new HOraSlowPeriod();
      periods.ts[i][19]='\0';
      periods.te[i][19]='\0';
      p->setPeriodId(periods.id[i]);
      p->setStartTime((Char_t*)(periods.ts[i]));
      p->setEndTime((Char_t*)(periods.te[i]));
      if (periods_Ind.rid_Ind[i]!=-1) p->setRunId(periods.rid[i]);
      if (periods_Ind.rname_Ind[i]!=-1) {
        periods.rname[i].arr[periods.rname[i].len]='\0';      
        p->setFilename((Char_t*)(periods.rname[i].arr));
      }
      data->AddAt(p,nTot);
      nTot++;
    } 
  } while (nLast==NMAX_SCS&&nTot<nData);
  /* EXEC SQL CLOSE runol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )704;
  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<<"*** Run periods read: "<<nTot<<endl;
  if (nTot==nData) return kTRUE;
  else {
    Error("readOnlinePeriods","Too few data read");
    return kFALSE;
  }
errorfound:
  pConn->showSqlError("readOnlinePeriods");  
  return kFALSE;
}

Bool_t HOraSlowReader::readOnlineChannelRunSum(HOraSlowPartition* partition,
                                                HOraSlowChannel* pChannel) {
  // Reads the summary information of an onlive archived channel
  TObjArray* periods=partition->getRunPeriods();
  if (!periods) return kFALSE; 
  Int_t lastIndex=periods->GetLast();
  if (lastIndex<0) return kFALSE;
  Int_t channelId=pChannel->getChannelId();
  if (channelId<0) {
    channelId=readOnlineChannelId(pChannel);
  }
  if (channelId<=0) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    int pmin;
    int pmax;
    struct {
      int    pid[NMAX_SCS];
      double vmean[NMAX_SCS];
      double vsigma[NMAX_SCS];
      double vmin[NMAX_SCS];
      double vmax[NMAX_SCS];
      int    nd[NMAX_SCS];
      int    vstat[NMAX_SCS];
      int    vmon[NMAX_SCS];
    } runsum;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=channelId;
  pmin=((HOraSlowPeriod*)(periods->At(0)))->getPeriodId();
  pmax=((HOraSlowPeriod*)(periods->At(lastIndex)))->getPeriodId();
  Int_t nData=lastIndex+1;
  TObjArray* data=new TObjArray(nData);
  Int_t nTot=0;
  Int_t nLast=0;
  Int_t periodId=0;
  HOraSlowPeriod* period=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE chansumol_cursor CURSOR FOR
           SELECT period_id, NVL(mean_value,-999), NVL(sigma_value,-999),
                  NVL(min_value,-999), NVL(max_value,-999),
                  num_data_rows, NVL(stat,0), NVL(mon_num_data_rows,-1)
           FROM hades_scs.channel_run_summary_view
           WHERE pv_id = :chid
           AND period_id BETWEEN :pmin AND :pmax
           ORDER BY period_id; */ 

  /* EXEC SQL OPEN chansumol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0013;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )719;
  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  *)&chid;
  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  *)&pmin;
  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.sqhstv[2] = (         void  *)&pmax;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH chansumol_cursor INTO :runsum; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )746;
    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  *)runsum.pid;
    sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[0] = (         int  )sizeof(int);
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)runsum.vmean;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[1] = (         int  )sizeof(double);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)runsum.vsigma;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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  *)runsum.vmin;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[3] = (         int  )sizeof(double);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    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  *)runsum.vmax;
    sqlstm.sqhstl[4] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[4] = (         int  )sizeof(double);
    sqlstm.sqindv[4] = (         void  *)0;
    sqlstm.sqinds[4] = (         int  )0;
    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.sqhstv[5] = (         void  *)runsum.nd;
    sqlstm.sqhstl[5] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[5] = (         int  )sizeof(int);
    sqlstm.sqindv[5] = (         void  *)0;
    sqlstm.sqinds[5] = (         int  )0;
    sqlstm.sqharm[5] = (unsigned int  )0;
    sqlstm.sqharc[5] = (unsigned int   *)0;
    sqlstm.sqadto[5] = (unsigned short )0;
    sqlstm.sqtdso[5] = (unsigned short )0;
    sqlstm.sqhstv[6] = (         void  *)runsum.vstat;
    sqlstm.sqhstl[6] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[6] = (         int  )sizeof(int);
    sqlstm.sqindv[6] = (         void  *)0;
    sqlstm.sqinds[6] = (         int  )0;
    sqlstm.sqharm[6] = (unsigned int  )0;
    sqlstm.sqharc[6] = (unsigned int   *)0;
    sqlstm.sqadto[6] = (unsigned short )0;
    sqlstm.sqtdso[6] = (unsigned short )0;
    sqlstm.sqhstv[7] = (         void  *)runsum.vmon;
    sqlstm.sqhstl[7] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[7] = (         int  )sizeof(int);
    sqlstm.sqindv[7] = (         void  *)0;
    sqlstm.sqinds[7] = (         int  )0;
    sqlstm.sqharm[7] = (unsigned int  )0;
    sqlstm.sqharc[7] = (unsigned int   *)0;
    sqlstm.sqadto[7] = (unsigned short )0;
    sqlstm.sqtdso[7] = (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++) {
      do {
        HOraSlowChanRunSum* p=new HOraSlowChanRunSum();
        period=(HOraSlowPeriod*)(periods->At(nTot));
        periodId=period->getPeriodId();
        if (periodId==runsum.pid[i]) {
          p->setPeriod(period);
          p->fill(runsum.pid[i],runsum.vmean[i],runsum.vsigma[i],
                  runsum.vmin[i],runsum.vmax[i],runsum.nd[i],
                  runsum.vstat[i],runsum.vmon[i]);
        } else {
          p->fill(periodId,-999.,0.,-999.,-999.,0,1,-1);
        }      
        data->AddAt(p,nTot);
        nTot++;
      } while (periodId!=runsum.pid[i]&&nTot<(lastIndex+1));
    } 
  } while (nLast==NMAX_SCS&&nTot<(lastIndex+1));
  /* EXEC SQL CLOSE chansumol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )793;
  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;
}


  pChannel->setRunSumData(data);
  if (nTot==nData) {
    cout<<"Run summary data for channel "<<pChannel->GetName()<<" read from Oracle\n";
    return kTRUE;
  } else {
    Error("readOnlineChannelRunSum","Too few data read");
    return kFALSE;
  }
errorfound:
  pConn->showSqlError("readOnlineChannelRunSum");  
  return kFALSE;
}  

Bool_t HOraSlowReader::readOnlineChannelMetaData(HOraSlowChannel* pChannel) {
  // Reads the meta information of an online archived channel
  if (!pConn->isOpen()||!pChannel) return kFALSE;
  Int_t channelId=pChannel->getChannelId();
  if (channelId<0) {
    channelId=readOnlineChannelId(pChannel);
  }
  if (channelId<=0) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    struct {
      double  lgraph[NMAX_SCS];
      double  hgraph[NMAX_SCS];
      double  lwarn[NMAX_SCS];
      double  hwarn[NMAX_SCS];
      double  lalarm[NMAX_SCS];
      double  halarm[NMAX_SCS];
      /* varchar un[NMAX_SCS][21]; */ 
struct { unsigned short len; unsigned char arr[22]; } un[2000];

      int     prec[NMAX_SCS];
      char    ts[NMAX_SCS][20];
    } meta;
    struct {
      short lgraph_Ind[NMAX_SCS];
      short hgraph_Ind[NMAX_SCS];
      short lwarn_Ind[NMAX_SCS];
      short hwarn_Ind[NMAX_SCS];
      short lalarm_Ind[NMAX_SCS];
      short halarm_Ind[NMAX_SCS];
      short un_Ind[NMAX_SCS];
      short prec_Ind[NMAX_SCS];
      short ts_Ind[NMAX_SCS];
    } meta_Ind;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=channelId;
  Int_t nData=0;
  Int_t maxPrec=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL SELECT lgraph_limit, hgraph_limit, lwarn_limit, hwarn_limit,
                  lalarm_limit, halarm_limit, units, precision,
                  TO_CHAR(md_starttime,'yyyy-mm-dd hh24:mi:ss')
           INTO :meta INDICATOR : meta_Ind
           FROM hades_scs.arch_meta
           WHERE pv_id = :chid
           ORDER BY md_starttime; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select lgraph_limit ,hgraph_limit ,lwarn_limit ,hwarn_limit\
 ,lalarm_limit ,halarm_limit ,units ,precision ,TO_CHAR(md_starttime,'yyyy-mm-\
dd hh24:mi:ss') into :s1:s2 ,:s3:s4 ,:s5:s6 ,:s7:s8 ,:s9:s10 ,:s11:s12 ,:s13:s\
14 ,:s15:s16 ,:s17:s18   from hades_scs.arch_meta where pv_id=:b2 order by md_\
starttime ";
  sqlstm.iters = (unsigned int  )2000;
  sqlstm.offset = (unsigned int  )808;
  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  *)meta.lgraph;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[0] = (         int  )sizeof(double);
  sqlstm.sqindv[0] = (         void  *)meta_Ind.lgraph_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  *)meta.hgraph;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[1] = (         int  )sizeof(double);
  sqlstm.sqindv[1] = (         void  *)meta_Ind.hgraph_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  *)meta.lwarn;
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[2] = (         int  )sizeof(double);
  sqlstm.sqindv[2] = (         void  *)meta_Ind.lwarn_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  *)meta.hwarn;
  sqlstm.sqhstl[3] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[3] = (         int  )sizeof(double);
  sqlstm.sqindv[3] = (         void  *)meta_Ind.hwarn_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  *)meta.lalarm;
  sqlstm.sqhstl[4] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[4] = (         int  )sizeof(double);
  sqlstm.sqindv[4] = (         void  *)meta_Ind.lalarm_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.sqhstv[5] = (         void  *)meta.halarm;
  sqlstm.sqhstl[5] = (unsigned int  )sizeof(double);
  sqlstm.sqhsts[5] = (         int  )sizeof(double);
  sqlstm.sqindv[5] = (         void  *)meta_Ind.halarm_Ind;
  sqlstm.sqinds[5] = (         int  )sizeof(short);
  sqlstm.sqharm[5] = (unsigned int  )0;
  sqlstm.sqharc[5] = (unsigned int   *)0;
  sqlstm.sqadto[5] = (unsigned short )0;
  sqlstm.sqtdso[5] = (unsigned short )0;
  sqlstm.sqhstv[6] = (         void  *)meta.un;
  sqlstm.sqhstl[6] = (unsigned int  )23;
  sqlstm.sqhsts[6] = (         int  )24;
  sqlstm.sqindv[6] = (         void  *)meta_Ind.un_Ind;
  sqlstm.sqinds[6] = (         int  )sizeof(short);
  sqlstm.sqharm[6] = (unsigned int  )0;
  sqlstm.sqharc[6] = (unsigned int   *)0;
  sqlstm.sqadto[6] = (unsigned short )0;
  sqlstm.sqtdso[6] = (unsigned short )0;
  sqlstm.sqhstv[7] = (         void  *)meta.prec;
  sqlstm.sqhstl[7] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[7] = (         int  )sizeof(int);
  sqlstm.sqindv[7] = (         void  *)meta_Ind.prec_Ind;
  sqlstm.sqinds[7] = (         int  )sizeof(short);
  sqlstm.sqharm[7] = (unsigned int  )0;
  sqlstm.sqharc[7] = (unsigned int   *)0;
  sqlstm.sqadto[7] = (unsigned short )0;
  sqlstm.sqtdso[7] = (unsigned short )0;
  sqlstm.sqhstv[8] = (         void  *)meta.ts;
  sqlstm.sqhstl[8] = (unsigned int  )20;
  sqlstm.sqhsts[8] = (         int  )20;
  sqlstm.sqindv[8] = (         void  *)meta_Ind.ts_Ind;
  sqlstm.sqinds[8] = (         int  )sizeof(short);
  sqlstm.sqharm[8] = (unsigned int  )0;
  sqlstm.sqharc[8] = (unsigned int   *)0;
  sqlstm.sqadto[8] = (unsigned short )0;
  sqlstm.sqtdso[8] = (unsigned short )0;
  sqlstm.sqhstv[9] = (         void  *)&chid;
  sqlstm.sqhstl[9] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[9] = (         int  )sizeof(int);
  sqlstm.sqindv[9] = (         void  *)0;
  sqlstm.sqinds[9] = (         int  )0;
  sqlstm.sqharm[9] = (unsigned int  )0;
  sqlstm.sqadto[9] = (unsigned short )0;
  sqlstm.sqtdso[9] = (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;
}


  nData=sqlca.sqlerrd[2];
  if (nData>0) {
    TObjArray* data=new TObjArray(nData);
    for (Int_t i=0;i<sqlca.sqlerrd[2];i++) {
      HOraSlowChanMeta* p=new HOraSlowChanMeta();
      if (meta_Ind.lgraph_Ind[i]!=-1) p->setLowGraphLimit(meta.lgraph[i]);
      if (meta_Ind.hgraph_Ind[i]!=-1) p->setHighGraphLimit(meta.hgraph[i]);
      if (meta_Ind.lwarn_Ind[i]!=-1) p->setLowWarnLimit(meta.lwarn[i]);
      if (meta_Ind.hwarn_Ind[i]!=-1) p->setHighWarnLimit(meta.hwarn[i]);
      if (meta_Ind.lalarm_Ind[i]!=-1) p->setLowAlarmLimit(meta.lalarm[i]);
      if (meta_Ind.halarm_Ind[i]!=-1) p->setHighAlarmLimit(meta.halarm[i]);
      if (meta_Ind.un_Ind[i]!=-1) {
        meta.un[i].arr[meta.un[i].len]='\0';
        p->setUnits((Char_t*)meta.un[i].arr);
      }
      if (meta_Ind.prec_Ind[i]!=-1) {
        p->setPrecision(meta.prec[i]);
        if (meta.prec[i]>maxPrec) maxPrec=meta.prec[i];
      }
      if (meta_Ind.ts_Ind[i]!=-1) {
        meta.ts[i][19]='\0';
        p->setStartTime((Char_t*)meta.ts[i]);
      }
      data->AddAt(p,i);
    }
    pChannel->setMetaData(data);
    pChannel->setMaxPrecision(maxPrec);
    cout<<"Meta data for channel "<<pChannel->GetName()<<" read from Oracle\n";
    return kTRUE;
  }
  Error("readOnlineChannelMetaData","No meta data found for channel %s",pChannel->GetName());
  return kTRUE;
errorfound:
  pConn->showSqlError("readOnlineChannelMetaData");  
  return kFALSE;
}

Int_t HOraSlowReader::readOnlineChannelId(HOraSlowChannel* pChannel){
  // Reads the channel id and data type of an online archived channel
  if (!pConn->isOpen()||!pChannel) return kFALSE;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char*   chname;
    int     chid;
    /* varchar chtype[3]; */ 
struct { unsigned short len; unsigned char arr[3]; } chtype;

  /* EXEC SQL END DECLARE SECTION; */ 

  chname=(Char_t*)pChannel->GetName();
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

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

  /* EXEC SQL SELECT pv_id, pv_type INTO :chid, :chtype
           FROM hades_scs.hscs_online_channel
           WHERE pv_name = :chname; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "select pv_id ,pv_type into :b0,:b1  from hades_scs.hscs_onl\
ine_channel where pv_name=:b2";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )863;
  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  *)&chid;
  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  *)&chtype;
  sqlstm.sqhstl[1] = (unsigned int  )5;
  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  *)chname;
  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) goto errorfound;
}


  pChannel->setChannelId(chid);
  chtype.arr[chtype.len]='\0';
  pChannel->setChannelType((Char_t*)chtype.arr);  
  return chid;
notfound:
  Warning("readChannelId","Channel %s not found",chname);
  return -1;
errorfound:
  pConn->showSqlError("readOnlineChannelId");  
  return -1;
}

Bool_t HOraSlowReader::readOnlineRawData(HOraSlowChannel* pChannel,
                                   const Char_t* start, const Char_t* end) {
  // Reads the raw data of an online archived channel in the specified time range
  if (!pConn->isOpen()||pChannel==0||start==0||end==0) return kFALSE;
  Int_t channelId=pChannel->getChannelId();
  if (channelId<0) {
    channelId=readOnlineChannelId(pChannel);
  }
  if (channelId<=0) return kFALSE;
  TString channelType=pChannel->getChannelType();
  Int_t nData=0;
  if (channelType.CompareTo("F")==0) {
    nData=readOnlineRawF(pChannel,start,end);
  } else if (channelType.CompareTo("I")==0) {
    nData=readOnlineRawI(pChannel,start,end);
  } else {
    Error("readOnlineRawData","No interface for channel type %s",channelType.Data());
    return kFALSE;
  }
  if (nData>0) {
    cout<<"Number of raw data: "<<nData<<'\n';
    return kTRUE;
  } else if (nData==0) {
    Error("readOnlineRawData","No raw data found!");
  }
  return kFALSE; 
}

Int_t HOraSlowReader::readOnlineRawF(HOraSlowChannel* pChannel,
                                     const Char_t* start, const Char_t* end) {
  // Private funtion to reads the online stored raw data of a channel
  // (data type Float_t) in the specified time range
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    char* tstart;
    char* tend;
    struct {
      char   ti[NMAX_SCS][20];
      int    na[NMAX_SCS];
      double va[NMAX_SCS];
      int    se[NMAX_SCS];
    } rawdata;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=pChannel->getChannelId();
  tstart=(Char_t*)start;
  tend=(Char_t*)end;
  TObjArray* data=0;
  Int_t nTot=0;
  Int_t nLast=0;
  TString lastTimestamp;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE rawfol_cursor CURSOR FOR
           SELECT DISTINCT TO_CHAR(timestamp,'yyyy-mm-dd hh24:mi:ss') AS ts,
                  nanosecs, NVL(value,0.), sevr
           FROM hades_scs.archive_data_f_view
           WHERE timestamp BETWEEN TO_DATE(NVL(:tstart,SYSDATE-1/24),
                                           'yyyy-mm-dd hh24:mi:ss')
                               AND TO_DATE(NVL(:tend,SYSDATE),
                                           'yyyy-mm-dd hh24:mi:ss')
           AND pv_id = :chid
           ORDER BY ts, nanosecs; */ 

  /* EXEC SQL OPEN rawfol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0016;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )890;
  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  *)tstart;
  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  *)tend;
  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  *)&chid;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH rawfol_cursor INTO :rawdata; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )917;
    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  *)rawdata.ti;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)rawdata.na;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)rawdata.va;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(double);
    sqlstm.sqhsts[2] = (         int  )sizeof(double);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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  *)rawdata.se;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    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;
    if (nLast>0) {
      if (data==0) data=new TObjArray(nLast);
      else data->Expand(sqlca.sqlerrd[2]);
      for (Int_t i=0;i<nLast;i++) {
        HOraSlowChanRaw* p=new HOraSlowChanRaw();
        rawdata.ti[i][19]='\0';
        p->fill(rawdata.ti[i],rawdata.na[i],rawdata.va[i],rawdata.se[i]);
        data->AddAt(p,nTot);
        nTot++;
      }
      lastTimestamp=rawdata.ti[nLast-1];
    } 
  } while (nLast==NMAX_SCS&&nTot<=20000);
  /* EXEC SQL CLOSE rawfol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )948;
  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;
}


  if (nTot>=20000) pChannel->setRawData(data,start,lastTimestamp.Data());
  else pChannel->setRawData(data,start,end);
  return nTot;
errorfound:
  pConn->showSqlError("readOnlineRawF");  
  return -1;
}  

Int_t HOraSlowReader::readOnlineRawI(HOraSlowChannel* pChannel,
                                const Char_t* start, const Char_t* end) {
  // Private funtion to reads the online stored raw data of a channel
  // (data type Int_t) in the specified time range
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    int chid;
    char* tstart;
    char* tend;
    struct {
      char ti[NMAX_SCS][20];
      int  na[NMAX_SCS];
      int  va[NMAX_SCS];
      int  se[NMAX_SCS];
    } rawdata;
  /* EXEC SQL END DECLARE SECTION; */ 

  chid=pChannel->getChannelId();
  tstart=(Char_t*)start;
  tend=(Char_t*)end;
  TObjArray* data=0;
  Int_t nTot=0;
  Int_t nLast=0;
  TString lastTimestamp;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND continue; */ 

  /* EXEC SQL DECLARE rawiol_cursor CURSOR FOR
           SELECT DISTINCT TO_CHAR(timestamp,'yyyy-mm-dd hh24:mi:ss') AS ts,
                  nanosecs, NVL(value,0), sevr
           FROM hades_scs.archive_data_i_view
           WHERE timestamp BETWEEN TO_DATE(:tstart,'yyyy-mm-dd hh24:mi:ss')
                               AND TO_DATE(:tend,'yyyy-mm-dd hh24:mi:ss')
           AND pv_id = :chid
           ORDER BY ts, nanosecs; */ 

  /* EXEC SQL OPEN rawiol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = sq0017;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )963;
  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  *)tstart;
  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  *)tend;
  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  *)&chid;
  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 < 0) goto errorfound;
}


  do {  
    /* EXEC SQL FETCH rawiol_cursor INTO :rawdata; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 14;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )2000;
    sqlstm.offset = (unsigned int  )990;
    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  *)rawdata.ti;
    sqlstm.sqhstl[0] = (unsigned int  )20;
    sqlstm.sqhsts[0] = (         int  )20;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    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  *)rawdata.na;
    sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[1] = (         int  )sizeof(int);
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    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  *)rawdata.va;
    sqlstm.sqhstl[2] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[2] = (         int  )sizeof(int);
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    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  *)rawdata.se;
    sqlstm.sqhstl[3] = (unsigned int  )sizeof(int);
    sqlstm.sqhsts[3] = (         int  )sizeof(int);
    sqlstm.sqindv[3] = (         void  *)0;
    sqlstm.sqinds[3] = (         int  )0;
    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;
    if (nLast>0) {
      if (data==0) data=new TObjArray(nLast);
      else data->Expand(sqlca.sqlerrd[2]);
      for (Int_t i=0;i<nLast;i++) {
        HOraSlowChanRaw* p=new HOraSlowChanRaw();
        rawdata.ti[i][19]='\0';
        p->fill(rawdata.ti[i],rawdata.na[i],rawdata.va[i],rawdata.se[i]);
        data->AddAt(p,nTot);
        nTot++;
      }
      lastTimestamp=rawdata.ti[nLast-1];
    } 
  } while (nLast==NMAX_SCS&&nTot<=20000);
  /* EXEC SQL CLOSE rawiol_cursor; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 14;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )1021;
  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;
}


  if (nTot>=20000) pChannel->setRawData(data,start,lastTimestamp.Data());
  else pChannel->setRawData(data,start,end);
  return nTot;
errorfound:
  pConn->showSqlError("readOnlineRawI");  
  return -1;
}  

Last change: Sat May 22 13:05:52 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.