[Dbix-class] Announcing DBIx::Class 0.08198

Bill Moseley moseley at hank.org
Sat Aug 4 23:46:40 GMT 2012


On Thu, Aug 2, 2012 at 6:25 AM, Arthur Axel 'fREW' Schmidt <frioux at gmail.com
> wrote:

> Any chance we could get an ETA on this test?  the 0.08199 release is
> blocking on it.
>

Do you have a fix for this already?   That is, do you know what the issue
is?   Otherwise, I'm a bit stuck.

I wrote a new unit test (below) for DBIC, but the test passed.

So, I went back to my app and started cutting out code until I had just
three Result classes, and very simple DBIC setup.

What I finally found was when I removed a column named "source" the problem
went away.   Red herring, I'm not sure.

Wish I had something better to offer.   I made the following changes and
then I added the test below, but tests pass.  Any suggestion what else to
try?

I'm using PostgreSQL 9.0.4 on OS X and DBIx::Class from git.  On my table
"source" is "smallint" but there are many columns like that on that table.


moseley at bair ~/DBIx-Class $ git diff
diff --git a/t/lib/DBICTest/Schema/Artist.pm
b/t/lib/DBICTest/Schema/Artist.pm
index 2e9ff35..21179da 100644
--- a/t/lib/DBICTest/Schema/Artist.pm
+++ b/t/lib/DBICTest/Schema/Artist.pm
@@ -29,6 +29,7 @@ __PACKAGE__->add_columns(
     size =3D> 10,
     is_nullable =3D> 1,
   },
+  'source',
 );
 __PACKAGE__->set_primary_key('artistid');
 __PACKAGE__->add_unique_constraint(['name']);
diff --git a/t/lib/sqlite.sql b/t/lib/sqlite.sql
index 9d49210..2077463 100644
--- a/t/lib/sqlite.sql
+++ b/t/lib/sqlite.sql
@@ -10,7 +10,8 @@ CREATE TABLE artist (
   artistid INTEGER PRIMARY KEY NOT NULL,
   name varchar(100),
   rank integer NOT NULL DEFAULT 13,
-  charfield char(10)
+  charfield char(10),
+  source integer
 );

 CREATE INDEX artist_name_hookidx ON artist (name);




moseley at bair ~/DBIx-Class $ cat t/prefetch/undefined_inflaged_column.t
use warnings;
use strict;

use Test::More;
use lib qw(t/lib);
use DBICTest;

my $schema =3D DBICTest->init_schema();

plan tests =3D> 7;

# Bug between .08196 and .08198 resulted in a prefetch setting
_inflated_column undefined.

# Grab any track.
my $search_track =3D $schema->resultset( 'Track' )->search( {}, { rows =3D>=
 1 }
)->first;

ok( $search_track, 'Fetched a track' );

my $track_id =3D $search_track->trackid;
ok( $track_id, "Feteched track id '$track_id'" );

my $track =3D $schema->resultset( 'Track' )->search(
    {
        'me.trackid' =3D> $track_id,
    },
    {
        prefetch =3D> [
            { cd =3D> 'artist' },
        ],
    },
)->first;

my $cd =3D $track->cd;
ok( $cd, 'Found CD object' );
is( ref $cd->{_inflated_column}, 'HASH', 'Found _inflated_column hashref' );

ok( exists $cd->{_inflated_column}{artist}, 'Found inflated "artist" key' );

# This is where it fails
ok( defined $cd->{_inflated_column}{artist}, 'Inflated "artist" is defined'
);
ok( $cd->artist,  'The artist should be defined (or an artist)' );









>
> On 08/01/2012 09:36 AM, Arthur Axel 'fREW' Schmidt wrote:
> > Bill,
> >
> > Could you please write a test that fails on 0.08198 but passes on
> > 0.08198_01?  DBIC has a quite fully fleshed out test schema so I doubt
> > it should be difficult.  We *do* want to add the features in eventually
> > that were taken out in the dev rel so unless we get tests for these
> > regressions they will regress again :)
> >
> > (I know this is a near copy paste of a previous message, but the issues
> > may be subtly different)
> >
> > On 07/14/2012 05:53 PM, Bill Moseley wrote:
> >> On Tue, Jul 10, 2012 at 7:59 PM, fREW Schmidt <frioux at gmail.com> wrote:
> >>
> >>>     * Fixes
> >>>         - Fix complex has_many prefetch with resultsets not selecting
> >>> identity
> >>>           columns from the root result source
> >>>
> >> I'm wondering if this is related to a problem I'm seeing in this versi=
on
> >> where a column listed in _inflated_column is undefined.
> >>
> >>
> >> I've upgraded to SQL::Abstract 1.73 for both versions of DBIC below.
> >>
> >> In 0.08196 I don't see the problem (I can't upgraded to .08197).
> >>
> >> In 0.08198 what happens is I end up with a row with an _inflated_column
> >> with the column undef.
> >> In  0.08196 _inflated_column is a row object.
> >>
> >> For example, if I'm modeling school work -- if a class has many
> >> assignments, and an assignment has many papers, then:
> >>
> >>
> >> my $paper =3D $schema->resultset( 'Paper' )->search(
> >>     { 'me.id' =3D> $id },
> >>     {
> >>         prefetch =3D> [
> >>             { assignment =3D> 'class' },
> >>         ],
> >>     }
> >> )->first;
> >>
> >> my $assignment =3D $paper->assignment;
> >> warn Dumper $assignment->{_inflated_column};
> >>
> >> print $assignment->class->id;
> >>
> >>
> >> # in .08198 $assignment->{_inflated_column}{class} is undefined
> >> # in .08196 $assignment->{_inflated_column}{class} is a class row
> object.
> >>
> >>
> >> Which results in:
> >>
> >> $VAR1 =3D {
> >>           'class' =3D> undef
> >>         };
> >> Can't call method "id" on an undefined value ....
> >>
> >>
> >> If I revert to 96 then "class" references a ::Result::Class object.
> >>
> >>
> >> Is this a know issue?
> >>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> 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/dbix-class@lists.scsys.co.uk
> >>
>
>
>
> _______________________________________________
> 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/dbix-class@lists.scsys.co.uk
>



-- =

Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20120804/10f=
810ff/attachment.htm


More information about the DBIx-Class mailing list