| DBIx-DBO2 documentation | Contained in the DBIx-DBO2 distribution. |
DBIx::DBO2::Schema - Group of tables and associated record classes
use DBIx::DBO2::Schema; my $ts = DBIx::DBO2::Schema->new(); $ts->connect_datasource( $dsn, $user, $pass ); $ts->packages( 'MyClassName' => 'mytablename' ); $ts->require_packages; $ts->declare_tables;
This is an example use of the DBIx::DBO2 framework used for testing purposes.
| DBIx-DBO2 documentation | Contained in the DBIx-DBO2 distribution. |
package DBIx::DBO2::Schema; use strict; use Carp; use Class::MakeMethods; use DBIx::SQLEngine::Schema::Table; ######################################################################## use Class::MakeMethods::Standard::Hash ( 'new' => 'new', 'object' => { name=>'datasource', class=>'DBIx::SQLEngine::Driver::Default'}, 'hash' => 'packages', ); sub connect_datasource { my $self = shift; $self->datasource( DBIx::SQLEngine->new( @_ ) ); } ######################################################################## sub require_packages { my $self = shift; my %tables = $self->packages; while ( my( $package, $tablename ) = each %tables ) { $package =~ s{::}{/}g; $package .= '.pm'; # warn "Loading $package...\n"; require $package; } } ######################################################################## sub declare_tables { my $self = shift; my $datasource = $self->datasource; my %tables = $self->packages; while ( my( $package, $tablename ) = each %tables ) { $package->table( $datasource->table( $tablename ) ) } } ######################################################################## sub create_tables { my $self = shift; my %tables = $self->packages; while ( my( $package, $tablename ) = each %tables ) { my $table = $package->table; $table->columnset( DBIx::SQLEngine::Schema::ColumnSet->new() ); my $cols = $package->field_columns; $table->columnset( DBIx::SQLEngine::Schema::ColumnSet->new( @$cols ) ); $table->create_table; } } sub ensure_tables_exist { my $self = shift; my %tables = $self->packages; while ( my( $package, $tablename ) = each %tables ) { my $table = $package->table; next if $table->table_exists; my $cols = $package->field_columns; $table->columnset( DBIx::DBO2::ColumnSet->new( @$cols ) ); $table->create_table; } } sub refresh_tables_schema { my $self = shift; my %tables = $self->packages; while ( my( $package, $tablename ) = each %tables ) { my $table = $package->table; next if $table->table_exists; my $cols = $package->field_columns; $table->columnset( DBIx::DBO2::ColumnSet->new( @$cols ) ); $table->recreate_table_with_rows; } } sub drop_tables { my $self = shift; my %tables = $self->packages; while ( my( $package, $tablename ) = each %tables ) { my $table = $package->table or next; $table->drop_table; } } ######################################################################## 1;