]> andersk Git - moira.git/blobdiff - dbck/phase4.dc
Added support for optional debugging malloc. No code changes if you are
[moira.git] / dbck / phase4.dc
index 535a22a3be1cb2f1b8bad4a6340120539c053c10..f90586556408c6e024c9e634281f8efe1d8ba4c3 100644 (file)
@@ -8,6 +8,7 @@
 #include <mit-copyright.h>
 #include <moira.h>
 #include "dbck.h"
+EXEC SQL INCLUDE sqlca;
 
 static char phase4_qc_rcsid[] = "$Header$";
 
@@ -31,11 +32,15 @@ struct hash *boxes;
 }
 
 
-##check_box_counts(id, cnt, counts)
-##int id, cnt;
+check_box_counts(id, cnt, counts)
+EXEC SQL BEGIN DECLARE SECTION; 
+int id, cnt;
+EXEC SQL END DECLARE SECTION; 
 struct hash *counts;
-##{
-##  int oldval, rowcount;
+{
+    EXEC SQL BEGIN DECLARE SECTION; 
+    int oldval, rowcount;
+    EXEC SQL END DECLARE SECTION; 
 
     oldval = (int) hash_lookup(counts, id);
     cnt--;
@@ -44,10 +49,9 @@ struct hash *counts;
               ((struct machine *) hash_lookup(machines, id))->name,
               oldval, cnt);
        if (single_fix("Update", 1)) {
-##         range of s is serverhosts
-##         replace s (value1 = cnt) where
-##             s.service = "POP" and s.mach_id = id
-##         inquire_equel(rowcount = "rowcount")
+           EXEC SQL UPDATE serverhosts SET value1 = :cnt
+               WHERE service='POP' AND mach_id = :id;
+           EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
            if (rowcount > 0)
              printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
            else
@@ -55,14 +59,18 @@ struct hash *counts;
            modified("serverhosts");
        }
     }
-##}
+}
 
 
-##check_nfs_counts(id, n, hint)
-##int id, hint;
+check_nfs_counts(id, n, hint)
+EXEC SQL BEGIN DECLARE SECTION; 
+int id, hint;
+EXEC SQL END DECLARE SECTION; 
 struct nfsphys *n;
-##{
-##  int val, rowcount;
+{
+    EXEC SQL BEGIN DECLARE SECTION; 
+    int val, rowcount;
+    EXEC SQL END DECLARE SECTION; 
 
     val = n->count;
     if (n->allocated != val) {
@@ -70,8 +78,9 @@ struct nfsphys *n;
               ((struct machine *) hash_lookup(machines, n->mach_id))->name,
               n->dir, n->allocated, val);
        if (single_fix("Update", 1)) {
-##         replace nfsphys (allocated = val) where nfsphys.nfsphys_id = id
-##         inquire_equel(rowcount = "rowcount")
+           EXEC SQL UPDATE nfsphys SET allocated = :val 
+               WHERE nfsphys_id = :id;
+           EXEC SQL INQUIRE_SQL(:rowcount = rowcount);
            if (rowcount > 0)
              printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
            else
@@ -79,36 +88,51 @@ struct nfsphys *n;
            modified("nfsphys");
        }
     }
-##}
+}
 
 
 phase4()
-##{
+{
     struct hash *boxes, *counts;
-##  int id, cnt;
+    EXEC SQL BEGIN DECLARE SECTION; 
+    int id, cnt;
+    EXEC SQL END DECLARE SECTION; 
 
     printf("Phase 4 - Checking counts\n");
 
     dprintf("Doing POBoxes...\n");
     boxes = create_hash(10);
     counts = create_hash(10);
-##  retrieve (id = serverhosts.mach_id, cnt = serverhosts.value1)
-##     where serverhosts.service = "POP" {
-      hash_store(boxes, id, 1);
-      hash_store(counts, id, cnt);
-##  }
+    EXEC SQL DECLARE csr401 CURSOR FOR
+       SELECT mach_id, value1 FROM serverhosts
+           WHERE service='POP';
+    if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
+    EXEC SQL OPEN csr401;
+    while(1) {
+       EXEC SQL FETCH csr401 INTO :id, :cnt;
+       if (sqlca.sqlcode != 0) {
+         ingerr(&sqlca.sqlcode);
+         break;
+       } 
+       
+       hash_store(boxes, id, 1);
+       hash_store(counts, id, cnt);
+    }
+    EXEC SQL CLOSE csr401; 
     hash_step(users, count_boxes, boxes);
     hash_step(boxes, check_box_counts, counts);
 
     dprintf("Doing NFSphys...\n");
     hash_step(nfsphys, check_nfs_counts, 0);
-##}
+}
 
 
 count_only_setup()
-##{
-##  int id, status, id2, id3;
-##  char name[33], last[17], first[17], buf[257];
+{
+    EXEC SQL BEGIN DECLARE SECTION; 
+    int id, status, id2, id3;
+    char name[33], last[17], first[17], buf[257];
+    EXEC SQL END DECLARE SECTION; 
     struct save_queue *sq;
     struct user *u;
     struct nfsphys *n;
@@ -116,11 +140,20 @@ count_only_setup()
 
     dprintf("Loading users...\n");
     users = create_hash(10000);
-##  range of u is users
-##  retrieve (id = u.users_id, name = u.login, last = u.#last,
-##           first = u.#first, status = u.#status, buf = u.potype,
-##           id2 = u.pop_id, id3 = u.box_id) 
-##    where u.potype = "POP" {
+    EXEC SQL DECLARE csr402 CURSOR FOR
+       SELECT users_id, login, last, first, status, 
+              potype, pop_id, box_id FROM users
+           WHERE potype='POP';
+    if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
+    EXEC SQL OPEN csr402;
+    while(1) {
+       EXEC SQL FETCH csr402 INTO :id, :name, :last, :first, :status, 
+           :buf, :id2, :id3;
+       if (sqlca.sqlcode != 0) {
+         ingerr(&sqlca.sqlcode);
+         break;
+       } 
+
        u = (struct user *) malloc(sizeof(struct user));
        if (u == NULL)
          out_of_mem("storing users");
@@ -141,24 +174,44 @@ count_only_setup()
            u->pobox_id = 0;
        }
        hash_store(users, id, u);
-##  }
+       }
+    EXEC SQL CLOSE csr402; 
 
     dprintf("Loading machines...\n");
     machines = create_hash(1000);
-##  range of m is machine
-##  retrieve (id = m.mach_id, name = m.#name) {
+    EXEC SQL DECLARE csr403 CURSOR FOR
+       SELECT mach_id, name FROM machine;
+    if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
+    EXEC SQL OPEN csr403;
+    while(1) {
+       EXEC SQL FETCH csr403 INTO :id, :name;
+       if (sqlca.sqlcode != 0) {
+         ingerr(&sqlca.sqlcode);
+         break;
+       } 
+
        m = (struct machine *) malloc(sizeof(struct machine));
        if (m == NULL)
          out_of_mem("storing machines");
        strcpy(m->name, strtrim(name));
        m->mach_id = id;
        hash_store(machines, id, m);
-##  }
+    }
+    EXEC SQL CLOSE csr403; 
 
     dprintf("Loading nfsphys...\n");
     nfsphys = create_hash(500);
-##  retrieve (id = nfsphys.nfsphys_id, name = nfsphys.dir,
-##           id2 = nfsphys.mach_id, id3 = nfsphys.allocated) {
+    EXEC SQL DECLARE csr404 CURSOR FOR
+       SELECT nfsphys_id, dir, mach_id, allocated FROM nfsphys;
+    if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
+    EXEC SQL OPEN csr404;
+    while(1) {
+       EXEC SQL FETCH csr404 INTO :id, :name, :id2, :id3;
+       if (sqlca.sqlcode != 0) {
+         ingerr(&sqlca.sqlcode);
+         break;
+       } 
+
        n = (struct nfsphys *) malloc(sizeof(struct nfsphys));
        if (n == NULL)
          out_of_mem("storing nfsphys");
@@ -168,12 +221,24 @@ count_only_setup()
        n->allocated = id3;
        n->count = 0;
        hash_store(nfsphys, id, n);
-##  }
+       }
+    EXEC SQL CLOSE csr404; 
 
     dprintf("Counting quotas...\n");
-##  retrieve (id = quota.phys_id, id2 = quota.quota) {
+    EXEC SQL DECLARE csr405 CURSOR FOR
+       SELECT phys_id, quota FROM quota;
+    if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode);
+    EXEC SQL OPEN csr405;
+    while(1) {
+       EXEC SQL FETCH csr405 INTO :id, :id2;
+       if (sqlca.sqlcode != 0) {
+         ingerr(&sqlca.sqlcode);
+         break;
+       } 
+       
         if (n = (struct nfsphys  *) hash_lookup(nfsphys, id)) {
            n->count += id2;
        }
-##  }
-##}
+    }
+    EXEC SQL CLOSE csr405; 
+}
This page took 0.047579 seconds and 4 git commands to generate.