From b94e861baa8ed5fbefc9a3f724cb63a061e446f5 Mon Sep 17 00:00:00 2001 From: kostas Date: Mon, 1 Oct 1990 11:53:37 +0000 Subject: [PATCH] more dynamic sql. --- server/qsupport.dc | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/server/qsupport.dc b/server/qsupport.dc index bba4a0a1..1ab351bc 100644 --- a/server/qsupport.dc +++ b/server/qsupport.dc @@ -17,7 +17,8 @@ static char *rcsid_qsupport_qc = "$Header$"; #include "query.h" #include "mr_server.h" #include -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; -- 2.45.2