Re: BUG(fixed) in CREATE TABLE ADD CONSTRAINT...

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: jozzano(at)exa(dot)unicen(dot)edu(dot)ar
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG(fixed) in CREATE TABLE ADD CONSTRAINT...
Date: 2001-09-05 16:56:20
Message-ID: 200109051656.f85GuKh21196@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


This is already fixed in the current sources.

> Hi !
> My system is i686/Linux Mandrake 7.0/Postgresql v-7.0.2.
> I found a bug in the sql command ALTER TABLE ADD CONSTRAINT..., when I tried to add a composite foreign key constraint
> (a FK with more than one attribute). The problem is in the file identified by
> $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/command.c,v 1.71 2000/04/12 17:14:57 momjian Exp $
> in the code lines #1139 to #1150, when the function AlterTableAddConstraint() tries to construct the vector of the triggers tgargs.
> >From the position 4 and forward, it must collect the pairs of fk_attrs and pk_attrs (interleaved), but the current code put first all
> fk_attrs and then all the pk_attrs, leading to an error.
> I fixed the bug and tested the update and now it works well. I send you a "diff -c command.c command.fixed.c" (with the diff :
> GNU diffutils version 2.7) and the output is:
>
> *** command.c Sun May 6 21:13:06 2001
> --- command.fixed.c Mon Jul 9 19:58:21 2001
> ***************
> *** 19,24 ****
> --- 19,25 ----
> * manipulating code in the commands/ directory, should go
> * someplace closer to the lib/catalog code.
> *
> + *
> *-------------------------------------------------------------------------
> */
> #include "postgres.h"
> ***************
> *** 1138,1152 ****
> {
> Ident *fk_at = lfirst(list);
>
> ! trig.tgargs[count++] = fk_at->name;
> }
> foreach(list, fkconstraint->pk_attrs)
> {
> Ident *pk_at = lfirst(list);
>
> ! trig.tgargs[count++] = pk_at->name;
> }
> ! trig.tgnargs = count;
>
> scan = heap_beginscan(rel, false, SnapshotNow, 0, NULL);
> AssertState(scan != NULL);
> --- 1139,1156 ----
> {
> Ident *fk_at = lfirst(list);
>
> ! trig.tgargs[count] = fk_at->name;
> ! count+=2;
> }
> + count = 5;
> foreach(list, fkconstraint->pk_attrs)
> {
> Ident *pk_at = lfirst(list);
>
> ! trig.tgargs[count] = pk_at->name;
> ! count+=2;
> }
> ! trig.tgnargs = (count-1);
>
> scan = heap_beginscan(rel, false, SnapshotNow, 0, NULL);
> AssertState(scan != NULL);
> ***************
> *** 1220,1223 ****
> LockRelation(rel, lockstmt->mode);
>
> heap_close(rel, NoLock); /* close rel, keep lock */
> ! }
> --- 1224,1227 ----
> LockRelation(rel, lockstmt->mode);
>
> heap_close(rel, NoLock); /* close rel, keep lock */
> ! }
>
>
> I wish it would help you. If its necessary, drop me a line. Regards
> Jose Luis Ozzano.
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://www.postgresql.org/search.mpl

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

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Barry Lind 2001-09-05 19:11:06 Re: JDBC patch (attempt#2) for util.Serialize and jdbc2.PreparedStatement
Previous Message Bruce Momjian 2001-09-05 16:52:37 Re: libpgtcl doesn't use UTF encoding of TCL