|
|
1.1 ! root 1: # include <stdio.h> ! 2: # include <ingres.h> ! 3: # include <range.h> ! 4: # include <tree.h> ! 5: # include <func.h> ! 6: # include <pv.h> ! 7: # include "parser.h" ! 8: # include <sccs.h> ! 9: # include <errors.h> ! 10: ! 11: SCCSID(@(#)parser.c 8.3 2/8/85) ! 12: ! 13: short tTparser[100]; ! 14: ! 15: extern int parser(); ! 16: extern int par_init(); ! 17: ! 18: struct fn_def ParserFn = ! 19: { ! 20: "PARSER", ! 21: parser, ! 22: par_init, ! 23: NULL, ! 24: NULL, ! 25: 0, ! 26: tTparser, ! 27: 100, ! 28: 'P', ! 29: 0 ! 30: }; ! 31: ! 32: DESC Reldesc; ! 33: struct atstash Attable[MAXATT];/* attrib stash space, turned into a list later */ ! 34: struct atstash *Freeatt; /* free list of attrib stash */ ! 35: QTREE *Tidnode; /* pointer to tid node of targ list ! 36: for REPLACE, DELETE */ ! 37: QTREE *Lastree; /* pointer to root node of tree */ ! 38: DELIMLIST *Delimhead; /* pointer to head of Delim queue */ ! 39: static int FirstCall = 1; /* true for the very first call of the parser */ ! 40: extern struct atstash Faketid; /* atstash structure for TID node */ ! 41: #ifdef DISTRIB ! 42: extern struct atstash Fakesid; /* atstash structure for SID node */ ! 43: #endif ! 44: ! 45: int Rsdmno; /* result domain number */ ! 46: int Opflag; /* operator flag contains query mode */ ! 47: char *Relspec; /* ptr to storage structure of result relation */ ! 48: char *Indexspec; /* ptr to stor strctr of index */ ! 49: char *Indexname; /* ptr to name of index */ ! 50: char Trfrmt; /* format for type checking */ ! 51: char Trfrml; /* format length for type checking */ ! 52: char *Trname; /* pointer to attribute name */ ! 53: int Agflag; /* how many aggs in this qry */ ! 54: int Equel; /* indicates EQUEL preprocessor on */ ! 55: int Ingerr; /* set to error num if a query returns ! 56: an error from processes below */ ! 57: int Qlflag; /* set when processing a qual */ ! 58: int Noupdt; /* INGRES user override of no update restriction */ ! 59: int Err_fnd; /* no actions done if 1 */ ! 60: int Err_current; /* 1 if error found in current statement */ ! 61: int yyline; /* line counter */ ! 62: int Dcase; /* default case mapping */ ! 63: int Permcomd; ! 64: int Qrymod; /* qrymod on in database flag */ ! 65: TID tid; ! 66: char *malloc(); ! 67: ! 68: ! 69: /* ! 70: ** PARSER -- the actual main routine ! 71: ** ! 72: ** Trace Flags: ! 73: ** Parser ~~ 64 ! 74: */ ! 75: ! 76: parser() ! 77: { ! 78: ! 79: int i; ! 80: ! 81: ! 82: # ifdef xPTR1 ! 83: tTfp(64, 0, "Parser %d\n", getpid()); ! 84: # endif ! 85: ! 86: if (FirstCall) ! 87: { ! 88: FirstCall = 0; ! 89: if ((i = openr(&Reldesc, OR_WRITE, "rdelim")) < 0) ! 90: syserr("relname: error in openr '%d'", i); ! 91: if (i > 0) ! 92: { ! 93: /* invalid relation name */ ! 94: par_error(RNGEXIST, WARN, "rdelim", 0); ! 95: } ! 96: else ! 97: { ! 98: if ((i = make_list(&Reldesc, "system")) < 0) ! 99: par_error(DELEXIST, WARN, 0); ! 100: } ! 101: closer(&Reldesc); ! 102: } ! 103: if (startgo() < 0) ! 104: { ! 105: endgo(); ! 106: return (-1); ! 107: } ! 108: ! 109: if (yyparse()) /* yyparse returns 1 in case of error */ ! 110: { ! 111: endgo(); ! 112: return (-2); ! 113: } ! 114: ! 115: if (endgo() < 0) ! 116: return (-3); ! 117: ! 118: return(0); ! 119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.