summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1996-07-23 02:23:54 +0000
committerMarc G. Fournier <scrappy@hub.org>1996-07-23 02:23:54 +0000
commit7344d6989878ff313d65a6ec15b6ed027b47e248 (patch)
tree236c86b0cc4ea9d920cbdf85f32780842a488fd7
parente11744e164c6fc3d10954bf1e2cf1f0b72804330 (diff)
downloadpostgresql-7344d6989878ff313d65a6ec15b6ed027b47e248.tar.gz
Finished merging in src/backend from Dr. George's source tree
-rw-r--r--src/backend/bootstrap/bootstrap.c21
-rw-r--r--src/backend/commands/copy.c101
-rw-r--r--src/backend/libpq/pqcomm.c15
-rw-r--r--src/backend/parser/Makefile.inc6
-rw-r--r--src/backend/parser/gram.y4
-rw-r--r--src/backend/parser/scan.l10
-rw-r--r--src/backend/parser/scansup.c8
-rw-r--r--src/backend/postmaster/postmaster.c6
-rw-r--r--src/backend/rewrite/rewriteManip.c4
9 files changed, 150 insertions, 25 deletions
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 <netdb.h> /* 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 <machine/limits.h>
# 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 {