]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authorhades <hades>
Fri, 1 Sep 2000 14:54:02 +0000 (14:54 +0000)
committerhades <hades>
Fri, 1 Sep 2000 14:54:02 +0000 (14:54 +0000)
allParam/ora/oraParam.h
allParam/ora/oraParam.pc
allParam/psql/psqlParam.h

index ec00b4255dd4abe0d14d3106544cf75f7413d270..40e6db4a2e3d4d1cef7bd1a8d738e23f0ee5ea41 100644 (file)
@@ -9,6 +9,8 @@
 #define PARAM_MAX_NVALS 1024
 
 typedef struct ParamS {
+       const char *user;
+       const char *passwd;
        char *strerror;
 } Param;
 
index 820c143e94f5ea33e460279fb7e7bfdcc42c34a2..1957e4248d80a0c6ea51784ab44eff1933a0a580 100644 (file)
@@ -1,5 +1,6 @@
 #define _POSIX_C_SOURCE 199509L
 
+#include <stdio.h>
 #include <string.h>
 #include <ctype.h>
 
@@ -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;
+}
+
index 34dff3eff2e88eb3017633099c7d9676e226cc33..924986b1324822353bad56106d84f83ec0e39be1 100644 (file)
@@ -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;