Re: DB_DataObject, UNIQUE-keys and update-method

From: Date: Thu, 08 Jul 2004 17:23:05 +0000
Subject: Re: DB_DataObject, UNIQUE-keys and update-method
References: 1  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-13555@lists.php.net to get a copy of this message
On Thu, 08 Jul 2004 16:40:18 +0300, Jari-Pekka Arvo <ippo@netti.fi> wrote: > Hi, > > I noticed that DB_DataObjects update()-method can't be used to update > columns that are part of a key declared as UNIQUE. In my case I wanted > to update a table which have a primary key and a unique-key consisting > of tree columns. What happened was that nothing got updated, no error > raised and when I checked debug output I found out that the method uses > UNIQUE-constraints in WHERE-clause and didn't even try to update the > fields I wanted. > > I know I can use $do->query() -method (did it already) and I know I can > manually edit the 'foo.ini'-file (not recommended) but I think this is a > design flaw in DB_DataObject-package. UNIQUE -keys are a good way to > make sure the data in a single relation keeps its coherency, they are > not (usually) used to referring table in joins. What if someone makes a > typo when inserting data in a field that just happens to be a part of a > unique key? Should the mistake be irreparable (as in my opinion this > design conception suggests)? > > To put it shortly: I think that primary keys and unique-keys differ in > semantics so much, that they should be treated separately in DO-code. > Why not just left them out of any key-definitions (in PHP-code)? > I agree and this has been brought up before, although usually about primary keys. If DO is blocking all UNIQUE constraints, then this should definately be fixed. The major problem here is that DO doesn't know the difference between a primary key, a key, and a unique constraint. (I'm not a DB_DataObject developer, but...) Could you possibly look at the code and try to figure out a way to handle this? You could perhaps make a primaryKey() method in the DO when, if it exists, would be used exclusively in the WHERE clause for updates, leaving the other keys out to be updated as you please. I wouldn't think this would that hard of a change to the code. Alan, have you made any changes to this in CVS? Do you have a solution cooking, or should we provide a patch? -- DB_DataObject_FormBuilder - The database at your fingertips http://pear.php.net/package/DB_DataObject_FormBuilder paperCrane --Justin Patrin--

« previous php.pear.general (#13555) next »