2010-11-01 1 views
2

Это, похоже, больше всего началось с тех пор, как я обновляю свой DBIx :: Class, и я не могу понять, что я делаю неправильно.Почему я использую unininitialized значение в sprintf из объекта DBIx :: Class :: InflateColumn :: DateTime?

Use of uninitialized value in sprintf at /opt/perl-5.10.1/lib/site_perl/5.10.1/DBIx/Class/InflateColumn/DateTime.pm line 192. 
at /opt/perl-5.10.1/lib/site_perl/5.10.1/DBIx/Class/InflateColumn/DateTime.pm line 192 
    DBIx::Class::InflateColumn::DateTime::_flate_or_fallback('OpusVL::AppKitX::TelecomsBilling::Schema::Result::AsteriskCdr...', '2009-11-13 09:00:00', 'HASH(0x2a85488)', 'parse_%s') called at /opt/perl-5.10.1/lib/site_perl/5.10.1/DBIx/Class/InflateColumn/DateTime.pm line 199 

Мое определение столбца в файле результата есть

package Module1::Schema::Result::AsteriskCdrRecord; 

# Created by DBIx::Class::Schema::Loader 
# DO NOT MODIFY THE FIRST PART OF THIS FILE 

use strict; 
use warnings; 

use Moose; 
use MooseX::NonMoose; 
use namespace::autoclean; 
extends 'DBIx::Class::Core'; 

__PACKAGE__->load_components("InflateColumn::DateTime"); 

__PACKAGE__->table("asterisk_cdr_records"); 

__PACKAGE__->add_columns(
    "record_id", 
    { 
    data_type   => "integer", 
    is_auto_increment => 1, 
    is_nullable  => 0, 
    sequence   => "asterisk_cdr_records_record_id_seq", 
    }, 
    "import_id", 
    { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, 
    "line", 
    { data_type => "integer", is_nullable => 0 }, 
    "account_ref", 
    { data_type => "varchar", is_foreign_key => 1, is_nullable => 0, size => 20 }, 
    "b_number", 
    { data_type => "varchar", is_nullable => 0, size => 80 }, 
    "call_start", 
    { data_type => "timestamp", is_nullable => 0 }, 
    "call_end", 
    { data_type => "timestamp", is_nullable => 0 }, 
    "created", 
    { 
    data_type  => "timestamp", 
    default_value => \"current_timestamp", 
    is_nullable => 0, 
    original  => { default_value => \"now()" }, 
    }, 
    "updated", 
    { 
    data_type  => "timestamp", 
    default_value => \"current_timestamp", 
    is_nullable => 0, 
    original  => { default_value => \"now()" }, 
    }, 
); 
__PACKAGE__->set_primary_key("record_id"); 
__PACKAGE__->add_unique_constraint(
    "idx_astcdr_records_uni", 
    ["account_ref", "b_number", "call_start", "call_end"], 
); 

__PACKAGE__->belongs_to(
    "import_id", 
    "Module1::Schema::Result::AsteriskCdrImport", 
    { import_id => "import_id" }, 
    { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" }, 
); 

# Created by DBIx::Class::Schema::Loader v0.07002 @ 2010-10-15 10:08:29 
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:mKgpEpbGV/m/CgsjvKLzZA 

__PACKAGE__->load_components(qw/TimeStamp Core/); 
# Adjust some column data that was automatically output by the _create.pl script. 
__PACKAGE__->add_columns 
(
    # Force these to inflate via DataTime. 
    "call_start", 
    { 
     inflate_datetime => 1 , 
     data_type   => "timestamp without time zone", 
     default_value  => undef, 
     is_nullable   => 0, 
     size    => 8, 
    }, 
    "call_end", 
    { 
     inflate_datetime => 1, 
     data_type   => "timestamp without time zone", 
     default_value  => undef, 
     is_nullable   => 0, 
     size    => 8, 
    }, 
    # Add automatic date handling 
    "created", 
    { data_type => 'datetime', set_on_create => 1 }, 
    "updated", 
    { data_type => 'datetime', set_on_create => 1, set_on_update => 1 }, 
); 

возится делать вещи снова после перерыва, чтобы предотвратить Schema :: Loader от проблемы с меня модификации кода он генерируется.

Что нужно сделать, чтобы предотвратить предупреждения о неинициализированном значении? Это использует версию 0.08124 DBIx :: Class (хотя я думаю, что это произошло и с версией раньше, но я не стал разбираться с этой проблемой).

ответ

5

Несколько вещей, чтобы улучшить код, указанный выше:

  • Удалите лишние «ядро» из второго load_components позвонить, у вас уже есть это в строке «проходит».

  • Второй вызов «add_columns» может быть сокращен с использованием нового синтаксиса «+ col», который позволяет вам изменить или обновить существующее определение столбца, а не добавлять совершенно новое, см. ResultSource docs.

+0

Синтаксис + для столбцов оказывается тем, что исправляет предупреждение. –

 Смежные вопросы

  • Нет связанных вопросов^_^