On Wed, May 12, 2010 at 1:08 AM, Peter Rabbitson
<[email protected]<rabbit%[email protected]>
> wrote:

> Bill Moseley wrote:
> >
> > Is this the "blanket increment/decrement" that's referring to?
> >
> > sqlite> update track set pos = pos - 1 where cd = 1 and pos > 2;
> >
>
> No need for where conds and the like. The most minimal test case is
> to create a table with 1 column, with a unique constraint, and put
> in the numbers 1..5. Then try:
>
> UPDATE tab SET col = col + 1;
>

> and
>
> UPDATE tab SET col = col - 1;
>
> On sqlite (at least) on of these fails. Not sure for other databases,
> never had the time to test.
>


Seems to be the + 1 version.

Postgresql has same "problem."

Most of us work in just one or two databases, so indeed hard to test.
 That's why I was asking about a flag so users can tell dbic the approach to
use.

There's this trick, too, that seems to work on pg and sqlite:

UPDATE tab SET col = -col;
UPDATE tab SET col = -col + 1;

I just checked and our ordered tables tend to be in groups of 100 or less.
 Many less than 20, so it's not a huge issue.  A hundred updates is quite a
few compared to two.  I can't imagine having thousands of rows that I wanted
to have an order on.



-- 
Bill Moseley
[email protected]
_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]

Reply via email to