Skip Menu |

This queue is for tickets about the DBIx-Class CPAN distribution.

Report information
The Basics
Id: 25901
Status: resolved
Priority: 0/
Queue: DBIx-Class

People
Owner: Nobody in particular
Requestors: mschwern [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Critical
Broken in: (no value)
Fixed in: (no value)



Subject: insert() and create() are both class methods in CDBI
In Class::DBI insert() and create() are synonyms. insert() is now the preferred method. Both are class methods. Currently only create() can be called as a class method in the CDBICompat layer. Calling insert() as a class method causes an error. This fixes that.
Subject: cdbicompat_insert.patch
=== lib/DBIx/Class/CDBICompat/Triggers.pm ================================================================== --- lib/DBIx/Class/CDBICompat/Triggers.pm (revision 27865) +++ lib/DBIx/Class/CDBICompat/Triggers.pm (local) @@ -7,6 +7,9 @@ sub insert { my $self = shift; + + return $self->create(@_) unless ref $self; + $self->call_trigger('before_create'); $self->next::method(@_); $self->call_trigger('after_create'); === t/cdbi-t/02-Film.t ================================================================== --- t/cdbi-t/02-Film.t (revision 27865) +++ t/cdbi-t/02-Film.t (local) @@ -37,7 +37,7 @@ ok $@, "Can't get title with no object"; } -eval { my $duh = Film->create; }; +eval { my $duh = Film->insert; }; like $@, qr/create needs a hashref/, "needs a hashref"; ok +Film->create_test_film; @@ -163,11 +163,11 @@ } eval { - my $ishtar = Film->create({ Title => 'Ishtar', Director => 'Elaine May' }); + my $ishtar = Film->insert({ Title => 'Ishtar', Director => 'Elaine May' }); my $mandn = - Film->create({ Title => 'Mikey and Nicky', Director => 'Elaine May' }); + Film->insert({ Title => 'Mikey and Nicky', Director => 'Elaine May' }); my $new_leaf = - Film->create({ Title => 'A New Leaf', Director => 'Elaine May' }); + Film->insert({ Title => 'A New Leaf', Director => 'Elaine May' }); #use Data::Dumper; die Dumper(Film->search( Director => 'Elaine May' )); cmp_ok(Film->search(Director => 'Elaine May'), '==', 3, @@ -263,7 +263,7 @@ { # update deleted object my $rt = "Royal Tenenbaums"; - my $ten = Film->create({ title => $rt, Rating => "R" }); + my $ten = Film->insert({ title => $rt, Rating => "R" }); $ten->rating(18); Film->set_sql(drt => "DELETE FROM __TABLE__ WHERE title = ?"); Film->sql_drt->execute($rt); @@ -284,7 +284,7 @@ # Primary key of 0 { - my $zero = Film->create({ Title => 0, Rating => "U" }); + my $zero = Film->insert({ Title => 0, Rating => "U" }); ok defined $zero, "Create 0"; ok my $ret = Film->retrieve(0), "Retrieve 0"; is $ret->Title, 0, "Title OK"; @@ -344,7 +344,7 @@ { { - ok my $byebye = DeletingFilm->create( + ok my $byebye = DeletingFilm->insert( { Title => 'Goodbye Norma Jean', Rating => 'PG', @@ -386,7 +386,7 @@ isnt Scalar::Util::refaddr($btaste2), Scalar::Util::refaddr($btaste4), "Clearing cache and retrieving again gives new object"; - $btaste=Film->create({ + $btaste=Film->insert({ Title => 'Bad Taste 2', Director => 'Peter Jackson', Rating => 'R',
I'm marking this resolved on the assumption it will be when you and I get a minute to integrate your rather better patch :)