+2003-08-28 Benjamin Sailer <Benjamin.Sailer@ph.tum.de>
+
+ * Removed threads and dynamic PV allocation again. enlarged MAX_NUM_PV
+ (in pas).
+
+ * added asynchronous cache table update (oraParam.pc)
+
2003-07-24 Benjamin Sailer <Benjamin.Sailer@ph.tum.de>
* Changed pas to fulfill Param_store*() asynchronously, returning
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.15 2003-07-24 11:17:12 sailer Exp $";
-#define _POSIX_C_SOURCE 199506L
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.16 2003-08-28 12:08:24 sailer Exp $";
+#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
#include <config.h>
extern "C" {
#include <unistd.h>
- #include <pthread.h>
#include <string.h>
-
- #include "storeThread.h"
}
#include "paramIntRecord.h"
caStatus ParamIntRecord::write(const casCtx &ctx, gdd &value)
#endif
{
- pthread_t threadS, *thread = &threadS;
aitUint32 intValue;
- ParamStoreIntArg *arg;
value.getConvert(intValue);
- arg = new ParamStoreIntArg;
-
- arg->param = param;
- arg->name = name;
- arg->idx = idx;
- arg->value = (unsigned long int) intValue;
- pthread_create(thread, NULL, storeIntThread, arg);
- pthread_detach(*thread);
+
+ Param_storeInt(param, name, idx, (unsigned long int) intValue);
return S_cas_success;
}
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramRecordSet.cc,v 1.12 2003-07-23 15:37:04 sailer Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramRecordSet.cc,v 1.13 2003-08-28 12:08:24 sailer Exp $";
#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
{
numParamSrc = 0;
numPv = 0;
- pv = NULL;
}
ParamRecordSet::~ParamRecordSet()
{
- Record *current;
- Record *next;
- for (current = pv; current != NULL; current = next) {
- next = current->getNext();
- delete current;
- }
-
for (int i = 0 ; i < numParamSrc ; i++) {
desParam(param[i]);
delete param[i];
}
+ for (int i = 0 ; i < numPv ; i++) {
+ delete pvs[i];
+ }
}
Param *ParamRecordSet::pParam(const char *setup)
if (strcmp(param[i]->setup, setup) == 0) {
return param[i];
}
+ } else {
+ if (setup == NULL) {
+ return param[i];
+ }
}
}
} else {
pvExistReturn ParamRecordSet::pvExistTest(const casCtx &ctx, const char *pPVName)
{
- Record *current;
char *setup;
char buf1[PARAM_MAX_NAME_LEN];
char buf2[PARAM_MAX_NAME_LEN];
strcpy(buf2, "");
strcpy(buf3, "");
- for (current = pv; current != NULL; current = current->getNext()) {
- if(strcmp(pPVName, current->getPVName()) == 0) {
+ for (int i = 0 ; i < numPv ; i++) {
+ if(strcmp(pPVName, pvs[i]->getPVName()) == 0) {
return pverExistsHere;
}
}
return pverDoesNotExistHere;
}
-int ParamRecordSet::expireParams(int sec)
-{
- int now;
- int retVal = 0;
- Record *previous = NULL;
- Record *current = pv;
- Record *next;
-
- now = (int) time(NULL);
-
- while (current != NULL) {
- next = current->getNext();
- if (now - sec > current->getLastAccessTime()) {
- syslog(LOG_DEBUG, "Removing param %s", current->getPVName());
- if (previous != NULL) {
- previous->setNext(current->getNext());
- } else {
- pv = current->getNext();
- }
- delete current;
- retVal++;
- numPv--;
- } else {
- previous = current;
- }
- current = next;
- }
-
- if (retVal) {
- syslog(LOG_INFO, "%d parameter removed, %d parameter left", retVal, numPv);
- }
- return retVal;
-}
-
#if EPICS_RELEASE >= 314
pvAttachReturn ParamRecordSet::pvAttach(const casCtx &ctx, const char *pPVName)
#else
pvCreateReturn ParamRecordSet::createPV(const casCtx &ctx, const char *pPVName)
#endif
{
- Record *previous;
- Record *current;
char *setup;
char type;
char buf1[PARAM_MAX_NAME_LEN];
pvCreateReturn retVal(S_casApp_pvNotFound);
#endif
- for (current = pv, previous = NULL;
- current != NULL && (strcmp(pPVName, current->getPVName()) != 0);
- previous = current, current = current->getNext()) {
+ for (int i = 0 ; i < numPv ; i++) {
+ if(strcmp(pPVName, pvs[i]->getPVName()) == 0) {
+ retVal = pvs[i];
+ return retVal;
+ }
}
- if (current != NULL) {
- retVal = current;
- current->access();
- } else {
- if(strncmp(pPVName, "HAD:P", strlen("HAD:P")) == 0) {
- if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &type, buf1, buf2, buf3) != 4) {
- setup = NULL;
- } else {
- setup = buf1;
- for (unsigned int i = 0 ; i < strlen(setup) ; i++) {
- setup[i] = tolower(setup[i]);
- }
+ if(strncmp(pPVName, "HAD:P", strlen("HAD:P")) == 0) {
+ if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &type, buf1, buf2, buf3) != 4) {
+ setup = NULL;
+ } else {
+ setup = buf1;
+ for (unsigned int i = 0 ; i < strlen(setup) ; i++) {
+ setup[i] = tolower(setup[i]);
}
- if(pParam(setup) != NULL) {
- switch (type) {
- case('I'):
- current = new ParamIntRecord(*this, pParam(setup), pPVName, "Integer");
- syslog(LOG_DEBUG, "Created Integer Record %s", pPVName);
- break;
- case('S'):
- current = new ParamStringRecord(*this, pParam(setup), pPVName, "String");
- syslog(LOG_DEBUG, "Created String Record %s", pPVName);
- break;
- case('F'):
- current = new ParamFilenameRecord(*this, pParam(setup), pPVName, "Filename");
- syslog(LOG_DEBUG, "Created Filename Record %s", pPVName);
- break;
- case('B'):
- current = new ParamBlobRecord(*this, pParam(setup), pPVName, "Binary Large OBject");
- syslog(LOG_DEBUG, "Created Blob Record %s", pPVName);
- break;
- default:
- return S_casApp_pvNotFound;
- break;
- }
- numPv++;
- if (previous != NULL) {
- previous->setNext(current);
- } else {
- pv = current;
- }
- current->access();
- retVal = current;
- } else {
- retVal = S_casApp_pvNotFound;
+ }
+ if(pParam(setup) != NULL) {
+ switch (type) {
+ case('I'):
+ retVal = (pvs[numPv++] = new ParamIntRecord(*this, pParam(setup), pPVName, "Integer"));
+ syslog(LOG_DEBUG, "Created Integer Record %s", pPVName);
+ break;
+ case('S'):
+ retVal = (pvs[numPv++] = new ParamStringRecord(*this, pParam(setup), pPVName, "String"));
+ syslog(LOG_DEBUG, "Created String Record %s", pPVName);
+ break;
+ case('F'):
+ retVal = (pvs[numPv++] = new ParamFilenameRecord(*this, pParam(setup), pPVName, "Filename"));
+ syslog(LOG_DEBUG, "Created Filename Record %s", pPVName);
+ break;
+ case('B'):
+ retVal = (pvs[numPv++] = new ParamBlobRecord(*this, pParam(setup), pPVName, "Binary Large OBject"));
+ syslog(LOG_DEBUG, "Created Blob Record %s", pPVName);
+ break;
}
+ return retVal;
+ } else {
+ return S_casApp_pvNotFound;
}
}
- return retVal;
+ return S_casApp_pvNotFound;
}
#include <casdef.h>
extern "C" {
- #include <allParam.h>
+#include <allParam.h>
}
-
#include "record.h"
-
#define MAX_PARAM_SRC 128
-
-class ParamRecordSet : public caServer {
+#define MAX_NUM_PV (1024 * 64)
+class ParamRecordSet:public caServer {
private:
- int numPv;
- Record *pv;
+ int numPv;
+ Record *pvs[MAX_NUM_PV];
- int numParamSrc;
- Param *param[MAX_PARAM_SRC];
+ int numParamSrc;
+ Param *param[MAX_PARAM_SRC];
Param *pParam(const char *);
public:
- ParamRecordSet(unsigned int);
+ ParamRecordSet(unsigned int);
~ParamRecordSet();
- pvExistReturn pvExistTest(const casCtx &ctx, const char *pPVName);
- int expireParams(int sec);
+ pvExistReturn pvExistTest(const casCtx &, const char *);
#if EPICS_RELEASE >= 314
- pvAttachReturn pvAttach(const casCtx &ctx, const char *pPVName);
+ pvAttachReturn pvAttach(const casCtx & ctx, const char *pPVName);
#else
- pvCreateReturn createPV(const casCtx &ctx, const char *pPVName);
+ pvCreateReturn createPV(const casCtx & ctx, const char *pPVName);
#endif
};
-#endif /* !PARAMRECORDSET_H */
-
+#endif /* !PARAMRECORDSET_H */
static const char rcsId[] =
- "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.11 2003-07-23 15:37:04 sailer Exp $";
+ "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.12 2003-08-28 12:08:24 sailer Exp $";
#define _POSIX_C_SOURCE 199506L
#define SYSLOG_NAMES
#include "paramRecordSet.h"
-#define MAX_NUM_PV 1024
-
-#define SCAN_INTERVAL 100.0
-#define EXPIRE_INTERVAL 300
-
+#define FD_DELAY 1000.0
#ifndef NDEBUG
static void profSignalHandler(int sig)
{
syslog(LOG_ERR, "Cannot allocate memory for the RecordSet. Exiting.");
exit(EXIT_FAILURE);
}
- syslog(LOG_INFO, "Parameter Server ready");
cas->setDebugLevel(0u);
+ syslog(LOG_INFO, "%s: Parameter Server ready", argv[0]);
while (aitTrue) {
- fileDescriptorManager.process(SCAN_INTERVAL);
- cas->expireParams(EXPIRE_INTERVAL);
+ fileDescriptorManager.process(FD_DELAY);
}
delete cas;
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.14 2003-07-24 11:17:12 sailer Exp $";
-#define _POSIX_C_SOURCE 199506L
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.15 2003-08-28 12:08:24 sailer Exp $";
+#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
#include <config.h>
extern "C" {
#include <unistd.h>
- #include <pthread.h>
#include <string.h>
-
- #include "storeThread.h"
}
#include "paramStringRecord.h"
caStatus ParamStringRecord::write(const casCtx &ctx, gdd &value)
#endif
{
- pthread_t threadS, *thread = &threadS;
aitString stringValue;
- ParamStoreStringArg *arg;
value.getConvert(stringValue);
- arg = new ParamStoreStringArg;
-
- arg->param = param;
- arg->name = name;
- arg->idx = idx;
- arg->value = (const char *) stringValue;
- pthread_create(thread, NULL, storeStringThread, arg);
- pthread_detach(*thread);
+ Param_storeString(param, name, idx, (const char *) stringValue);
return S_cas_success;
}
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.8 2003-07-23 15:37:04 sailer Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.9 2003-08-28 12:08:24 sailer Exp $";
#define _POSIX_C_SOURCE 199506L
#if HAVE_CONFIG_H
char buf2[PARAM_MAX_NAME_LEN];
char buf3[PARAM_MAX_NAME_LEN];
- myPNext = NULL;
strcpy (pPVName, n);
interest = aitFalse;
interest = aitFalse;
-#if 0
recordScanTimer = new scanTimer(*this);
#if EPICS_RELEASE >= 314
timer.start(*recordScanTimer, 100.0);
#endif
-#endif
}
Record::~Record()
#if HAVE_CONFIG_H
#include <config.h>
-#endif /* HAVE_CONFIG_H */
+#endif /* HAVE_CONFIG_H */
#include <casdef.h>
#if EPICS_RELEASE >= 314
#include <gddAppFuncTable.h>
extern "C" {
- #include <time.h>
-
- #include <allParam.h>
+#include <allParam.h>
}
-
#include "arrayDest.h"
-
class scanTimer;
-class Record : public casPV {
+class Record:public casPV {
protected:
const Param *param;
const char *units;
aitEnum type;
gdd *val;
#if EPICS_RELEASE >= 314
- epicsTimer &timer;
+ epicsTimer & timer;
#endif
-#if 0
scanTimer *recordScanTimer;
-#endif
aitBool interest;
epicsAlarmCondition alarmStatus;
epicsAlarmSeverity alarmSeverity;
- Record *myPNext;
- int lastAccessTime;
ArrayDestructor *pDest;
char pPVName[PARAM_MAX_VALUE_LEN];
char idx[PARAM_MAX_VALUE_LEN];
public:
- Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t);
+ Record(caServer & cas, const Param * p, const char *n, const char *u, aitEnum t);
~Record();
- inline void setNext(Record *next) { myPNext = next; }
- inline Record *getNext() { return myPNext; }
- inline void access() { time_t t; t = time(NULL); lastAccessTime = (int) t; }
- inline int getLastAccessTime() { return lastAccessTime; }
-
void destroy();
caStatus interestRegister();
void interestDelete();
const char *getName() const;
aitEnum bestExternalType() const;
- inline const char *getPVName() { return pPVName; }
-
- gddAppFuncTableStatus readUnits(gdd &);
+ inline const char *getPVName() {
+ return pPVName;
+ } gddAppFuncTableStatus readUnits(gdd &);
gddAppFuncTableStatus readStatus(gdd &);
gddAppFuncTableStatus readSeverity(gdd &);
gddAppFuncTableStatus readSeconds(gdd &);
};
#if EPICS_RELEASE >= 314
-class scanTimer : public epicsTimerNotify {
+class scanTimer:public epicsTimerNotify {
private:
- Record &procVar;
+ Record & procVar;
public:
scanTimer(Record &);
- expireStatus expire(const epicsTime &t);
+ expireStatus expire(const epicsTime & t);
};
#else
-class scanTimer : public osiTimer {
+class scanTimer:public osiTimer {
private:
- Record &procVar;
+ Record & procVar;
public:
scanTimer(Record &);
void expire();
};
#endif
-#endif /* !RECORD_H */
-
+#endif /* !RECORD_H */
+++ /dev/null
-static const char rcsId[] = "$Header:";
-
-#define _POSIX_C_SOURCE 199506L
-
-#include <unistd.h>
-
-#include <stdlib.h>
-
-#include "storeThread.h"
-
-void *storeIntThread(void *a)
-{
- ParamStoreIntArg *arg;
-
- arg = a;
- Param_storeInt(arg->param, arg->name, arg->idx, arg->value);
-
- free(arg);
- return NULL;
-}
-
-void *storeStringThread(void *a)
-{
- ParamStoreStringArg *arg;
-
- arg = a;
- Param_storeString(arg->param, arg->name, arg->idx, arg->value);
-
- free(arg);
- return NULL;
-}
-
+++ /dev/null
-#ifndef STORETHREAD_H
-#define STORETHREAD_H
-
-#include <allParam.h>
-
-typedef struct ParamStoreIntArgS {
- const Param *param;
- const char *name;
- const char *idx;
- unsigned long int value;
-} ParamStoreIntArg;
-
-typedef struct ParamStoreStringArgS {
- const Param *param;
- const char *name;
- const char *idx;
- const char *value;
-} ParamStoreStringArg;
-
-void *storeIntThread(void *a);
-void *storeStringThread(void *a);
-
-#endif /* STORETHREAD_H */
-
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ora/oraParam.pc,v 1.37 2003-07-24 11:43:39 sailer Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ora/oraParam.pc,v 1.38 2003-08-28 12:08:07 sailer Exp $";
#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
my->setup = NULL;
}
my->specParam = malloc(sizeof(OraParam));
- ((OraParam *) (my->specParam))->user = "daq_oper@db-hades.oracle.gsi.de";
+ ((OraParam *) (my->specParam))->user = "daq_oper@db-hades.gsi.de";
((OraParam *) (my->specParam))->passwd = "daqall";
#ifdef PTHREADS
int i;
EXEC SQL BEGIN DECLARE SECTION;
+ int l_jobid;
+ int l_take_cache;
int l_valid;
int l_locked;
char sqlsetup[PARAM_MAX_NAME_LEN];
unsigned long int value[PARAM_MAX_ARRAY_LEN];
EXEC SQL END DECLARE SECTION;
+ printf("Entered Param_getIntArray\n");
if (my->setup != NULL) {
for(i = 0 ; i <= strlen(my->setup) ; i++) {
sqlsetup[i] = tolower((my->setup)[i]);
EXEC SQL WHENEVER SQLERROR DO Param_rollback(my);
if (my->setup != NULL) {
+ EXEC SQL SELECT
+ valid, locked
+ INTO
+ :l_valid, :l_locked
+ FROM
+ daq.cache_table_valid
+ WHERE
+ cache_table = 'param_int_cache'
+ AND
+ daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup )
+ ;
+ printf("l_valid: %d, l_locked: %d\n", l_valid, l_locked);
EXEC SQL EXECUTE
BEGIN
- SELECT
- valid, locked
- INTO
- :l_valid, :l_locked
- FROM
- daq.cache_table_valid
- WHERE
- cache_table = 'param_int_cache'
- AND
- daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup );
IF
- :l_valid = 0 AND :l_locked = 0
+ :l_valid != 1 AND :l_locked = 0
THEN
- daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' );
+ IF
+ :l_valid = 0
+ THEN
+ UPDATE
+ daq.cache_table_valid
+ SET
+ valid = -1
+ WHERE
+ cache_table = 'param_int_cache'
+ AND
+ daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup )
+ ;
+ COMMIT;
+ DBMS_JOB.SUBMIT (
+ :l_jobid,
+ 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'', 6 );'
+ );
+ END IF;
+ :l_take_cache := 0;
+ ELSE
+ :l_take_cache := 1;
END IF;
END;
END-EXEC;
+ printf("do %stake cache\n", l_take_cache ? "" : "not ");
+ if (l_take_cache) {
EXEC SQL SELECT
value
INTO
idx = :sqlidx
ORDER BY
seq_num;
- } else {
- EXEC SQL EXECUTE
- BEGIN
- SELECT
- valid, locked
+ } else {
+ EXEC SQL SELECT
+ value
INTO
- :l_valid, :l_locked
+ :value
FROM
- daq.cache_table_valid
+ daq.param_int
WHERE
- cache_table = 'param_int_cache'
+ setup = :sqlsetup
AND
- daq_setup_id IS NULL;
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ }
+ } else {
+ EXEC SQL SELECT
+ valid, locked
+ INTO
+ :l_valid, :l_locked
+ FROM
+ daq.cache_table_valid
+ WHERE
+ cache_table = 'param_int_cache'
+ AND
+ daq_setup_id IS NULL
+ ;
+ EXEC SQL EXECUTE
+ BEGIN
IF
- :l_valid = 0 AND :l_locked = 0
+ :l_valid != 1 AND :l_locked = 0
THEN
- daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' );
+ IF
+ :l_valid = 0
+ THEN
+ UPDATE
+ daq.cache_table_valid
+ SET
+ valid = -1
+ WHERE
+ cache_table = 'param_int_cache'
+ ;
+ COMMIT;
+ DBMS_JOB.SUBMIT (
+ :l_jobid,
+ 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'' );'
+ );
+ END IF;
+ :l_take_cache := 0;
+ ELSE
+ :l_take_cache := 1;
END IF;
END;
END-EXEC;
+ printf("do %stake cache\n", l_take_cache ? "" : "not ");
+ if (l_take_cache) {
EXEC SQL SELECT
value
INTO
idx = :sqlidx
ORDER BY
seq_num;
+ } else {
+ EXEC SQL SELECT
+ value
+ INTO
+ :value
+ FROM
+ daq.param_int
+ WHERE
+ setup IS NULL
+ AND
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ }
}
*rows = sqlca.sqlerrd[2];
int i;
EXEC SQL BEGIN DECLARE SECTION;
+ int l_jobid;
+ int l_take_cache;
int l_valid;
int l_locked;
char sqlsetup[PARAM_MAX_NAME_LEN];
char value[PARAM_MAX_ARRAY_LEN][PARAM_MAX_VALUE_LEN];
EXEC SQL END DECLARE SECTION;
+ printf("Entered Param_getStringArray\n");
if (my->setup != NULL) {
for(i = 0 ; i <= strlen(my->setup) ; i++) {
sqlsetup[i] = tolower((my->setup)[i]);
EXEC SQL WHENEVER SQLERROR DO Param_rollback(my);
if (my->setup != NULL) {
+ EXEC SQL SELECT
+ valid, locked
+ INTO
+ :l_valid, :l_locked
+ FROM
+ daq.cache_table_valid
+ WHERE
+ cache_table = 'param_string_cache'
+ AND
+ daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup )
+ ;
+ printf("l_valid: %d, l_locked: %d\n", l_valid, l_locked);
EXEC SQL EXECUTE
BEGIN
- SELECT
- valid, locked
- INTO
- :l_valid, :l_locked
- FROM
- daq.cache_table_valid
- WHERE
- cache_table = 'param_string_cache'
- AND
- daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup );
IF
- :l_valid = 0 AND :l_locked = 0
+ :l_valid != 1 AND :l_locked = 0
THEN
- daq.daq_oper_interface.validate_cache_table ( 'param_string_cache' );
+ IF
+ :l_valid = 0
+ THEN
+ UPDATE
+ daq.cache_table_valid
+ SET
+ valid = -1
+ WHERE
+ cache_table = 'param_string_cache'
+ AND
+ daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup )
+ ;
+ COMMIT;
+ DBMS_JOB.SUBMIT (
+ :l_jobid,
+ 'daq.daq_oper_interface.validate_cache_table ( ''param_string_cache'', 6 );'
+ );
+ END IF;
+ :l_take_cache := 0;
+ ELSE
+ :l_take_cache := 1;
END IF;
END;
END-EXEC;
+ printf("do %stake cache\n", l_take_cache ? "" : "not ");
+ if (l_take_cache) {
EXEC SQL SELECT
value
INTO
idx = :sqlidx
ORDER BY
seq_num;
- } else {
- EXEC SQL EXECUTE
- BEGIN
- SELECT
- valid, locked
+ } else {
+ EXEC SQL SELECT
+ value
INTO
- :l_valid, :l_locked
+ :value
FROM
- daq.cache_table_valid
+ daq.param_string
WHERE
- cache_table = 'param_string_cache'
+ setup = :sqlsetup
+ AND
+ name = :sqlname
AND
- daq_setup_id IS NULL;
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ }
+ } else {
+ EXEC SQL SELECT
+ valid, locked
+ INTO
+ :l_valid, :l_locked
+ FROM
+ daq.cache_table_valid
+ WHERE
+ cache_table = 'param_string_cache'
+ AND
+ daq_setup_id IS NULL
+ ;
+ EXEC SQL EXECUTE
+ BEGIN
IF
- :l_valid = 0 AND :l_locked = 0
+ :l_valid != 1 AND :l_locked = 0
THEN
- daq.daq_oper_interface.validate_cache_table ( 'param_string_cache' );
+ IF
+ :l_valid = 0
+ THEN
+ UPDATE
+ daq.cache_table_valid
+ SET
+ valid = -1
+ WHERE
+ cache_table = 'param_string_cache'
+ ;
+ COMMIT;
+ DBMS_JOB.SUBMIT (
+ :l_jobid,
+ 'daq.daq_oper_interface.validate_cache_table ( ''param_string_cache'' );'
+ );
+ END IF;
+ :l_take_cache := 0;
+ ELSE
+ :l_take_cache := 1;
END IF;
END;
END-EXEC;
+ printf("do %stake cache\n", l_take_cache ? "" : "not ");
+ if (l_take_cache) {
EXEC SQL SELECT
value
INTO
idx = :sqlidx
ORDER BY
seq_num;
+ } else {
+ EXEC SQL SELECT
+ value
+ INTO
+ :value
+ FROM
+ daq.param_string
+ WHERE
+ setup IS NULL
+ AND
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ }
}
*rows = sqlca.sqlerrd[2];
#endif /* PTHREADS */
if (my->setup != NULL) {
- EXEC SQL EXECUTE
- BEGIN
- SELECT
+ EXEC SQL SELECT
valid, locked
INTO
:l_valid, :l_locked
WHERE
cache_table = 'param_int_cache'
AND
- daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup );
- IF
- :l_valid = 0 AND :l_locked = 0
- THEN
- daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' );
- END IF;
- END;
- END-EXEC;
- EXEC SQL SELECT
- value
- INTO
- :intvalue
- FROM
- daq.param_int_all_cache
- WHERE
- setup = :sqlsetup
- AND
- name = :sqlname
- AND
- idx = :sqlidx
- ORDER BY
- seq_num;
+ daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup )
+ ;
+ EXEC SQL EXECUTE
+ BEGIN
+ IF
+ :l_valid != 1 AND :l_locked = 0
+ THEN
+ IF
+ :l_valid = 0
+ THEN
+ UPDATE
+ daq.cache_table_valid
+ SET
+ valid = -1
+ WHERE
+ cache_table = 'param_ing_cache'
+ AND
+ daq_setup_id = daq.public_interface.r_daq_setup_id ( :sqlsetup )
+ ;
+ COMMIT;
+ DBMS_JOB.SUBMIT (
+ :l_jobid,
+ 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'', 6 );'
+ );
+ END IF;
+ :l_take_cache := 0;
+ ELSE
+ :l_take_cache := 1;
+ END IF;
+ END;
+ END-EXEC;
+ printf("do %stake cache\n", l_take_cache ? "" : "not ");
+ if (l_take_cache) {
+ EXEC SQL SELECT
+ value
+ INTO
+ :intvalue
+ FROM
+ daq.param_int_all_cache
+ WHERE
+ setup = :sqlsetup
+ AND
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ } else {
+ EXEC SQL SELECT
+ value
+ INTO
+ :intvalue
+ FROM
+ daq.param_int
+ WHERE
+ setup = :sqlsetup
+ AND
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ }
} else {
- EXEC SQL EXECUTE
- BEGIN
- SELECT
+ EXEC SQL SELECT
valid, locked
INTO
:l_valid, :l_locked
WHERE
cache_table = 'param_int_cache'
AND
- daq_setup_id IS NULL;
- IF
- :l_valid = 0 AND :l_locked = 0
- THEN
- daq.daq_oper_interface.validate_cache_table ( 'param_int_cache' );
- END IF;
- END;
- END-EXEC;
- EXEC SQL SELECT
- value
- INTO
- :intvalue
- FROM
- daq.param_int_all_cache
- WHERE
- setup IS NULL
- AND
- name = :sqlname
- AND
- idx = :sqlidx
- ORDER BY
- seq_num;
+ daq_setup_id IS NULL
+ ;
+ EXEC SQL EXECUTE
+ BEGIN
+ IF
+ :l_valid != 1 AND :l_locked = 0
+ THEN
+ IF
+ :l_valid = 0
+ THEN
+ UPDATE
+ daq.cache_table_valid
+ SET
+ valid = -1
+ WHERE
+ cache_table = 'param_int_cache'
+ ;
+ COMMIT;
+ DBMS_JOB.SUBMIT (
+ :l_jobid,
+ 'daq.daq_oper_interface.validate_cache_table ( ''param_int_cache'' );'
+ );
+ END IF;
+ :l_take_cache := 0;
+ ELSE
+ :l_take_cache := 1;
+ END IF;
+ END;
+ END-EXEC;
+ printf("do %stake cache\n", l_take_cache ? "" : "not ");
+ if (l_take_cache) {
+ EXEC SQL SELECT
+ value
+ INTO
+ :intvalue
+ FROM
+ daq.param_int_all_cache
+ WHERE
+ setup IS NULL
+ AND
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ } else {
+ EXEC SQL SELECT
+ value
+ INTO
+ :intvalue
+ FROM
+ daq.param_int
+ WHERE
+ setup IS NULL
+ AND
+ name = :sqlname
+ AND
+ idx = :sqlidx
+ ORDER BY
+ seq_num;
+ }
}
*rows = sqlca.sqlerrd[2];