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 )