X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/99e09b48bde566e0226862a4f904a00347ec9eee..refs/heads/LOCKING:/server/increment.dc diff --git a/server/increment.dc b/server/increment.dc index a44ea882..c81361a6 100644 --- a/server/increment.dc +++ b/server/increment.dc @@ -13,6 +13,7 @@ static char *rcsid_increment_dc = "$Header$"; #endif lint +#include #include #include #include "query.h" @@ -20,7 +21,6 @@ static char *rcsid_increment_dc = "$Header$"; EXEC SQL INCLUDE sqlca; extern char *whoami; -char *malloc(); int inc_pid = 0; int inc_running = 0; @@ -125,20 +125,20 @@ char **argv; beforetable = table; if (!strcmp(table, "users")) { - EXEC SQL SELECT login, CHAR(uid), shell, last, first, middle, - CHAR(status), clearid, type + EXEC SQL SELECT u.login, CHAR(u.uid), u.shell, u.last, u.first, u.middle, + CHAR(u.status), u.clearid, u.type INTO :barg0, :barg1, :barg2, :barg3, :barg4, :barg5, :barg6, :barg7, :barg8 - FROM users WHERE :qual; + FROM users u WHERE :qual; beforec = 9; } else if (!strcmp(table, "machine")) { - EXEC SQL SELECT name, type INTO :barg0, :barg1 FROM machine + EXEC SQL SELECT m.name, m.vendor INTO :barg0, :barg1 FROM machine m WHERE :qual; beforec = 2; } else if (!strcmp(table, "cluster")) { - EXEC SQL SELECT name, description, location + EXEC SQL SELECT c.name, c.description, c.location INTO :barg0, :barg1, :barg2 - FROM cluster WHERE :qual; + FROM cluster c WHERE :qual; beforec = 3; } else if (!strcmp(table, "mcmap")) { strcpy(barg0, argv[0]); @@ -150,40 +150,58 @@ char **argv; strcpy(barg2, argv[2]); beforec = 3; } else if (!strcmp(table, "filesys")) { - EXEC SQL SELECT label, type, CHAR(mach_id), name, mount, access, - comments, CHAR(owner), CHAR(owners), CHAR(createflg), lockertype + EXEC SQL SELECT fs.label, fs.type, CHAR(fs.mach_id), fs.name, + fs.mount, fs.access, fs.comments, CHAR(fs.owner), CHAR(fs.owners), + CHAR(fs.createflg), fs.lockertype INTO :barg0, :barg1, :barg2, :barg3, :barg4, :barg5, :barg6, :barg7, :barg8, :barg9, :barg10 - FROM filesys WHERE :qual; + FROM filesys fs WHERE :qual; + name = malloc(0); + id = atoi(barg2); + id_to_name(id, "MACHINE", &name); + strcpy(barg2, name); + id = atoi(barg7); + id_to_name(id, "USER", &name); + strcpy(barg7, name); + id = atoi(barg8); + id_to_name(id, "LIST", &name); + strcpy(barg8, name); + free(name); beforec = 11; } else if (!strcmp(table, "quota")) { strcpy(barg0, "?"); strcpy(barg1, argv[1]); strcpy(barg2, "?"); - sprintf(buffer, "%s and fs.filsys_id = q.filsys_id", qual); + sprintf(buffer, "%s AND fs.filsys_id = q.filsys_id", qual); qual = buffer; - EXEC SQL SELECT q.quota, fs.name INTO :barg3, :barg4 + EXEC SQL SELECT CHAR(q.quota), fs.name INTO :barg3, :barg4 FROM quota q, filesys fs WHERE :qual; beforec = 5; } else if (!strcmp(table, "list")) { - EXEC SQL SELECT name, CHAR(active), CHAR(publicflg), CHAR(hidden), - CHAR(maillist), CHAR(grouplist), CHAR(gid), acl_type, - CHAR(acl_id), description + EXEC SQL SELECT l.name, CHAR(l.active), CHAR(l.publicflg), + CHAR(l.hidden), CHAR(l.maillist), CHAR(l.grouplist), CHAR(l.gid), + l.acl_type, CHAR(l.acl_id), l.description INTO :barg0, :barg1, :barg2, :barg3, :barg4, :barg5, :barg6, - :barg7, :barg8, :barg9 - FROM list WHERE :qual; + :barg7, :barg8, :barg9 + FROM list l WHERE :qual; beforec = 10; } else if (!strcmp(table, "members")) { id = (int) argv[0]; - EXEC SQL SELECT CHAR(grouplist) INTO :barg3 FROM list - WHERE list_id = :id; + EXEC SQL SELECT CHAR(active), CHAR(publicflg), CHAR(hidden), + CHAR(maillist), CHAR(grouplist), CHAR(gid) + INTO :barg3, :barg4, :barg5, :barg6, :barg7, :barg8 + FROM list WHERE list_id = :id; name = malloc(0); id_to_name(id, "LIST", &name); strcpy(barg0, name); strcpy(barg1, argv[1]); id = (int) argv[2]; + beforec = 9; if (!strcmp(barg1, "USER")) { id_to_name(id, barg1, &name); + EXEC SQL SELECT CHAR(status) INTO :barg9 FROM users + WHERE users_id=:id; + beforec = 10; } else if (!strcmp(barg1, "LIST")) { id_to_name(id, barg1, &name); } else if (!strcmp(barg1, "STRING")) { @@ -193,7 +211,6 @@ char **argv; } strcpy(barg2, name); free(name); - beforec = 4; } /* else com_err(whoami, 0, "unknown table in incremental_before"); */ } @@ -226,20 +243,20 @@ EXEC SQL END DECLARE SECTION; char **copy_argv(); if (!strcmp(table, "users")) { - EXEC SQL SELECT login, CHAR(uid), shell, last, first, middle, - CHAR(status), clearid, type + EXEC SQL SELECT u.login, CHAR(u.uid), u.shell, u.last, u.first, + u.middle, CHAR(u.status), u.clearid, u.type INTO :aarg0, :aarg1, :aarg2, :aarg3, :aarg4, :aarg5, :aarg6, :aarg7, :aarg8 - FROM users WHERE :qual; + FROM users u WHERE :qual; afterc = 9; } else if (!strcmp(table, "machine")) { - EXEC SQL SELECT name, type INTO :aarg0, :aarg1 - FROM machine WHERE :qual; + EXEC SQL SELECT m.name, m.vendor INTO :aarg0, :aarg1 + FROM machine m WHERE :qual; afterc = 2; } else if (!strcmp(table, "cluster")) { - EXEC SQL SELECT name, description, location + EXEC SQL SELECT c.name, c.description, c.location INTO :aarg0, :aarg1, :aarg2 - FROM cluster WHERE :qual; + FROM cluster c WHERE :qual; afterc = 3; } else if (!strcmp(table, "mcmap")) { strcpy(aarg0, argv[0]); @@ -251,40 +268,59 @@ EXEC SQL END DECLARE SECTION; strcpy(aarg2, argv[2]); afterc = 3; } else if (!strcmp(table, "filesys")) { - EXEC SQL SELECT CHAR(label), type, CHAR(mach_id), name, mount, access, - comments, CHAR(owner), CHAR(owners), CHAR(createflg), lockertype + EXEC SQL SELECT CHAR(fs.label), fs.type, CHAR(fs.mach_id), fs.name, + fs.mount, fs.access, fs.comments, CHAR(fs.owner), CHAR(fs.owners), + CHAR(fs.createflg), fs.lockertype INTO :aarg0, :aarg1, :aarg2, :aarg3, :aarg4, :aarg5, :aarg6, :aarg7, :aarg8, :aarg9, :aarg10 FROM filesys fs WHERE :qual; + name = malloc(0); + id = atoi(aarg2); + id_to_name(id, "MACHINE", &name); + strcpy(aarg2, name); + id = atoi(aarg7); + id_to_name(id, "USER", &name); + strcpy(aarg7, name); + id = atoi(aarg8); + id_to_name(id, "LIST", &name); + strcpy(aarg8, name); + free(name); afterc = 11; } else if (!strcmp(table, "quota")) { strcpy(aarg0, "?"); strcpy(aarg1, argv[1]); strcpy(aarg2, "?"); - sprintf(buffer, "%s and fs.filsys_id = q.filsys_id", qual); + sprintf(buffer, "%s and fs.filsys_id = q.filsys_id and q.type = '%s'", + qual, argv[1]); qual = buffer; EXEC SQL SELECT CHAR(q.quota), fs.name INTO :aarg3, :aarg4 FROM quota q, filesys fs WHERE :qual; afterc = 5; } else if (!strcmp(table, "list")) { - EXEC SQL SELECT name, CHAR(active), CHAR(publicflg), CHAR(hidden), - CHAR(maillist), CHAR(grouplist), CHAR(gid), acl_type, - CHAR(acl_id), description + EXEC SQL SELECT l.name, CHAR(l.active), CHAR(l.publicflg), + CHAR(l.hidden), CHAR(l.maillist), CHAR(l.grouplist), CHAR(l.gid), + l.acl_type, CHAR(l.acl_id), l.description INTO :aarg0, :aarg1, :aarg2, :aarg3, :aarg4, :aarg5, :aarg6, :aarg7, :aarg8, :aarg9 - FROM list WHERE :qual; + FROM list l WHERE :qual; afterc = 10; } else if (!strcmp(table, "members")) { id = (int) argv[0]; - EXEC SQL SELECT CHAR(grouplist) INTO :aarg3 FROM list - WHERE list_id = :id; + EXEC SQL SELECT CHAR(active), CHAR(publicflg), CHAR(hidden), + CHAR(maillist), CHAR(grouplist), CHAR(gid) + INTO :aarg3, :aarg4, :aarg5, :aarg6, :aarg7, :aarg8 + FROM list WHERE list_id = :id; name = malloc(0); id_to_name(id, "LIST", &name); strcpy(aarg0, name); strcpy(aarg1, argv[1]); id = (int) argv[2]; + afterc = 9; if (!strcmp(aarg1, "USER")) { id_to_name(id, aarg1, &name); + EXEC SQL SELECT CHAR(status) INTO :aarg9 FROM users + WHERE users_id=:id; + afterc = 10; } else if (!strcmp(aarg1, "LIST")) { id_to_name(id, aarg1, &name); } else if (!strcmp(aarg1, "STRING")) { @@ -294,7 +330,6 @@ EXEC SQL END DECLARE SECTION; } strcpy(aarg2, name); free(name); - afterc = 4; } else if (!strcmp(table, "clear")) { afterc = 0; table = beforetable; @@ -371,6 +406,7 @@ incremental_update() cache = c; } EXEC SQL CLOSE inc; + EXEC SQL COMMIT WORK; } while (sq_remove_data(incremental_sq, &iu)) { @@ -423,7 +459,7 @@ next_incremental() switch (inc_pid) { case 0: execv(prog, argv); - exit(1); + _exit(1); case -1: com_err(whoami, 0, "Failed to start incremental update"); break;