2010-11-01 19 views
2

Cela semble avoir le plus commencé depuis que j'ai mis à jour mon DBIx :: Class et je ne peux pas comprendre ce que je fais mal.Pourquoi l'utilisation de la valeur non initialisée dans sprintf provient-elle de l'objet 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 

Ma définition de colonne dans le fichier résultat est,

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 }, 
); 

Le embêter à faire des choses après la pause est d'empêcher le schéma :: Loader d'avoir des problèmes avec moi le code modifiant est généré.

Que dois-je faire pour éviter les avertissements concernant la valeur non initialisée? C'est en utilisant la version 0.08124 de DBIx :: Class (bien que je pense que cela s'est produit avec la version avant aussi, mais je n'ai pas cherché à enquêter sur ce problème).

Répondre

5

Un couple de choses à améliorer le code ci-dessus:

  • Retirez le supplément « Core » de la deuxième load_components appel, vous l'avez déjà dans la ligne « étend ». Le deuxième appel "add_columns" peut être raccourci en utilisant la nouvelle syntaxe "+ col" qui vous permet de modifier/mettre à jour une définition de colonne existante, plutôt que d'en ajouter une nouvelle, voir ResultSource docs.

+0

La syntaxe + pour les colonnes s'avère être ce qui corrige l'avertissement. –