为什么我从 DBIx::Class::InflateColumn::DateTime 对象中使用 sprintf 中的未初始化值?

发布于 2024-09-30 02:12:55 字数 3670 浏览 0 评论 0原文

这似乎是自从我升级 DBIx::Class 以来最开始的,我不知道我做错了什么。

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 在我修改它生成的代码时出现问题。

我需要做什么才能防止出现有关未初始化值的警告?这是使用 DBIx::Class 的 0.08124 版本(虽然我认为之前的版本也出现过这种情况,但当时我没有抽出时间调查这个问题)。

This seems to have most started since I upgrade my DBIx::Class and I can't figure out what I'm doing wrong.

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

My column definition in the result file is,

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

The messing about doing things again after the break is to prevent the Schema::Loader from having problems with me modifying code it's generated.

What do I need to do to prevent the warnings about the uninitialized value? This is using version 0.08124 of DBIx::Class (although I think it occurred with the version before too but I didn't get around to investigation this problem then).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾铮苏瑾 2024-10-07 02:12:55

改进上面代码的一些事情:

  • 从第二个 load_components 调用中删除额外的“Core”,您已经在“extends”行中删除了它。

  • 使用新的“+col”语法可以缩短第二个“add_columns”调用,该语法允许您修改/更新现有的列定义,而不是添加全新的列定义,请参阅ResultSource 文档

A couple of things to improve the code above:

  • Remove the extra "Core" from the second load_components call, you already have it in the "extends" line.

  • The second "add_columns" call can be made shorter by using the new "+col" syntax which allows you to amend/update an existing column definition, rather than adding a whole new one, see ResultSource docs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文