FeyX-Active

 view release on metacpan or  search on metacpan

lib/FeyX/Active/Table.pm  view on Meta::CPAN

package FeyX::Active::Table;
use Moose;

our $VERSION   = '0.03';
our $AUTHORITY = 'cpan:STEVAN';

use FeyX::Active::SQL::Select;
use FeyX::Active::SQL::Update;
use FeyX::Active::SQL::Insert;
use FeyX::Active::SQL::Delete;

extends 'Fey::Table';

sub select {
    my $self   = shift;
    my $select = FeyX::Active::SQL::Select->new(
        dbh => $self->schema->dbi_manager->default_source->dbh
    );

    $select->from( $self );
    $select->select( @_ ? @_ : $self );
    $select;
}

sub delete {
    my $self   = shift;
    my $delete = FeyX::Active::SQL::Delete->new(
        dbh => $self->schema->dbi_manager->default_source->dbh
    );

    $delete->from( $self );
    $delete;
}

sub insert {
    my $self   = shift;
    my $insert = FeyX::Active::SQL::Insert->new(
        dbh => $self->schema->dbi_manager->default_source->dbh
    );

    $insert->into( $self );
    $insert->values( @_ ) if @_;
    $insert;
}

sub update {
    my $self   = shift;
    my $update = FeyX::Active::SQL::Update->new(
        dbh => $self->schema->dbi_manager->default_source->dbh
    );

    $update->update( $self );
    $update->set( @_ ) if @_;
    $update;
}

__PACKAGE__->meta->make_immutable;

no Moose; 1;

__END__

=pod

=head1 NAME

FeyX::Active::Table - An active Fey Table

=head1 SYNOPSIS

  use FeyX::Active::Table;

  my $Person = FeyX::Active::Table->new(name => 'Person');
  $Person->add_column( Fey::Column->new( name => 'first_name', type => 'varchar' ) );
  $Person->add_column( Fey::Column->new( name => 'last_name',  type => 'varchar' ) );

  $schema->add_table( $Person );

  my @people = (
      { first_name  => 'Homer', last_name => 'Simpson' },
      { first_name  => 'Marge', last_name => 'Simpson' },
      { first_name  => 'Bart',  last_name => 'Simpson' },
  );

  foreach my $person (@people) {
      $Person->insert( %$person )->execute;
  }

  my ($first_name, $last_name) = $Person->select
                                        ->where( $Person->column('first_name'), '==', 'Homer' )
                                        ->execute
                                        ->fetchrow;

=head1 DESCRIPTION

This is a subclass of L<Fey::Table> that adds a couple methods for creating
L<FeyX::Active::SQL> objects.

=head1 METHODS

All these methods will pass the C<default_source> database handle from the
associated L<FeyX::Active::Schema> to the L<FeyX::Active::SQL> object it
creates.

=over 4



( run in 1.869 second using v1.01-cache-2.11-cpan-39bf76dae61 )