> On Tue, Jan 31, 2006 at 09:50:26PM -0600, Andrew Dunstan wrote:
> > >> Also, should we disable DELIMITER and NULL from sharing characters?
> > >
> > > That's on about line 916, post-patch:
> > >
> > >    /* Don't allow the delimiter to appear in the null string. */
> > >    if (strchr(cstate->null_print, cstate->delim[0]) != NULL)
> > >        ereport(ERROR,
> > >                (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
> > >                errmsg("COPY delimiter must not appear in the NULL
> > >                specification")));
> > >
> > > I suppose that a different error code might be The Right Thing???
> > > here.
> > 
> > ERRCODE_WHAT WERE_YOU_THINKING ?
> 
> That's an excellent candidate, or maybe ERRCODE_INVALID_PARAMETER_VALUE.
> My vote is for ERRCODE_D00D_WTF ;)
> 
> Maybe we need an error code for mutually incompatible param values.

Attached is a patch that errors for \r and \n in delimiter and null.  I
kept the ERRCODE_FEATURE_NOT_SUPPORTED error code because that is what
all the other error tests use in the copy code in that area.  I did
nothing with backslash.

FYI, David, my email reader is having problems reading your emails
because of this line:

        Content-Type: text/plain; charset=iso_8859_1

My understanding is this should be iso-8859-1, with dashes.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/commands/copy.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/commands/copy.c,v
retrieving revision 1.257
diff -c -c -r1.257 copy.c
*** src/backend/commands/copy.c 28 Dec 2005 03:25:32 -0000      1.257
--- src/backend/commands/copy.c 1 Feb 2006 04:21:31 -0000
***************
*** 856,861 ****
--- 856,874 ----
                                (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                                 errmsg("COPY delimiter must be a single 
character")));
  
+       /* Disallow end-of-line characters */
+       if (strchr(cstate->delim, '\r') != NULL ||
+           strchr(cstate->delim, '\n') != NULL)
+               ereport(ERROR,
+                               (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                                errmsg("COPY delimiter cannot be newline or 
carriage return")));
+ 
+       if (strchr(cstate->null_print, '\r') != NULL ||
+               strchr(cstate->null_print, '\n') != NULL)
+               ereport(ERROR,
+                               (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                                errmsg("COPY null cannot be newline or 
carriage return")));
+ 
        /* Check header */
        if (!cstate->csv_mode && cstate->header_line)
                ereport(ERROR,
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to