ING_DB
This commit is contained in:
parent
e651edd9d8
commit
574f262941
|
|
@ -0,0 +1,62 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "constants.h"
|
||||||
|
# include "globals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** COMMENT.C -- routine to scan comments inside an EQL statement
|
||||||
|
**
|
||||||
|
** Uses the endcmnt token code to find the endcmnt
|
||||||
|
** terminal string, then reads the input until it sees this
|
||||||
|
** terminal (must be <= 2 characters), returning EOF_TOK and
|
||||||
|
** giving an error diagnostic if end-of-file is encountered.
|
||||||
|
**
|
||||||
|
** Returns:
|
||||||
|
** CONTINUE -- valid comment
|
||||||
|
** EOF_TOK -- EOF in comment
|
||||||
|
**
|
||||||
|
** Side Effects:
|
||||||
|
** deletes comments from within an EQL statement
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
comment()
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register int l;
|
||||||
|
register struct optab *op;
|
||||||
|
char buf[3];
|
||||||
|
|
||||||
|
/* find end of comment operator */
|
||||||
|
for (op = Optab; op->op_term; op++)
|
||||||
|
if (op->op_token == Tokens.sp_endcmnt)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!op->op_term)
|
||||||
|
AAsyserr(13000);
|
||||||
|
/* scan for the end of comment */
|
||||||
|
l = AAlength(op->op_term);
|
||||||
|
if (l > sizeof buf - 1)
|
||||||
|
AAsyserr(13001, l, op->op_term, sizeof buf -1);
|
||||||
|
|
||||||
|
/* fill buffer to length of endmnt terminal */
|
||||||
|
for (i = 0; i < l; i++)
|
||||||
|
{
|
||||||
|
if ((buf[i] = getch()) == EOF_TOK)
|
||||||
|
{
|
||||||
|
nontermcom :
|
||||||
|
/* non-terminated comment */
|
||||||
|
yysemerr("premature EOF encountered in comment", (char *) 0);
|
||||||
|
return (EOF_TOK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* shift on input until endcmnt */
|
||||||
|
while (!AAbequal(buf, op->op_term, l))
|
||||||
|
{
|
||||||
|
for (i = 0; i < l - 1; i++)
|
||||||
|
buf[i] = buf[i + 1];
|
||||||
|
if ((buf[l - 1] = getch()) == EOF_TOK)
|
||||||
|
goto nontermcom;
|
||||||
|
}
|
||||||
|
return (CONTINUE);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/tree.h"
|
||||||
|
# include "../h/pipes.h"
|
||||||
|
# include "IIglobals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** IIflushtup is called to syncronize the data pipe
|
||||||
|
** after a retrieve.
|
||||||
|
*/
|
||||||
|
IIflushtup(file_name, line_no)
|
||||||
|
register char *file_name;
|
||||||
|
register int line_no;
|
||||||
|
{
|
||||||
|
struct retcode ret;
|
||||||
|
|
||||||
|
if (IIproc_name = file_name)
|
||||||
|
IIline_no = line_no;
|
||||||
|
|
||||||
|
# ifdef xETR1
|
||||||
|
if (IIdebug)
|
||||||
|
printf("FLUSHTUP: IIerrflag %d\n", IIerrflag);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
if (IIerrflag < 2000)
|
||||||
|
{
|
||||||
|
/* flush the data pipe */
|
||||||
|
IIrdpipe(P_SYNC, &IIeinpipe, IIr_front);
|
||||||
|
IIrdpipe(P_PRIME, &IIeinpipe);
|
||||||
|
|
||||||
|
/* flush the control pipe */
|
||||||
|
if (IIrdpipe(P_NORM, &IIinpipe, IIr_down, &ret, sizeof (ret)) == sizeof (ret))
|
||||||
|
{
|
||||||
|
/* there was a tuple count field */
|
||||||
|
IItupcnt = ret.rc_tupcount;
|
||||||
|
}
|
||||||
|
IIrdpipe(P_SYNC, &IIinpipe, IIr_down);
|
||||||
|
IIrdpipe(P_PRIME, &IIinpipe);
|
||||||
|
}
|
||||||
|
IIin_retrieve = 0;
|
||||||
|
IIndoms = 0;
|
||||||
|
IIdoms = 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/tree.h"
|
||||||
|
# include "../h/pipes.h"
|
||||||
|
# include "IIglobals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** IIgettup is called to retrieve one instance
|
||||||
|
** of the target list into the c-variables.
|
||||||
|
**
|
||||||
|
** Integers and Floating point numbers can be converted
|
||||||
|
** to other numbers.
|
||||||
|
**
|
||||||
|
** Characters fields must match other character fields.
|
||||||
|
*/
|
||||||
|
IIgettup(file_name, line_no)
|
||||||
|
char *file_name;
|
||||||
|
int line_no;
|
||||||
|
{
|
||||||
|
register int length;
|
||||||
|
register int domain;
|
||||||
|
register struct retsym *ret;
|
||||||
|
char *s;
|
||||||
|
struct retsym sym;
|
||||||
|
char temp[MAXFIELD + 1];
|
||||||
|
extern char *IIitos();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (IIproc_name = file_name)
|
||||||
|
IIline_no = line_no;
|
||||||
|
|
||||||
|
if (IIerrflag)
|
||||||
|
return (0); /* error. no data will be coming */
|
||||||
|
|
||||||
|
ret = IIretsym;
|
||||||
|
domain = 0;
|
||||||
|
|
||||||
|
for ( ; ; )
|
||||||
|
{
|
||||||
|
if (IIrdpipe(P_NORM, &IIeinpipe, IIr_front, &sym, TYP_LEN_SIZ) != TYP_LEN_SIZ)
|
||||||
|
IIsyserr("GETTUP: READ TYP_LEN");
|
||||||
|
if (length = ctou(sym.len))
|
||||||
|
if (IIrdpipe(P_NORM, &IIeinpipe, IIr_front, temp, length) != length)
|
||||||
|
IIsyserr("GETTUP: READ VALUE len=%d", length);
|
||||||
|
# ifdef xETR1
|
||||||
|
if (IIdebug)
|
||||||
|
printf("GETTUP: typ %d len %d\n", sym.type, length);
|
||||||
|
# endif
|
||||||
|
domain++;
|
||||||
|
switch (sym.type)
|
||||||
|
{
|
||||||
|
|
||||||
|
case INT:
|
||||||
|
case FLOAT:
|
||||||
|
if (ret->type == CHAR)
|
||||||
|
{
|
||||||
|
s = IIitos(domain);
|
||||||
|
IIerror(1000, 1, &s);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (IIconvert(temp, ret->addr, sym.type, length, ret->type, ctou(ret->len)) < 0)
|
||||||
|
{
|
||||||
|
s = IIitos(domain);
|
||||||
|
IIerror(1001, 1, &s);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR:
|
||||||
|
if (ret->type != CHAR)
|
||||||
|
{
|
||||||
|
s = IIitos(domain);
|
||||||
|
IIerror(1002, 1, &s);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
IIbmove(temp, ret->addr, length);
|
||||||
|
ret->addr[length] = '\0'; /* null terminate string */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EOTUP:
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
case EXIT:
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
ret++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/tree.h"
|
||||||
|
# include "../h/pipes.h"
|
||||||
|
# include "IIglobals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** IIN_GET -- Routine to check if there is a next
|
||||||
|
** tuple coming up the data pipe in a retrieve.
|
||||||
|
** Loads IIr_sym with the length and type of
|
||||||
|
** the next domain.
|
||||||
|
**
|
||||||
|
** Returns:
|
||||||
|
** 0 -- on error or end of tuple
|
||||||
|
** 1 -- otherwise
|
||||||
|
*/
|
||||||
|
IIn_get(file_name, line_no)
|
||||||
|
register char *file_name;
|
||||||
|
register int line_no;
|
||||||
|
{
|
||||||
|
register struct retsym *ret;
|
||||||
|
|
||||||
|
if (IIproc_name = file_name)
|
||||||
|
IIline_no = line_no;
|
||||||
|
|
||||||
|
# ifdef xETR1
|
||||||
|
if (IIdebug)
|
||||||
|
printf("N_GET: IIdoms %d IIr_sym (typ %d len %d) IIerrflag %d\n",
|
||||||
|
IIdoms, IIr_sym.type, IIr_sym.len, IIerrflag);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
IIdoms = 0;
|
||||||
|
/* in case of overflow error, a tuple has been skipped */
|
||||||
|
if (IIerrflag == 1001)
|
||||||
|
IIerrflag = 0;
|
||||||
|
if (IIerrflag)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
ret = &IIr_sym;
|
||||||
|
if (ret->type && ret->type != EOTUP)
|
||||||
|
IIsyserr("N_GET: Unbekannter Typ %d", ret->type);
|
||||||
|
|
||||||
|
/* read next type, length pair */
|
||||||
|
if (IIrdpipe(P_NORM, &IIeinpipe, IIr_front, ret, TYP_LEN_SIZ) != TYP_LEN_SIZ)
|
||||||
|
IIsyserr("N_GET: READ TYP_LEN");
|
||||||
|
|
||||||
|
if (ret->type == EXIT)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** IIERRTEST -- Test if an error occurred within a retrieve.
|
||||||
|
**
|
||||||
|
** Returns:
|
||||||
|
** 1 -- if so
|
||||||
|
** 0 -- if not
|
||||||
|
*/
|
||||||
|
IIerrtest()
|
||||||
|
{
|
||||||
|
return (IIerrflag? 1: 0);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/pipes.h"
|
||||||
|
# include "IIglobals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** IIsetup is called to mark the start of a retrieve.
|
||||||
|
*/
|
||||||
|
IIsetup()
|
||||||
|
{
|
||||||
|
# ifdef xETR1
|
||||||
|
if (IIdebug)
|
||||||
|
printf("SETUP\n");
|
||||||
|
# endif
|
||||||
|
|
||||||
|
IIin_retrieve = 1;
|
||||||
|
IIr_sym.type = 0;
|
||||||
|
IIr_sym.len = 0;
|
||||||
|
IIdoms = 0;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/symbol.h"
|
||||||
|
# include "../h/pipes.h"
|
||||||
|
# include "IIglobals.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** IIsync is called to syncronize the running
|
||||||
|
** of a query with the running of the EQL process.
|
||||||
|
**
|
||||||
|
** The query is flushed and an EOP is written
|
||||||
|
** to the QL parser.
|
||||||
|
**
|
||||||
|
** The QL parser will write an end-of-pipe when
|
||||||
|
** an operation is complete.
|
||||||
|
*/
|
||||||
|
IIsync(file_name, line_no)
|
||||||
|
register char *file_name;
|
||||||
|
register int line_no;
|
||||||
|
{
|
||||||
|
if (IIproc_name = file_name)
|
||||||
|
IIline_no = line_no;
|
||||||
|
|
||||||
|
# ifdef xETR1
|
||||||
|
if (IIdebug)
|
||||||
|
printf("SYNC\n");
|
||||||
|
# endif
|
||||||
|
|
||||||
|
IIwrpipe(P_END, &IIoutpipe, IIw_down);
|
||||||
|
IIwrpipe(P_PRIME, &IIoutpipe, IIw_down);
|
||||||
|
|
||||||
|
IIerrflag = 0; /* reset error flag. If an error occures, */
|
||||||
|
/* IIerrflag will get set in IIerror */
|
||||||
|
IIrdpipe(P_SYNC, &IIinpipe, IIr_down);
|
||||||
|
IIrdpipe(P_PRIME, &IIinpipe);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue