From 47b78d873a8df1b4050bdeb181b362f209fcc920 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 1 Sep 2000 14:54:02 +0000 Subject: [PATCH] *** empty log message *** --- allParam/ora/oraParam.h | 2 + allParam/ora/oraParam.pc | 123 +++++++++++++++++++++++--------------- allParam/psql/psqlParam.h | 1 + 3 files changed, 79 insertions(+), 47 deletions(-) diff --git a/allParam/ora/oraParam.h b/allParam/ora/oraParam.h index ec00b42..40e6db4 100644 --- a/allParam/ora/oraParam.h +++ b/allParam/ora/oraParam.h @@ -9,6 +9,8 @@ #define PARAM_MAX_NVALS 1024 typedef struct ParamS { + const char *user; + const char *passwd; char *strerror; } Param; diff --git a/allParam/ora/oraParam.pc b/allParam/ora/oraParam.pc index 820c143..1957e42 100644 --- a/allParam/ora/oraParam.pc +++ b/allParam/ora/oraParam.pc @@ -1,5 +1,6 @@ #define _POSIX_C_SOURCE 199509L +#include #include #include @@ -8,11 +9,15 @@ #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; } @@ -32,83 +37,102 @@ int Param_getString(const Param *my, const char *name, const char *idx, int *row 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; } @@ -126,3 +150,8 @@ static void Param_strerror(const Param *my, const char *strerror) } } +static void Param_rollback(int *retVal) { + *retVal = -1; + EXEC SQL ROLLBACK RELEASE; +} + diff --git a/allParam/psql/psqlParam.h b/allParam/psql/psqlParam.h index 34dff3e..924986b 100644 --- a/allParam/psql/psqlParam.h +++ b/allParam/psql/psqlParam.h @@ -7,6 +7,7 @@ #define PG_MAX_QUERY_LEN 1024 #define PG_MAX_CLAUSE_LEN 256 +#define PARAM_MAX_NAME_LEN PARAM_MAX_VALUE_LEN typedef struct ParamS { char *strerror; -- 2.43.0