DBIO
view release on metacpan or search on metacpan
t/row/async_overrides.t view on Meta::CPAN
__PACKAGE__->table('stamped');
__PACKAGE__->add_columns(
id => { data_type => 'integer', is_auto_increment => 1 },
title => { data_type => 'varchar', size => 50 },
created_at => { data_type => 'varchar', size => 30, is_nullable => 1, set_on_create => 1 },
updated_at => { data_type => 'varchar', size => 30, is_nullable => 1, set_on_create => 1, set_on_update => 1 },
);
__PACKAGE__->set_primary_key('id');
sub get_timestamp { '2026-10-10 12:00:00' }
}
# ---- FilterColumn ----------------------------------------------------------
{
package Test::Ov::Schema::Result::Filtered;
use base 'DBIO::Core';
__PACKAGE__->load_components('FilterColumn');
__PACKAGE__->table('filtered');
__PACKAGE__->add_columns(
id => { data_type => 'integer', is_auto_increment => 1 },
label => { data_type => 'varchar', size => 50 },
note => { data_type => 'varchar', size => 50, is_nullable => 1 },
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->filter_column(label => {
filter_to_storage => sub { uc $_[1] },
filter_from_storage => sub { lc $_[1] },
});
}
# ---- Ordered ---------------------------------------------------------------
{
package Test::Ov::Schema::Result::Ranked;
use base 'DBIO::Core';
__PACKAGE__->load_components('Ordered');
__PACKAGE__->table('ranked');
__PACKAGE__->add_columns(
id => { data_type => 'integer', is_auto_increment => 1 },
position => { data_type => 'integer', position => 1 },
name => { data_type => 'varchar', size => 50 },
);
__PACKAGE__->set_primary_key('id');
}
# ---- a user class with plain overrides ------------------------------------
{
package Test::Ov::Schema::Result::Own;
use base 'DBIO::Core';
__PACKAGE__->table('own');
__PACKAGE__->add_columns(
id => { data_type => 'integer', is_auto_increment => 1 },
name => { data_type => 'varchar', size => 50 },
);
__PACKAGE__->set_primary_key('id');
our @CALLS;
sub insert { my $self = shift; push @CALLS, 'insert'; $self->name(uc $self->name); $self->next::method(@_) }
sub update { my $self = shift; push @CALLS, 'update'; $self->next::method(@_) }
sub delete { my $self = shift; push @CALLS, 'delete'; $self->next::method(@_) }
}
# ---- a user class that carries its own *_async sibling --------------------
{
package Test::Ov::Schema::Result::Sibling;
use base 'DBIO::Core';
__PACKAGE__->table('sibling');
__PACKAGE__->add_columns(
id => { data_type => 'integer', is_auto_increment => 1 },
name => { data_type => 'varchar', size => 50 },
);
__PACKAGE__->set_primary_key('id');
our @CALLS;
sub insert { my $self = shift; push @CALLS, 'insert'; $self->next::method(@_) }
sub insert_async { my $self = shift; push @CALLS, 'insert_async'; $self->next::method(@_) }
}
# ---- a user class that uses the hooks -------------------------------------
{
package Test::Ov::Schema::Result::Hooked;
use base 'DBIO::Core';
__PACKAGE__->table('hooked');
__PACKAGE__->add_columns(
id => { data_type => 'integer', is_auto_increment => 1 },
name => { data_type => 'varchar', size => 50 },
secret => { data_type => 'varchar', size => 50, is_nullable => 1 },
);
__PACKAGE__->set_primary_key('id');
our @CALLS;
sub prepare_insert {
my $self = shift;
push @CALLS, 'prepare_insert';
$self->name('hooked-' . $self->name);
return $self->next::method(@_);
}
sub prepare_update {
my ($self, $upd) = @_;
push @CALLS, 'prepare_update';
# in place: the key leaves the hashref and is set another way
$self->secret('s-' . delete $upd->{secret}) if $upd and exists $upd->{secret};
return $self->next::method($upd);
}
sub prepare_delete {
my $self = shift;
push @CALLS, 'prepare_delete';
return $self->next::method(@_);
}
}
Test::Ov::Schema->register_class(Stamped => 'Test::Ov::Schema::Result::Stamped');
Test::Ov::Schema->register_class(Filtered => 'Test::Ov::Schema::Result::Filtered');
Test::Ov::Schema->register_class(Ranked => 'Test::Ov::Schema::Result::Ranked');
Test::Ov::Schema->register_class(Own => 'Test::Ov::Schema::Result::Own');
Test::Ov::Schema->register_class(Sibling => 'Test::Ov::Schema::Result::Sibling');
Test::Ov::Schema->register_class(Hooked => 'Test::Ov::Schema::Result::Hooked');
( run in 1.279 second using v1.01-cache-2.11-cpan-145b269f2f3 )