Hi,

I've run into a weird problem.  I'm trying to set default values in a
new row, as described here:

  
http://search.cpan.org/~blblack/DBIx-Class-0.07006/lib/DBIx/Class/Manual/Cookbook.pod#Setting_default_values_for_a_row

The error I'm seeing:

    apocalypse$  prove -v t/Peeron2/ActivityLog.t
    t/Peeron2/ActivityLog....ok 1 - Old log test entries not found
    Can't use string ("Peeron2::Schema::ActivityLog") as a HASH ref while 
"strict refs" in use at /usr/lib/perl5/site_perl/5.8.5/DBIx/Class/Row.pm line 
97.
    1..1
    # Looks like your test died just after 1.


My test:

    #!/usr/bin/perl -w

    use Test::More qw/no_plan/; 
    use lib qw#/usr/home/peeron/lib/modules#;
    use Peeron2::Schema;
    use strict;

    my %sample = (itemtype => "other",
                  text     => "testing P2S:ActivityLog - $$");

    my $rs = Peeron2::Schema->resultset("ActivityLog");
    is($rs->search({text => $sample{text}})->count, 0, "Old log test entries 
not found");

    # create with minimal data
    my $orig = $rs->create({%sample});
    ok($orig, "New line was added using defaults");

    my $lines = $rs->search({text => $sample{text}});
    is($lines->count, 1, "The new line is in the database");


And my class definition:

    package Peeron2::Schema::ActivityLog;
    use strict;
    use warnings;
    use base 'DBIx::Class';

    __PACKAGE__->load_components("PK::Auto", "Core");
    __PACKAGE__->table("ActivityLog");
    __PACKAGE__->add_columns(
      "logid", 
      { data_type => "MEDIUMINT", default_value => undef, is_nullable => 0, 
size => 8, },
      "date",
      { data_type => "DATE", is_nullable => 0, size => 10, },
      "unixtime",
      { data_type => "INT", is_nullable => 0, size => 10 },
      "itemtype",
      { data_type => "ENUM", default_value => "other", is_nullable => 0, size 
=> 8 },
      "itemid",
      { data_type => "VARCHAR", default_value => undef, is_nullable => 1, size 
=> 16, },
      "text",
      { data_type => "VARCHAR", default_value => "", is_nullable => 0, size => 
255 },
      "url",
      { data_type => "VARCHAR", default_value => undef, is_nullable => 1, size 
=> 255, },
      "userid",
      { data_type => "SMALLINT", default_value => undef, is_nullable => 1, size 
=> 5, },
    );
    __PACKAGE__->set_primary_key("logid");

    __PACKAGE__->belongs_to(userid => 'Peeron2::Schema::Users');

    sub new {
      my ($self, $attrs) = @_;

      $attrs->{unixtime} = time if not $attrs->{unixtime} or $attrs->{unixtime} 
=~ /\D/;
      $attrs->{date} = sprintf("%04d-%02d-%02d", (localtime)[5]+1900, 
(localtime)[4]+1, (localtime)[3])
        unless $attrs->{date} and $attrs->{date} =~ /^\d\d\d\d-\d\d-\d\d$/;

      $self->next::method($attrs);

      return $self;
    }

    1;

Any idea what I'm doing wrong?  Any additional debug info I can get?  If
I remove the 'sub new' entry, these tests pass (without the default
values, of course).

Any suggestions would be greatly appreciated!

Thanks.

Dan

-- 
Dan Boger
[EMAIL PROTECTED]

_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/dbix-class@lists.rawmode.org/

Reply via email to