Re: dropdb --force

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: vignesh C <vignesh21(at)gmail(dot)com>
Cc: Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Ryan Lambert <ryan(at)rustprooflabs(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Anthony Nowocien <anowocien(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Filip Rembiałkowski <filip(dot)rembialkowski(at)gmail(dot)com>
Subject: Re: dropdb --force
Date: 2019-09-26 15:30:14
Message-ID: CAFj8pRAWiOQkj+MjPF7_Tf=2ZRgiGh6wipzhf-nTO11e7M+xaQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

st 25. 9. 2019 v 6:38 odesílatel vignesh C <vignesh21(at)gmail(dot)com> napsal:

> On Sat, Sep 21, 2019 at 10:09 PM Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
> wrote:
> > fixed
> >
> > Thank you for check. I am sending updated patch
> >
> Thanks for fixing all the comments.
> Couple of suggestions:
> -DROP DATABASE [ IF EXISTS ] <replaceable
> class="parameter">name</replaceable>
> +DROP DATABASE [ ( <replaceable class="parameter">option</replaceable>
> [, ...] ) ] [ IF EXISTS ] <replaceable
> class="parameter">name</replaceable>
> +
> +<phrase>where <replaceable class="parameter">option</replaceable> can
> be one of:</phrase>
> +
> + FORCE
>
> +drop_option_list:
> + drop_option
> + {
> + $$ = list_make1((Node *) $1);
> + }
> + | drop_option_list ',' drop_option
> + {
> + $$ = lappend($1, (Node *) $3);
> + }
> + ;
> +
> +drop_option: FORCE
> + {
> + $$ = makeDefElem("force", NULL, @1);
> + }
> + ;
>
> Currently only force option is supported in: drop database (force) dbname
> Should we have a list or a single element for this?
> I'm not sure if we have any plans to add more option in this area.
>

If we open door for next possible syntax enhancing and it is motivation for
this syntax, then we should to use pattern for this situation.
It looks little bit strange, but I think so current code is very well
readable. I wrote comment, so only one flag is supported now, but
syntax allows add other flags. I don't think so using defelem directly
reduces significantly enough lines - just if we implement some
what looks like possible list, then we should to use lists inside.

> If possible we can add an error message like 'ERROR: unrecognized
> drop database option "force1"' if an invalid input is given.
> The above error message will be inline with error message of vacuum's
> error message whose syntax is similar to the current feature.
> We could throw the error from here:
> case T_DropdbStmt:
> {
> DropdbStmt *stmt = (DropdbStmt *) parsetree;
> + bool force = false;
> + ListCell *lc;
> +
> + foreach(lc, stmt->options)
> + {
> + DefElem *item = (DefElem *) lfirst(lc);
> +
> + if (strcmp(item->defname, "force") == 0)
> + force = true;
> + }
> Thoughts?
>

I moved this check to separate function DropDatabase with new check and
exception like you proposed.

Regards

Pavel

>
> Regards,
> Vignesh
> EnterpriseDB: http://www.enterprisedb.com
>

Attachment Content-Type Size
drop-database-force-20190926.patch text/x-patch 14.0 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2019-09-26 15:31:50 Re: dropdb --force
Previous Message Tom Lane 2019-09-26 15:22:58 Re: Add comments for a postgres program in bootstrap mode