#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 */
typedef void * sql_context;
typedef void * SQL_CONTEXT;
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,
};
struct sqltdss
{
unsigned int tdsvsn;
unsigned short tdsnum;
unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
1,
0,
};
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 long 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;
unsigned char **sqphsv;
unsigned long *sqphsl;
int *sqphss;
short **sqpind;
int *sqpins;
unsigned long *sqparm;
unsigned long **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;
unsigned int sqlpfmem;
unsigned char *sqhstv[6];
unsigned long sqhstl[6];
int sqhsts[6];
short *sqindv[6];
int sqinds[6];
unsigned long sqharm[6];
unsigned long *sqharc[6];
unsigned short sqadto[6];
unsigned short sqtdso[6];
} sqlstm = {13,6};
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 *);
}
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL = 535;
extern "C" { void sqliem(unsigned char *, signed int *); }
static const char *sq0003 =
"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_slow2.hscs_peri\
ods where (partition=:b0 and period_id between :b1 and :b2) order by period_id\
";
typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;
static const short sqlcud0[] =
{13,4130,1,0,0,
5,0,0,1,181,0,4,86,0,0,3,1,0,1,0,2,97,0,0,2,97,0,0,1,97,0,0,
32,0,0,2,220,0,4,132,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,
71,0,0,3,244,0,9,189,0,0,3,3,0,1,0,1,97,0,0,1,3,0,0,1,3,0,0,
98,0,0,3,0,0,13,191,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,
133,0,0,3,0,0,15,209,0,0,0,0,0,1,0,
};
#include "horaslowreader.h"
#include "horaslowmanager.h"
#include "hdbconn.h"
#include "horaslowpartition.h"
#include "horaslowperiod.h"
#include <stdio.h>
#include <stdlib.h>
#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern
#include <oraca.h>
#include <sqlca.h>
ClassImp(HOraSlowReader)
HOraSlowReader::HOraSlowReader() {
pPartition=0;
pConn=new HDbConn();
}
HOraSlowReader::~HOraSlowReader() {
if (pPartition) {
delete pPartition;
pPartition=0;
}
if (pConn) {
delete pConn;
pConn=0;
}
}
Bool_t HOraSlowReader::open() {
if (pConn->isOpen()) return kTRUE;
return pConn->connectDb(gHOraSlowManager->getOraUser(),gHOraSlowManager->getDbName());
}
void HOraSlowReader::close() {
pConn->closeDbConn();
}
Bool_t HOraSlowReader::isOpen() {
return pConn->isOpen();
}
void HOraSlowReader::print() {
if (pConn->isOpen())
cout<<"Connected to Oracle-Database db-hades\n";
else cout<<"*** no connection to Oracle established ***\n";
}
Bool_t HOraSlowReader::readPartition() {
if (!pConn->isOpen()||!pPartition) return kFALSE;
TString startTime(pPartition->getStartTime());
TString endTime(pPartition->getEndTime());
if (startTime.Length()!=0 && endTime.Length()!=0) return kTRUE;
char* pname;
char ts[20];
char te[20];
pname=(Char_t*)pPartition->GetName();
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 13;
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_slow2.a\
rchive_partitionmgnt where partitionname=:b2";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )5;
sqlstm.selerr = (unsigned short)1;
sqlstm.sqlpfmem = (unsigned int )0;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)ts;
sqlstm.sqhstl[0] = (unsigned long )20;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)te;
sqlstm.sqhstl[1] = (unsigned long )20;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( short *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)pname;
sqlstm.sqhstl[2] = (unsigned long )0;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( short *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )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 (startTime.Length()==0) startTime=ts;
if (endTime.Length()==0) endTime=te;
pPartition->setTimeRange(startTime,endTime);
return kTRUE;
notfound:
Error("readPartition","Partition %s not found",pPartition->GetName());
return kFALSE;
errorfound:
pConn->showSqlError("readPartition");
return kFALSE;
}
Bool_t HOraSlowReader::readRunPeriods() {
if (!pConn->isOpen()||!pPartition) return kFALSE;
TString start=pPartition->getStartTime();
TString end=pPartition->getEndTime();
if (start.IsNull()||end.IsNull()) {
readPartition();
start=pPartition->getStartTime();
end=pPartition->getEndTime();
}
if (start.IsNull()||end.IsNull()) return kFALSE;
char* pname;
char* pstart;
char* pend;
int nruns;
int minid;
int maxid;
short nruns_Ind;
short minid_Ind;
short maxid_Ind;
pname=(Char_t*)pPartition->GetName();
pstart=(Char_t*)start.Data();
pend=(Char_t*)end.Data();
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 13;
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_slow2.hscs_run_period where (partition_name=:b6 and starttime bet\
ween TO_DATE(:b7,'yyyy-mm-dd hh24:mi:ss') and TO_DATE(:b8,'yyyy-mm-dd hh24:mi:\
ss'))";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )32;
sqlstm.selerr = (unsigned short)1;
sqlstm.sqlpfmem = (unsigned int )0;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)&nruns;
sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)&nruns_Ind;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)&minid;
sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( short *)&minid_Ind;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)&maxid;
sqlstm.sqhstl[2] = (unsigned long )sizeof(int);
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( short *)&maxid_Ind;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = (unsigned char *)pname;
sqlstm.sqhstl[3] = (unsigned long )0;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( short *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned long )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = (unsigned char *)pstart;
sqlstm.sqhstl[4] = (unsigned long )0;
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( short *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned long )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = (unsigned char *)pend;
sqlstm.sqhstl[5] = (unsigned long )0;
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( short *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned long )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=pPartition->setNumPeriods(nruns);
return readPeriods(pname,data,nruns,minid,maxid);
}
notfound:
Error("readRunPeriods","No run summary for partition %s or specified time range",
pPartition->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) {
if (!data) return kFALSE;
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];
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;
pname=partitionName;
minid=minPeriodId;
maxid=maxPeriodId;
Int_t nTot=0;
Int_t nLast=0;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 6;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0003;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )71;
sqlstm.selerr = (unsigned short)1;
sqlstm.sqlpfmem = (unsigned int )0;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)pname;
sqlstm.sqhstl[0] = (unsigned long )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)&minid;
sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( short *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)&maxid;
sqlstm.sqhstl[2] = (unsigned long )sizeof(int);
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( short *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )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 {
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 6;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )2000;
sqlstm.offset = (unsigned int )98;
sqlstm.selerr = (unsigned short)1;
sqlstm.sqlpfmem = (unsigned int )0;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = (unsigned char *)periods.id;
sqlstm.sqhstl[0] = (unsigned long )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( short *)periods_Ind.id_Ind;
sqlstm.sqinds[0] = ( int )sizeof(short);
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqharc[0] = (unsigned long *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)periods.ts;
sqlstm.sqhstl[1] = (unsigned long )20;
sqlstm.sqhsts[1] = ( int )20;
sqlstm.sqindv[1] = ( short *)periods_Ind.ts_Ind;
sqlstm.sqinds[1] = ( int )sizeof(short);
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqharc[1] = (unsigned long *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)periods.te;
sqlstm.sqhstl[2] = (unsigned long )20;
sqlstm.sqhsts[2] = ( int )20;
sqlstm.sqindv[2] = ( short *)periods_Ind.te_Ind;
sqlstm.sqinds[2] = ( int )sizeof(short);
sqlstm.sqharm[2] = (unsigned long )0;
sqlstm.sqharc[2] = (unsigned long *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = (unsigned char *)periods.rid;
sqlstm.sqhstl[3] = (unsigned long )sizeof(int);
sqlstm.sqhsts[3] = ( int )sizeof(int);
sqlstm.sqindv[3] = ( short *)periods_Ind.rid_Ind;
sqlstm.sqinds[3] = ( int )sizeof(short);
sqlstm.sqharm[3] = (unsigned long )0;
sqlstm.sqharc[3] = (unsigned long *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = (unsigned char *)periods.rname;
sqlstm.sqhstl[4] = (unsigned long )83;
sqlstm.sqhsts[4] = ( int )84;
sqlstm.sqindv[4] = ( short *)periods_Ind.rname_Ind;
sqlstm.sqinds[4] = ( int )sizeof(short);
sqlstm.sqharm[4] = (unsigned long )0;
sqlstm.sqharc[4] = (unsigned long *)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);
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 6;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )133;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
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;
}