diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index e292ded1d8..d8dff69051 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -7,7 +7,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.3 1996/07/16 07:12:27 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.4 1996/07/23 02:23:05 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -137,7 +137,7 @@ AttributeTupleForm attrtypes[MAXATTR]; /* points to attribute info */ static char *values[MAXATTR]; /* cooresponding attribute values */ int numattr; /* number of attributes for cur. rel */ #ifdef OPENLINK_PATCHES -extern int fsyncOff; /* do not fsync the database */ +extern int fsyncOff; /* do not fsync the database */ #endif #if defined(WIN32) || defined(PORTNAME_next) @@ -187,7 +187,9 @@ typedef void (*sig_func)(); * error handling / abort routines * ---------------- */ -#if !defined(PORTNAME_bsdi) && !defined(PORTNAME_bsdi_2_1) +# if !defined(PORTNAME_BSD44_derived) && \ + !defined(PORTNAME_bsdi) && \ + !defined(PORTNAME_bsdi_2_1) void err() { Warnings++; @@ -266,7 +268,7 @@ BootstrapMain(int argc, char *argv[]) Quiet = 0; Noversion = 0; dbName = NULL; - + #ifdef OPENLINK_PATCHES while ((flag = getopt(argc, argv, "dCOQP:F")) != EOF) { #else @@ -279,6 +281,11 @@ BootstrapMain(int argc, char *argv[]) case 'C': Noversion = 1; break; +#ifdef OPENLINK_PATCHES + case 'F': + fsyncOff = 1; + break; +#endif case 'O': override = true; break; @@ -288,12 +295,6 @@ BootstrapMain(int argc, char *argv[]) case 'P':/* specify port */ portFd = atoi(optarg); break; -#ifdef OPENLINK_PATCHES - case 'F': - fsyncOff = 1; - break; -#endif - break; default: usage(); break; diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 7e10818abf..f6815a3631 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.1.1.1 1996/07/09 06:21:19 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.2 1996/07/23 02:23:15 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -650,6 +650,10 @@ GetIndexRelations(Oid main_relation_oid, heap_endscan(scandesc); heap_close(pg_index_rel); + /* We cannot trust to relhasindex of the main_relation now, so... */ + if ( *n_indices == 0 ) + return; + *index_rels = (Relation *) palloc(*n_indices * sizeof(Relation)); for (i = 0, scan = head; i < *n_indices; i++, scan = scan->next) { @@ -726,6 +730,67 @@ CopyReadAttribute(int attno, FILE *fp, bool *isnull, char *delim) } }else if (c == '\\') { c = getc(fp); +#ifdef ESCAPE_PATCH +#define ISOCTAL(c) (((c) >= '0') && ((c) <= '7')) +#define VALUE(c) ((c) - '0') + if (feof(fp)) { + *isnull = (bool) false; + return(NULL); + } + switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': { + int val; + val = VALUE(c); + c = getc(fp); + if (ISOCTAL(c)) { + val = (val<<3) + VALUE(c); + c = getc(fp); + if (ISOCTAL(c)) { + val = (val<<3) + VALUE(c); + } else { + if (feof(fp)) { + *isnull = (bool) false; + return(NULL); + } + ungetc(c, fp); + } + } else { + if (feof(fp)) { + *isnull = (bool) false; + return(NULL); + } + ungetc(c, fp); + } + c = val & 0377; + } + break; + case 'b': + c = '\b'; + break; + case 'f': + c = '\f'; + break; + case 'n': + c = '\n'; + break; + case 'r': + c = '\r'; + break; + case 't': + c = '\t'; + break; + case 'v': + c = '\v'; + break; + } +#endif }else if (inString(c,delim) || c == '\n') { done = 1; } @@ -743,6 +808,39 @@ CopyReadAttribute(int attno, FILE *fp, bool *isnull, char *delim) } } +#ifdef ESCAPE_PATCH +static void +CopyAttributeOut(FILE *fp, char *string, char *delim) +{ + char c; + int is_array = false; + int len = strlen(string); + + /* XXX - This is a kludge, we should check the data type */ + if (len && (string[0] == '{') && (string[len-1] == '}')) { + is_array = true; + } + + for ( ; c = *string; string++) { + if ((c == delim[0]) || (c == '\n')) { + fputc('\\', fp); + } else if ((c == '\\') && is_array) { + if (*(string+1) == '\\') { + /* translate \\ to \\\\ */ + fputc('\\', fp); + fputc('\\', fp); + fputc('\\', fp); + string++; + } else if (*(string+1) == '"') { + /* translate \" to \\\" */ + fputc('\\', fp); + fputc('\\', fp); + } + } + fputc(*string, fp); + } +} +#else static void CopyAttributeOut(FILE *fp, char *string, char *delim) { @@ -756,6 +854,7 @@ CopyAttributeOut(FILE *fp, char *string, char *delim) fputc(string[i], fp); } } +#endif /* * Returns the number of tuples in a relation. Unfortunately, currently diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 7fc4a85f20..f207553b97 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.1.1.1 1996/07/09 06:21:31 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.2 1996/07/23 02:23:25 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -551,6 +551,7 @@ StreamServerPort(char *hostName, short portName, int *fdP) { struct sockaddr_in sin; int fd; + int one = 1; #ifdef WIN32 /* This is necessary to make it possible for a backend to use @@ -575,7 +576,17 @@ StreamServerPort(char *hostName, short portName, int *fdP) pqdebug("%s", PQerrormsg); return(STATUS_ERROR); } - + + if((setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, + sizeof(one))) == -1) { + (void) sprintf(PQerrormsg, + "FATAL: StreamServerPort: setsockopt (SO_REUSEADDR) failed: errno=%d\n", + errno); + fputs(PQerrormsg, stderr); + pqdebug("%s", PQerrormsg); + return(STATUS_ERROR); + } + sin.sin_family = AF_INET; sin.sin_port = htons(portName); diff --git a/src/backend/parser/Makefile.inc b/src/backend/parser/Makefile.inc index 38607f6fb0..e5390dd891 100644 --- a/src/backend/parser/Makefile.inc +++ b/src/backend/parser/Makefile.inc @@ -7,7 +7,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/parser/Attic/Makefile.inc,v 1.1.1.1 1996/07/09 06:21:39 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/backend/parser/Attic/Makefile.inc,v 1.2 1996/07/23 02:23:32 scrappy Exp $ # #------------------------------------------------------------------------- @@ -34,13 +34,13 @@ $(objdir)/scan.o: scan.c SRCS_PARSER+= analyze.c catalog_utils.c dbcommands.c gram.c \ - keywords.c parser.c parse_query.c scan.c scansup.c + keywords.c parser.c parse_query.c scan.c scansup.c sysfunc.c CLEANFILES+= scan.c ${PARSEYACCS} POSTGRES_DEPEND+= scan.c $(PARSEYACCS) HEADERS+= catalog_utils.h io.h parse_query.h parsetree.h \ - dbcommands.h keywords.h + dbcommands.h keywords.h sysfunc.c diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 19529d1fa2..4fbfbbc8ae 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.1.1.1 1996/07/09 06:21:40 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.2 1996/07/23 02:23:33 scrappy Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -515,7 +515,7 @@ fetch_how_many: Iconst { $$ = $1; if ($1 <= 0) elog(WARN,"Please specify nonnegative count for fetch"); } | ALL { $$ = 0; /* 0 means fetch all tuples*/} - | /*EMPTY*/ { $$ = 0; /*default*/ } + | /*EMPTY*/ { $$ = 1; /*default*/ } ; /***************************************************************************** diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index d3b3b9a3f2..5bbe242c31 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.1.1.1 1996/07/09 06:21:41 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.2 1996/07/23 02:23:34 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -29,6 +29,7 @@ #include "nodes/parsenodes.h" #include "parser/keywords.h" #include "parser/scansup.h" +#include "parser/sysfunc.h" #include "parse.h" #include "utils/elog.h" #include "utils/palloc.h" @@ -61,6 +62,8 @@ digit [0-9] letter [_A-Za-z] letter_or_digit [_A-Za-z0-9] +sysfunc SYS_{letter}{letter_or_digit}* + identifier {letter}{letter_or_digit}* self [,()\[\].;$\:\+\-\*\/\<\>\=\|] @@ -83,6 +86,11 @@ space [ \t\n\f] other . %% +{sysfunc} { + yylval.str = pstrdup(SystemFunctionHandler((char *)yytext)); + return (SCONST); + } + {comment} { /* ignore */ } "::" { return TYPECAST; } diff --git a/src/backend/parser/scansup.c b/src/backend/parser/scansup.c index bd7ef26004..daacf8b206 100644 --- a/src/backend/parser/scansup.c +++ b/src/backend/parser/scansup.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.1.1.1 1996/07/09 06:21:41 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.2 1996/07/23 02:23:35 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -134,7 +134,11 @@ scanstr(char *s) } } default: - elog (WARN, "Bad escape sequence, s[i] = %d", s[i]); +#ifdef ESCAPE_PATCH + newStr[j] = s[i]; +#else + elog (WARN, "Bad escape sequence, s[i] = %d", s[i]); +#endif } /* switch */ } /* s[i] == '\\' */ else diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index c533acb794..570f7243fe 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.2 1996/07/16 07:13:07 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.3 1996/07/23 02:23:47 scrappy Exp $ * * NOTES * @@ -49,7 +49,9 @@ #define MAXINT INT_MAX #else #include /* for MAXHOSTNAMELEN on some */ -# if defined(PORTNAME_BSD44_derived) || defined(PORTNAME_bsdi) || defined(PORTNAME_bsdi_2_1) +# if defined(PORTNAME_BSD44_derived) || \ + defined(PORTNAME_bsdi) || \ + defined(PORTNAME_bsdi_2_1) # include # define MAXINT INT_MAX # else diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index d5b6934649..a26ee5ae42 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.1.1.1 1996/07/09 06:21:52 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.2 1996/07/23 02:23:54 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -319,7 +319,7 @@ nodeHandleRIRAttributeRule(Node **nodePtr, if (name_to_look_for.data[0]) { Node *n; - n = FindMatchingTLEntry(targetlist, &name_to_look_for); + n = FindMatchingTLEntry(targetlist, (char *)&name_to_look_for); if (n == NULL) { *nodePtr = make_null(((Var*) node)->vartype); } else {