WITH DELIMITERS in COPY

WITH DELIMITERS in COPY

Post by Bruce Momji » Thu, 25 Apr 2002 01:43:10



I see in user.c::CreateUser:

        if (strcmp(defel->defname, "password") == 0 ||
            strcmp(defel->defname, "encryptedPassword") == 0 ||
            strcmp(defel->defname, "unencryptedPassword") == 0)
        {
            if (dpassword)
                elog(ERROR, "CREATE USER: conflicting options");
            dpassword = defel;
            if (strcmp(defel->defname, "encryptedPassword") == 0)
                encrypt_password = true;
            else if (strcmp(defel->defname, "unencryptedPassword") == 0)
                encrypt_password = false;
        }
        else if (strcmp(defel->defname, "sysid") == 0)
        {
            if (dsysid)
                elog(ERROR, "CREATE USER: conflicting options");
            dsysid = defel;
        }

Looks like this is how we normally test for conflicting params.  Does
this help?

---------------------------------------------------------------------------


> Bruce,

> Attached is a modified patch, using DefElem instead of the 'roll your own'
> method of collecting optional parameters to CopyStmt.

> Naturally, DoCopy() as well as a few support functions needed to be
> modified to get this going.

> In order to check if parameters were being passed more than once (COPY
> ... WITH OIDS FROM ... WITH DELIMITER '\t' OIDS), I have added a function
> defelemmember() to list.c. I could not think, off the top of my head, of a
> more elegant way to do this.

> Gavin


> > Gavin, I will do the legwork on this if you wish.  I think we need to
> > use DefElem to store the COPY params, rather than using specific fields
> > in CopyStmt.

> > Would you send me your original patch so I am make sure I hit
> > everything.  I can't seem to find a copy.  If you would like to work on
> > it, I can give you what I have and walk you through the process.

> > ---------------------------------------------------------------------------


> > > Hi Bruce,


> > > > Seems the original title about "feature causes performance in COPY" was
> > > > confusing.

> > > Oops.

> > > > This patch merely fixes the identified TODO item in the
> > > > grammar about using WITH in COPY.

> > > Now that I look at this patch again I don't think I like the
> > > syntax.

> > > COPY [BINARY] <relation> [WITH OIDS] TO | FROM <file> [[USING DELIMITERS |
> > > WITH DELIMITER] <delimiter> [WITH NULL AS <char>]

> > > It isn't very elegant.

> > > 1) I forced the parser to be able to handle multiple WITHs, but that
> > > doesn't mean its right. I can't remember why I didn't propose a better
> > > syntax back then, such as:

> > > ... [WITH [DELIMITER <delimiter>,] [NULL AS <char>]]

> > > 2) Given (1), Why does WITH OIDS belong where it is now? Why not have it
> > > as an 'option' at the end?

> > > Anyone have any opinion on this?

> > > ---------------------------(end of broadcast)---------------------------


Content-Description:

[ Attachment, skipping... ]

--
  Bruce Momjian                        |  http://candle.pha.pa.us

  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org