On Thu, Dec 5, 2024 at 11:02 AM jian he <jian.universal...@gmail.com> wrote:
>
> hi.
> accidentally hit segfault.
> create table c11 (a int not enforced);
> create table c11 (a int enforced);
> we can solve it via the following or changing SUPPORTS_ATTRS accordingly.
>
> diff --git a/src/backend/parser/parse_utilcmd.c
> b/src/backend/parser/parse_utilcmd.c
> index 5ab44149e5..fe1116c092 100644
> --- a/src/backend/parser/parse_utilcmd.c
> +++ b/src/backend/parser/parse_utilcmd.c
> @@ -3965,7 +3965,7 @@ transformConstraintAttrs(CreateStmtContext *cxt,
> List *constraintList)
>                                 break;
>                         case CONSTR_ATTR_ENFORCED:
> -                               if (lastprimarycon &&
> +                               if (lastprimarycon == NULL ||
>                                         lastprimarycon->contype != 
> CONSTR_CHECK)
>                                         ereport(ERROR,
>
> (errcode(ERRCODE_SYNTAX_ERROR),
> @@ -3981,7 +3981,7 @@ transformConstraintAttrs(CreateStmtContext *cxt,
> List *constraintList)
>                                 break;
>                         case CONSTR_ATTR_NOT_ENFORCED:
> -                               if (lastprimarycon &&
> +                               if (lastprimarycon == NULL ||
>                                         lastprimarycon->contype != 
> CONSTR_CHECK)
>                                         ereport(ERROR,
>
> (errcode(ERRCODE_SYNTAX_ERROR),
>

Yes, that was a logical oversight on my part. Your suggestion looks
good to me, thanks.

>
> ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT the_constraint
> CHECK (value > 0) NOT ENFORCED;
> ERROR:  CHECK constraints cannot be marked NOT ENFORCED
>
> the error message is not good?  maybe better option would be:
> ERROR:  DOMAIN CHECK constraints cannot be marked NOT ENFORCED
>
> we can do it like:
> index 833b3be02b..4a7ab0c2a3 100644
> --- a/src/backend/parser/gram.y
> +++ b/src/backend/parser/gram.y
> @@ -4342,7 +4342,7 @@ DomainConstraintElem:
>                                         n->location = @1;
>                                         n->raw_expr = $3;
>                                         n->cooked_expr = NULL;
> -                                       processCASbits($5, @5, "CHECK",
> +                                      processCASbits($5, @5, "DOMAIN CHECK",
>
> NULL, NULL, NULL, &n->skip_validation,
>
> &n->is_no_inherit, yyscanner);

I believe this should either be a separate patch or potentially
included in your "Refactor AlterDomainAddConstraint" proposal[1].

Regards,
Amul

1] 
https://postgr.es/m/cacjufxhitd5lglbssapshhtdwxt0vivkthinkyw-skbx93t...@mail.gmail.com


Reply via email to