]> granicus.if.org Git - postgresql/commitdiff
contrib-array.patch
authorBruce Momjian <bruce@momjian.us>
Sun, 13 Feb 2000 18:59:53 +0000 (18:59 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 13 Feb 2000 18:59:53 +0000 (18:59 +0000)
        this is an old patch which I have already submitted and never seen
        in the sources. It corrects the datatype oids used in some iterator
        functions. This bug has been reported to me by many other people.

contrib-datetime.patch

        some code contributed by Reiner Dassing <dassing@wettzell.ifag.de>

contrib-makefiles.patch

        fixes all my contrib makefiles which don't work with some compilers,
        as reported to me by another user.

contrib-miscutil.patch

        an old patch for one of my old contribs.

contrib-string.patch

        a small change to the c-like text output functions. Now the '{'
        is escaped only at the beginning of the string to distinguish it
        from arrays, and the '}' is no more escaped.

elog-lineno.patch

        adds the current lineno of CopyFrom to elog messages. This is very
        useful when you load a 1 million tuples table from an external file
        and there is a bad value somehere. Currently you get an error message
        but you can't know where is the bad data. The patch uses a variable
        which was declared static in copy.c. The variable is now exported
        and initialized to 0. It is always cleared at the end of the copy
        or at the first elog message or when the copy is canceled.
        I know this is very ugly but I can't find any better way of knowing
        where the copy fails and I have this problem quite often.

plperl-makefile.patch

        fixes a typo in a makefile, but the error must be elsewhere because
        it is a file generated automatically. Please have a look.

tprintf-timestamp.patch

        restores the original 2-digit year format, assuming that the two
        century digits don't carry much information and that '000202' is
        easier to read than 20000202. Being only a log file it shouldn't
        break anything.

Please apply the patches before the next scheduled code freeze.

I also noticed that some of the contribs don't compile correcly. Should we
ask people to fix their code or rename their makefiles so that they are
ignored by the top makefile?

--
Massimo Dal Zotto

17 files changed:
contrib/array/Makefile
contrib/array/array_iterator.c
contrib/datetime/Makefile
contrib/datetime/datetime_functions.c
contrib/miscutil/Makefile
contrib/miscutil/misc_utils.c
contrib/miscutil/misc_utils.h
contrib/string/Makefile
contrib/string/string_io.c
contrib/string/string_io.h
contrib/userlock/Makefile
src/backend/commands/copy.c
src/backend/utils/error/elog.c
src/backend/utils/misc/trace.c
src/include/commands/copy.h
src/include/utils/trace.h
src/pl/plperl/Makefile.PL

index 85e8d42ade4239dfc1b6e6144a54575a9be15058..951250a29dd48110e92f57e83052e7d5dacf81d2 100644 (file)
@@ -11,10 +11,10 @@ SRCDIR = $(PGDIR)/src
 
 include $(SRCDIR)/Makefile.global
 
-INCLUDE_OPT =  -I ./ \
-               -I $(SRCDIR)/ \
-               -I $(SRCDIR)/include \
-               -I $(SRCDIR)/port/$(PORTNAME)
+INCLUDE_OPT =  -I./ \
+               -I$(SRCDIR)/ \
+               -I$(SRCDIR)/include \
+               -I$(SRCDIR)/port/$(PORTNAME)
 
 CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL)
 
index 5417d2da52f69050b1d87f926eb33208ea122c98..cadda58a8f47973b84c836450a6c2664cbf71ebf 100644 (file)
@@ -66,7 +66,7 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
        }
 
        /* Lookup element type information */
-       typ_tuple = SearchSysCacheTuple(TYPOID, ObjectIdGetDatum(elemtype), 0, 0, 0);
+       typ_tuple = SearchSysCacheTuple(TYPEOID, ObjectIdGetDatum(elemtype), 0, 0, 0);
        if (!HeapTupleIsValid(typ_tuple))
        {
                elog(ERROR, "array_iterator: cache lookup failed for type %d", elemtype);
@@ -183,7 +183,7 @@ array_all_textregexeq(ArrayType *array, char *value)
 int32
 array_varchareq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* varchar */
+       return array_iterator((Oid) 1043,       /* varchar */
                                                  (Oid) 1070,   /* varchareq */
                                                  0,                    /* logical or */
                                                  array, (Datum) value);
@@ -192,7 +192,7 @@ array_varchareq(ArrayType *array, char *value)
 int32
 array_all_varchareq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* varchar */
+       return array_iterator((Oid) 1043,       /* varchar */
                                                  (Oid) 1070,   /* varchareq */
                                                  1,                    /* logical and */
                                                  array, (Datum) value);
@@ -201,7 +201,7 @@ array_all_varchareq(ArrayType *array, char *value)
 int32
 array_varcharregexeq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* varchar */
+       return array_iterator((Oid) 1043,       /* varchar */
                                                  (Oid) 1254,   /* textregexeq */
                                                  0,                    /* logical or */
                                                  array, (Datum) value);
@@ -210,7 +210,7 @@ array_varcharregexeq(ArrayType *array, char *value)
 int32
 array_all_varcharregexeq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* varchar */
+       return array_iterator((Oid) 1043,       /* varchar */
                                                  (Oid) 1254,   /* textregexeq */
                                                  1,                    /* logical and */
                                                  array, (Datum) value);
@@ -224,7 +224,7 @@ array_all_varcharregexeq(ArrayType *array, char *value)
 int32
 array_bpchareq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* bpchar */
+       return array_iterator((Oid) 1042,       /* bpchar */
                                                  (Oid) 1048,   /* bpchareq */
                                                  0,                    /* logical or */
                                                  array, (Datum) value);
@@ -233,7 +233,7 @@ array_bpchareq(ArrayType *array, char *value)
 int32
 array_all_bpchareq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* bpchar */
+       return array_iterator((Oid) 1042,       /* bpchar */
                                                  (Oid) 1048,   /* bpchareq */
                                                  1,                    /* logical and */
                                                  array, (Datum) value);
@@ -242,7 +242,7 @@ array_all_bpchareq(ArrayType *array, char *value)
 int32
 array_bpcharregexeq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* bpchar */
+       return array_iterator((Oid) 1042,       /* bpchar */
                                                  (Oid) 1254,   /* textregexeq */
                                                  0,                    /* logical or */
                                                  array, (Datum) value);
@@ -251,7 +251,7 @@ array_bpcharregexeq(ArrayType *array, char *value)
 int32
 array_all_bpcharregexeq(ArrayType *array, char *value)
 {
-       return array_iterator((Oid) 20,         /* bpchar */
+       return array_iterator((Oid) 1042,       /* bpchar */
                                                  (Oid) 1254,   /* textregexeq */
                                                  1,                    /* logical and */
                                                  array, (Datum) value);
index b53293e172234420a608abc6c89cc7c0d24b88b6..195c0f8d689e2dcd57bcf288b3758c9a20d144eb 100644 (file)
@@ -11,10 +11,10 @@ SRCDIR = $(PGDIR)/src
 
 include $(SRCDIR)/Makefile.global
 
-INCLUDE_OPT =  -I ./ \
-               -I $(SRCDIR)/ \
-               -I $(SRCDIR)/include \
-               -I $(SRCDIR)/port/$(PORTNAME)
+INCLUDE_OPT =  -I./ \
+               -I$(SRCDIR)/ \
+               -I$(SRCDIR)/include \
+               -I$(SRCDIR)/port/$(PORTNAME)
 
 CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL)
 
index 910647118aa772bf78dee2c34139c68bb5f2e5ec..c5b8bc25e9d2789611846cb849850b2e1b81270b 100644 (file)
@@ -5,6 +5,8 @@
  *
  * Copyright (C) 1999, Massimo Dal Zotto <dz@cs.unitn.it>
  *
+ * Date2mjd code contributed by Reiner Dassing <dassing@wettzell.ifag.de>
+ *
  * This software is distributed under the GNU General Public License
  * either version 2, or (at your option) any later version.
  */
@@ -73,7 +75,7 @@ decode_24h_time(char *str, struct tm *tm, double *fsec)
        if (   (tm->tm_hour < 0) || (tm->tm_hour > 24)
                || (tm->tm_min  < 0) || (tm->tm_min  > 59)
                || (tm->tm_sec  < 0) || (tm->tm_sec  > 59)
-               || (fsec        < 0) )
+               || (*fsec       < 0) )
                return -1;
 
        return 0;
@@ -260,6 +262,16 @@ currentdate()
        return (date);
 }
 
+int4
+date2mjd(DateADT val)
+{
+       int result;
+
+       result = val + JDATE_2000 - 2400000.5;
+
+       return result;
+}
+
 /* end of file */
 
 /*
index fa3c99fa1db415ff372f6d910b38f7d6a9d605c4..fd0065b86ef6510e791ad26baea10d1c7ad9806e 100644 (file)
@@ -11,10 +11,10 @@ SRCDIR = $(PGDIR)/src
 
 include $(SRCDIR)/Makefile.global
 
-INCLUDE_OPT =  -I ./ \
-               -I $(SRCDIR)/ \
-               -I $(SRCDIR)/include \
-               -I $(SRCDIR)/port/$(PORTNAME)
+INCLUDE_OPT =  -I./ \
+               -I$(SRCDIR)/ \
+               -I$(SRCDIR)/include \
+               -I$(SRCDIR)/port/$(PORTNAME)
 
 CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL)
 
index 21341dc73c9e750a174b9f0ff1338e4a707a9fd4..6745b5b8bb9a9e049c19e181b875f64e45fae7ab 100644 (file)
@@ -121,6 +121,7 @@ active_listeners(text *relname)
        return count;
 }
 
+#ifdef USE_ASSERT_CHECKING
 int
 assert_enable(int val)
 {
@@ -134,6 +135,7 @@ assert_test(int val)
        return assertTest(val);
 }
 #endif
+#endif
 
 /* end of file */
 
index 61217244a2d26539781a13eef124f08b85b041ef..139df3bc775cadc75e3a75cac7e2a812c601cd58 100644 (file)
@@ -6,13 +6,15 @@ int                   backend_pid(void);
 int                    unlisten(char *relname);
 int                    max(int x, int y);
 int                    min(int x, int y);
-int                    assert_enable(int val);
+int                    active_listeners(text *relname);
 
+#ifdef USE_ASSERT_CHECKING
+int                    assert_enable(int val);
 #ifdef ASSERT_CHECKING_TEST
 int                    assert_test(int val);
 #endif
+#endif
 
-int                    active_listeners(text *relname);
 #endif
 
 /*
index b77ace937cf85842c6edc153bdc1b7f478f47dfa..dd8f0e6f2a6071a4039a0067523be9cdb5fa4069 100644 (file)
@@ -11,10 +11,10 @@ SRCDIR = $(PGDIR)/src
 
 include $(SRCDIR)/Makefile.global
 
-INCLUDE_OPT =  -I ./ \
-               -I $(SRCDIR)/ \
-               -I $(SRCDIR)/include \
-               -I $(SRCDIR)/port/$(PORTNAME)
+INCLUDE_OPT =  -I./ \
+               -I$(SRCDIR)/ \
+               -I$(SRCDIR)/include \
+               -I$(SRCDIR)/port/$(PORTNAME)
 
 CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL)
 
index e1fc867497fdb4f121cb4c6202f2629b4fb50f78..9407e6a21b3d37425140ad96b43f1e08affedca8 100644 (file)
@@ -50,8 +50,8 @@
  *     representation of data.
  */
 
-char *
-string_output(char *data, int size)
+unsigned char *
+string_output(unsigned char *data, int size)
 {
        register unsigned char c,
                           *p,
@@ -79,8 +79,6 @@ string_output(char *data, int size)
                {
                        case '\\':
                        case '"':
-                       case '{':
-                       case '}':
                        case '\b':
                        case '\f':
                        case '\n':
@@ -89,6 +87,12 @@ string_output(char *data, int size)
                        case '\v':
                                len++;
                                break;
+                       case '{':
+                               /* Escape beginning of string, to distinguish from arrays */
+                               if (p == data) {
+                                       len++;
+                               }
+                               break;
                        default:
                                if (NOTPRINTABLE(*p))
                                        len += 3;
@@ -104,8 +108,6 @@ string_output(char *data, int size)
                {
                        case '\\':
                        case '"':
-                       case '{':
-                       case '}':
                                *r++ = '\\';
                                *r++ = c;
                                break;
@@ -133,6 +135,13 @@ string_output(char *data, int size)
                                *r++ = '\\';
                                *r++ = 'v';
                                break;
+                       case '{':
+                               /* Escape beginning of string, to distinguish from arrays */
+                               if (p == data) {
+                                       *r++ = '\\';
+                               }
+                               *r++ = c;
+                               break;
                        default:
                                if (NOTPRINTABLE(c))
                                {
@@ -180,8 +189,8 @@ string_output(char *data, int size)
  *     a pointer to the new string or the header.
  */
 
-char *
-string_input(char *str, int size, int hdrsize, int *rtn_size)
+unsigned char *
+string_input(unsigned char *str, int size, int hdrsize, int *rtn_size)
 {
        register unsigned char *p,
                           *r;
@@ -285,7 +294,7 @@ string_input(char *str, int size, int hdrsize, int *rtn_size)
        return ((char *) result);
 }
 
-char *
+unsigned char *
 c_charout(int32 c)
 {
        char            str[2];
@@ -300,7 +309,7 @@ c_charout(int32 c)
  * This can be used for SET, bytea, text and unknown data types
  */
 
-char *
+unsigned char *
 c_textout(struct varlena * vlena)
 {
        int                     len = 0;
@@ -318,8 +327,8 @@ c_textout(struct varlena * vlena)
  * This can be used for varchar and bpchar strings
  */
 
-char *
-c_varcharout(char *s)
+unsigned char *
+c_varcharout(unsigned char *s)
 {
        int                     len = 0;
 
@@ -333,7 +342,7 @@ c_varcharout(char *s)
 
 #if 0
 struct varlena *
-c_textin(char *str)
+c_textin(unsigned char *str)
 {
        struct varlena *result;
        int                     len;
@@ -348,7 +357,7 @@ c_textin(char *str)
 }
 
 int32 *
-c_charin(char *str)
+c_charin(unsigned char *str)
 {
        return (string_input(str, 1, 0, NULL));
 }
index b1d2b7e2c28fd9b4c7eae76f0230aa2955988289..e79d7fd28febc7392d56c8102c166561c2182883 100644 (file)
@@ -1,19 +1,16 @@
 #ifndef STRING_IO_H
 #define STRING_IO_H
 
-char      *string_output(char *data, int size);
-char      *string_input(char *str, int size, int hdrsize, int *rtn_size);
-char      *c_charout(int32 c);
-char      *c_char2out(uint16 s);
-char      *c_char4out(uint32 s);
-char      *c_char8out(char *s);
-char      *c_char16out(char *s);
-char      *c_textout(struct varlena * vlena);
-char      *c_varcharout(char *s);
+unsigned char* string_output(unsigned char *data, int size);
+unsigned char* string_input(unsigned char *str, int size, int hdrsize,
+                                                         int *rtn_size);
+unsigned char* c_charout(int32 c);
+unsigned char* c_textout(struct varlena * vlena);
+unsigned char* c_varcharout(unsigned char *s);
 
 #if 0
-struct varlena *c_textin(char *str);
-char      *c_char16in(char *str);
+struct varlena*        c_textin(unsigned char *str);
+int32*                 c_charin(unsigned char *str)
 #endif
 
 #endif
index 391956ad7e77189822ff91bafdcdce1d67628b8a..23975185b2a8f78f10583ac3e8e86e66fc5cd4e6 100644 (file)
@@ -11,10 +11,10 @@ SRCDIR = $(PGDIR)/src
 
 include $(SRCDIR)/Makefile.global
 
-INCLUDE_OPT =  -I ./ \
-               -I $(SRCDIR)/ \
-               -I $(SRCDIR)/include \
-               -I $(SRCDIR)/port/$(PORTNAME)
+INCLUDE_OPT =  -I./ \
+               -I$(SRCDIR)/ \
+               -I$(SRCDIR)/include \
+               -I$(SRCDIR)/port/$(PORTNAME)
 
 CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL)
 
index 7a23a063aaf7bc8e78ecf4ea0641daecc2050921..85a50c103988345bbc48aefb020cd620961fca4c 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.100 2000/02/09 00:10:11 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.101 2000/02/13 18:59:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -64,7 +64,7 @@ static int    CountTuples(Relation relation);
  * Static communication variables ... pretty grotty, but COPY has
  * never been reentrant...
  */
-static int     lineno;
+int            lineno = 0;             /* used by elog() -- dz */
 static bool    fe_eof;
 
 /*
@@ -726,8 +726,10 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim, char *null
 
        while (!done)
        {
-               if (QueryCancel)
+               if (QueryCancel) {
+                       lineno = 0;
                        CancelQuery();
+               }
 
                if (!binary)
                {
@@ -931,6 +933,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim, char *null
                if (!reading_to_eof && ntuples == tuples_read)
                        done = true;
        }
+       lineno = 0;
        pfree(values);
        pfree(nulls);
        pfree(index_nulls);
index 71fd9c8354f2c7b5b9d2da3cb68be7116947f148..1a61d7e6d17828c628c51206df6d4c6f0a8ff3cd 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.54 2000/01/26 05:57:20 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.55 2000/02/13 18:59:50 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -35,6 +35,7 @@
 #include "storage/proc.h"
 #include "tcop/tcopprot.h"
 #include "utils/trace.h"
+#include "commands/copy.h"
 
 extern int     errno;
 extern int     sys_nerr;
@@ -164,7 +165,7 @@ elog(int lev, const char *fmt, ...)
         * (since vsnprintf won't know what to do with %m).  To keep
         * space calculation simple, we only allow one %m.
         */
-       space_needed = TIMESTAMP_SIZE + strlen(prefix) + indent 
+       space_needed = TIMESTAMP_SIZE + strlen(prefix) + indent + (lineno ? 24 : 0)
                + strlen(fmt) + strlen(errorstr) + 1;
        if (space_needed > (int) sizeof(fmt_fixedbuf))
        {
@@ -186,6 +187,14 @@ elog(int lev, const char *fmt, ...)
        bp = fmt_buf + strlen(fmt_buf);
        while (indent-- > 0)
                *bp++ = ' ';
+
+       /* If error was in CopyFrom() print the offending line number -- dz */
+       if (lineno) {
+           sprintf(bp, "copy: line %d, ", lineno);
+           bp = fmt_buf + strlen(fmt_buf);
+           lineno = 0;
+       }
+
        for (cp = fmt; *cp; cp++)
        {
                if (cp[0] == '%' && cp[1] != '\0')
index 044afe165193a563434730c0e54f45c79e1c6421..33ca0ce0a6b8fadb3fecfbc6bbb63aed9a2d28d9 100644 (file)
@@ -233,8 +233,8 @@ tprintf_timestamp()
        time = localtime(&tm);
 
        sprintf(pid, "[%d]", MyProcPid);
-       sprintf(timestamp, "%04d%02d%02d.%02d:%02d:%02d.%03d %7s ",
-                       time->tm_year+1900, time->tm_mon + 1, time->tm_mday,
+       sprintf(timestamp, "%02d%02d%02d.%02d:%02d:%02d.%03d %7s ",
+                       time->tm_year % 100, time->tm_mon + 1, time->tm_mday,
                        time->tm_hour, time->tm_min, time->tm_sec,
                        (int) (tv.tv_usec/1000), pid);
 
index 6f8c79676a2cb4079a1df40786457ea6564d0f6d..ecdb9bbb4e8578b0be1f4137f855054b70fe22eb 100644 (file)
@@ -7,13 +7,14 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: copy.h,v 1.9 2000/01/26 05:58:00 momjian Exp $
+ * $Id: copy.h,v 1.10 2000/02/13 18:59:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 #ifndef COPY_H
 #define COPY_H
 
+extern int lineno;
 
 void DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
                        char *filename, char *delim, char *null_print);
index 61f0b27da13ef31b7265a0f46be36acb7513dcdc..3cb2d9e28f1d7e18ebd7b2db0641da9877eb4ae5 100644 (file)
@@ -18,7 +18,7 @@
 #ifdef ELOG_TIMESTAMPS
 char      *tprintf_timestamp(void);
 
-#define TIMESTAMP_SIZE 30
+#define TIMESTAMP_SIZE 28
 #else
 #define TIMESTAMP_SIZE 0
 #endif
index 43773debb5e8cf4623cdaabb344922e678665be9..9285668917b580a5d7478e1d79c17bc0a8c193b8 100644 (file)
@@ -107,7 +107,7 @@ plperl : plperl.o SPI.o
        \$(CC) -c \$(CFLAGS) \$<
 
 %.o : %.xs
-       \$(XSUBPP} \$(TYPEMAP) \$< > xtmp.c
+       \$(XSUBPP) \$(TYPEMAP) \$< > xtmp.c
        \$(CC) -c \$(CFLAGS) -o \$@ xtmp.c