Thread: Re: [HACKERS] WITH DELIMITERS in COPY

Re: [HACKERS] WITH DELIMITERS in COPY

From
Gavin Sherry
Date:
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


On Sun, 14 Apr 2002, Bruce Momjian wrote:

>
> 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.
>
> ---------------------------------------------------------------------------
>
> Gavin Sherry wrote:
> > Hi Bruce,
> >
> > On Tue, 5 Mar 2002, Bruce Momjian wrote:
> >
> > >
> > > 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)---------------------------
> > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
> >
>
>

Attachment

Re: [HACKERS] WITH DELIMITERS in COPY

From
Bruce Momjian
Date:
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?

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

Gavin Sherry wrote:
> 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
>
>
> On Sun, 14 Apr 2002, Bruce Momjian wrote:
>
> >
> > 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.
> >
> > ---------------------------------------------------------------------------
> >
> > Gavin Sherry wrote:
> > > Hi Bruce,
> > >
> > > On Tue, 5 Mar 2002, Bruce Momjian wrote:
> > >
> > > >
> > > > 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)---------------------------
> > > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
> > >
> >
> >

Content-Description:

[ Attachment, skipping... ]

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026