]> andersk Git - moira.git/commitdiff
more dynamic sql.
authorkostas <kostas>
Mon, 1 Oct 1990 11:53:37 +0000 (11:53 +0000)
committerkostas <kostas>
Mon, 1 Oct 1990 11:53:37 +0000 (11:53 +0000)
server/qsupport.dc

index bba4a0a155715d441afda15e95c14a9e481a743d..1ab351bc815b13a5cfcbee1d0014fb5e6ae4066d 100644 (file)
@@ -17,7 +17,8 @@ static char *rcsid_qsupport_qc = "$Header$";
 #include "query.h"
 #include "mr_server.h"
 #include <ctype.h>
-EXEC SQL INCLUDE sqlca;
+EXEC SQL INCLUDE SQLCA;  /* SQL Communications Area */
+EXEC SQL INCLUDE SQLDA;  /* SQL Descriptor Area */
 
 extern char *whoami, *strsave();
 extern int ingres_errno, mr_errcode;
@@ -58,11 +59,17 @@ access_login(q, argv, cl)
     EXEC SQL BEGIN DECLARE SECTION;
     int id;
     char qual[256];
+    char stmt_1_str[256];
     EXEC SQL END DECLARE SECTION;
 
+    EXEC SQL DECLARE stmt_1 STATEMENT;
+
     build_qual(q->qual, q->argc, argv, qual);
 
-    EXEC SQL SELECT users_id INTO :id FROM users WHERE qual;
+    sprintf(stmt_1_str, 
+            "EXEC SQL SELECT users_id INTO %s FROM users WHERE %s",
+            id, qual );
+    EXEC SQL EXECUTE stmt_1;
 
     if (sqlca.sqlcode < 0 || sqlca.sqlerrd[2] != 1 || id != cl->users_id)
         return(MR_PERM);
@@ -2732,9 +2739,13 @@ int qualified_get(q, argv, action, actarg, start, range, field, flags)
     EXEC SQL BEGIN DECLARE SECTION;
     char name[33], qual[256], *rvar, *rtbl, *rfield;
     int rowcount, i;
+    char stmt_2_str[256];
     EXEC SQL END DECLARE SECTION;
     char *rargv[1], buf[32];
 
+    EXEC SQL DECLARE stmt_2 STATEMENT;
+    EXEC SQL DECLARE r9_cursor CURSOR FOR stmt_2;
+
     strcpy(qual, start);
     for (i = 0; i < q->argc; i++) {
        if (!strcmp(argv[i], "TRUE")) {
@@ -2750,10 +2761,13 @@ int qualified_get(q, argv, action, actarg, start, range, field, flags)
     rvar = range;
     rtbl = q->rtable;
     rfield = field;
-    EXEC SQL DECLARE r9_cursor CURSOR FOR
-         SELECT R.rfield
-         FROM RTBL R
-         WHERE qual;
+
+    sprintf( stmt_2_str, "SELECT %s FROM RTBL R WHERE %s",
+             R.rfield, qual );
+
+    EXEC SQL PREPARE stmt_2 FROM :stmt_2_str;
+    EXEC SQL DESCRIBE stnt_2 INTO SQLDA;
+
     EXEC SQL OPEN r9_cursor;
     while (1) {
       EXEC SQL FETCH r9_cursor INTO :name;
@@ -2786,9 +2800,13 @@ int qualified_get_serverhost(q, argv, cl, action, actarg)
     EXEC SQL BEGIN DECLARE SECTION;
     char sname[33], mname[33], qual[256];
     int rowcount, i;
+    char stmt_3_str[256];
     EXEC SQL END DECLARE SECTION;
     char *rargv[2], buf[32];
 
+    EXEC SQL DECLARE stmt_3 STATEMENT;
+    EXEC SQL DECLARE s9_cursor CURSOR FOR stmt_3;
+
     sprintf(qual, "machine.mach_id = sh.mach_id and sh.service = uppercase(\"%s\")",
            argv[0]);
     for (i = 1; i < q->argc; i++) {
@@ -2803,10 +2821,12 @@ int qualified_get_serverhost(q, argv, cl, action, actarg)
       
     rargv[0] = sname;
     rargv[1] = mname;
-    EXEC SQL DECLARE s9_cursor CURSOR FOR
-         SELECT S.service, M.name
-         FROM SERVERHOSTS S, MACHINE M
-         WHERE qual;
+    sprintf( stmt_3_str, 
+             "SELECT S.service, M.name FROM SERVERHOSTS S, MACHINE M WHERE %s",
+             qual );
+    EXEC SQL PREPARE stmt_3 FROM :stmt_3_str;
+    EXEC SQL DESCRIBE stnt_3 INTO SQLDA;
+
     EXEC SQL OPEN s9_cursor;
     while (1) {
       EXEC SQL FETCH s9_cursor INTO :sname, :mname;
This page took 0.056734 seconds and 5 git commands to generate.