#define _POSIX_C_SOURCE 199509L
+#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "param.h"
+static void Param_rollback(int *);
+
static void Param_strerror(const Param *, const char *);
int conParam(Param *my)
{
my->strerror = NULL;
+ my->user = "daq@db-hades.gsi.de";
+ my->passwd = "daqall";
return 0;
}
int Param_getIntArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val)
{
- int retVal;
+ int retVal = 0;
int i;
char *endptr;
- EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, "Some Oracle error occured.\n");
+ EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
+ EXEC SQL WHENEVER SQLERROR DO Param_rollback(&retVal);
+
EXEC SQL BEGIN DECLARE SECTION;
- char value[PARAM_MAX_NVALS][PARAM_MAX_VALUE_LEN];
+ const char* un;
+ const char* pw;
char sqlname[PARAM_MAX_NAME_LEN];
char sqlidx[PARAM_MAX_NAME_LEN];
+ char value[PARAM_MAX_NVALS][PARAM_MAX_VALUE_LEN];
EXEC SQL END DECLARE SECTION;
- EXEC SQL SELECT value INTO :value FROM daq.params WHERE name = ':sqlname' AND idx = ':sqlidx' ORDER BY seq_num;
+ for(i = 0 ; i <= strlen(name) ; i++) {
+ sqlname[i] = tolower(name[i]);
+ }
+ for(i = 0 ; i <= strlen(idx) ; i++) {
+ sqlidx[i] = tolower(idx[i]);
+ }
+ un = my->user;
+ pw = my->passwd;
+
+ EXEC SQL CONNECT :un IDENTIFIED BY :pw;
+ EXEC SQL SELECT VALUE INTO :value FROM DAQ.PARAMS WHERE NAME = :sqlname AND IDX = :sqlidx ORDER BY SEQ_NUM;
+ printf("Number of result rows: %d.\n", sqlca.sqlerrd[2]);
*rows = sqlca.sqlerrd[2];
if (*rows > maxrows) {
- Param_strerror(my, "Result has to many rows. Returning only 'maxrows' rows.\n");
- for (i = 0 ; i < maxrows ; i++) {
- val[i] = strtoul(value[i], &endptr, NULL);
- if(*endptr != '\0') {
- Param_strerror(my, "Value seems to be no integer.\n");
- retVal = -1;
- }
- }
- retVal = -1;
- } else {
- for (i = 0 ; i < *rows ; i++) {
- val[i] = strtoul(value[i], &endptr, NULL);
- if(*endptr != '\0') {
- Param_strerror(my, "Value seems to be no integer.\n");
- retVal = -1;
- }
- }
- for (i = *rows ; i < maxrows ; i++) {
- val[i] = 0;
+ *rows = maxrows;
+ }
+ for (i = 0 ; i < *rows ; i++) {
+ int j = PARAM_MAX_VALUE_LEN - 1;
+ while(value[i][--j] == ' ');
+ value[i][j + 1] = '\0';
+ val[i] = strtoul(value[i], &endptr, NULL);
+ if(*endptr != '\0') {
+ Param_strerror(my, "Value seems to be no integer.\n");
+ *rows = 0;
+ return -1;
}
}
-
- for(i = 0 ; i < PARAM_MAX_NVALS ; i++) {
- free(value[i]);
+ for (i = *rows ; i < maxrows ; i++) {
+ val[i] = 0;
}
- retVal = 0;
+
+ EXEC SQL COMMIT RELEASE;
+ return retVal;
}
int Param_getStringArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
{
- int retVal;
+ int retVal = 0;
int i;
- EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, "Some Oracle error occured.\n");
+ EXEC SQL WHENEVER SQLERROR DO Param_strerror(my, sqlca.sqlerrm.sqlerrmc);
+ EXEC SQL WHENEVER SQLERROR DO Param_rollback(&retVal);
+
EXEC SQL BEGIN DECLARE SECTION;
- char value[PARAM_MAX_NVALS][PARAM_MAX_VALUE_LEN];
+ const char* un;
+ const char* pw;
char sqlname[PARAM_MAX_NAME_LEN];
char sqlidx[PARAM_MAX_NAME_LEN];
+ char value[PARAM_MAX_NVALS][PARAM_MAX_VALUE_LEN];
EXEC SQL END DECLARE SECTION;
- EXEC SQL SELECT value INTO :value FROM daq.params WHERE name = ':sqlname' AND idx = ':sqlidx' ORDER BY seq_num;
+ for(i = 0 ; i <= strlen(name) ; i++) {
+ sqlname[i] = tolower(name[i]);
+ }
+ for(i = 0 ; i <= strlen(idx) ; i++) {
+ sqlidx[i] = tolower(idx[i]);
+ }
+ un = my->user;
+ pw = my->passwd;
+
+ EXEC SQL CONNECT :un IDENTIFIED BY :pw;
+
+ EXEC SQL SELECT VALUE INTO :value FROM DAQ.PARAMS WHERE NAME = :sqlname AND IDX = :sqlidx ORDER BY SEQ_NUM;
+ printf("Number of result rows: %d.\n", sqlca.sqlerrd[2]);
*rows = sqlca.sqlerrd[2];
if (*rows > maxrows) {
- Param_strerror(my, "Result has to many rows. Returning only 'maxrows' rows.\n");
- for (i = 0 ; i < maxrows ; i++) {
- strcpy(val[i], value[i]);
- }
- retVal = -1;
- } else {
- for (i = 0 ; i < *rows ; i++) {
- strcpy(val[i], value[i]);
- }
- for (i = *rows ; i < maxrows ; i++) {
- val[i] = NULL;
- }
- retVal = 0;
+ *rows = maxrows;
}
-
- for(i = 0 ; i < PARAM_MAX_NVALS ; i++) {
- free(value[i]);
+ for (i = 0 ; i < *rows ; i++) {
+ int j = PARAM_MAX_VALUE_LEN - 1;
+ while(value[i][--j] == ' ');
+ value[i][j + 1] = '\0';
+ strcpy(val[i], value[i]);
+ }
+ for (i = *rows ; i < maxrows ; i++) {
+ val[i] = NULL;
}
+
+ EXEC SQL COMMIT RELEASE;
return retVal;
}
}
}
+static void Param_rollback(int *retVal) {
+ *retVal = -1;
+ EXEC SQL ROLLBACK RELEASE;
+}
+