[Dbix-class] Bug(?) in find_or_create with sub-queries

Toby Corkindale toby at dryft.net
Thu Dec 16 02:53:11 GMT 2010


I think I have found a bug in find_or_create(), although maybe it's
more a case of "it should throw an error if you try this", instead of
silenting doing the Wrong Thing.

Viz:

Assume you have these tables:
table1, with columns "luser" and "role".
The primary key is on "luser, role".
"role" is a foreign key into table2..

table2 has columns "id" and "name".

my $rs = $schema->resultset('table1');
$rs->find_or_create(
  {
    luser => 'john',
    role => { name => 'Admin' },
  }
);

In this case, the SELECT that dbix class does to try and find the user
will be WHERE luser='john' AND role=NULL.

When it then creates the row, it will correctly fill it in with the ID
from the role table.
Eg. like:
INSERT INTO mytable (luser,role)
VALUES ('john', (SELECT id FROM role WHERE name='Admin'));


Umm.. Would you like me to try and make a (failing) test case for dbic for this?
Or am I just being stupid.. It's more than possible :)

Cheers,
Toby



More information about the DBIx-Class mailing list