1: # include <stdio.h> 2: 3: # include "../ingres.h" 4: # include "../aux.h" 5: # include "monitor.h" 6: 7: 8: /* 9: ** TRAPQUERY -- trap queries which succeeded. 10: ** 11: ** This module traps the current query into the file 12: ** specified by Trapfile. It will open Trapfile if 13: ** it is not already open. 14: ** 15: ** Parameters: 16: ** retcode -- the return code of the query. 17: ** name -- the name of the file in which to dump the 18: ** query buffer. 19: ** 20: ** Returns: 21: ** none. 22: ** 23: ** Side Effects: 24: ** Outputs the query buffer to Trapfile. 25: ** 26: ** Called By: 27: ** go. 28: ** 29: ** Files: 30: ** Trapfile -- the descriptor of the file in which to 31: ** trap the query. 32: ** Qbname -- the name of the query buffer. 33: ** 34: ** Trace Flags: 35: ** none 36: ** 37: ** Diagnostics: 38: ** none 39: ** 40: ** Bugs: 41: ** If 'name' (that is, the {querytrap} macro) changes 42: ** during a run, the output file does not change. 43: ** 44: ** History: 45: ** 3/2/79 -- Grabbed from michael. 46: */ 47: 48: FILE *Trapfile; 49: 50: trapquery(retcode, name) 51: struct retcode *retcode; 52: char *name; 53: { 54: register FILE *iop; 55: static int first; 56: register char *sp, c; 57: int timevec[2]; 58: extern fgetc(); 59: char *ctime(); 60: char *locv(); 61: 62: if (first < 0) 63: return; 64: if (Trapfile == NULL) 65: { 66: if ((Trapfile = fopen(name, "a")) == NULL) 67: { 68: printf("can't trap query in %s\n", name); 69: first = -1; 70: return; 71: } 72: } 73: if (first == 0) 74: { 75: time(timevec); 76: sp = ctime(timevec); 77: while (*sp) 78: putc(*sp++, Trapfile); 79: first++; 80: } 81: 82: if ((iop = fopen(Qbname, "r")) == NULL) 83: syserr("go: open 1"); 84: macinit(&fgetc, iop, 1); 85: 86: while ((c = macgetch()) > 0) 87: putc(c, Trapfile); 88: 89: if (retcode->rc_status == RC_OK) 90: { 91: sp = locv(retcode->rc_tupcount); 92: while (*sp) 93: putc(*sp++, Trapfile); 94: putc('\n', Trapfile); 95: } 96: 97: fclose(iop); 98: }