use strict;
use vars qw(@ISA %create_params);
#use Carp;
-use Exporter;
+#use Exporter;
use DBIx::DBSchema::Column;
use DBIx::DBSchema::ColGroup::Unique;
use DBIx::DBSchema::ColGroup::Index;
use DBIx::DBSchema::Table;
+ #old style (depriciated)
$table = new DBIx::DBSchema::Table (
"table_name",
"primary_key",
@dbix_dbschema_column_objects,
);
+ #new style (preferred), pass a hashref of parameters
+ $table = new DBIx::DBSchema::Table (
+ {
+ table => "table_name",
+ primary_key => "primary_key",
+ unique => $dbix_dbschema_colgroup_unique_object,
+ 'index' => $dbix_dbschema_colgroup_index_object,
+ columns => \@dbix_dbschema_column_objects,
+ }
+ );
+
$table->addcolumn ( $dbix_dbschema_column_object );
$table_name = $table->name;
=item new [ TABLE_NAME [ , PRIMARY_KEY [ , UNIQUE [ , INDEX [ , COLUMN... ] ] ] ] ]
-Creates a new DBIx::DBSchema::Table object. TABLE_NAME is the name of the
-table. PRIMARY_KEY is the primary key (may be empty). UNIQUE is a
-DBIx::DBSchema::ColGroup::Unique object (see
+=item new HASHREF
+
+Creates a new DBIx::DBSchema::Table object. The preferred usage is to pass a
+hash reference of named parameters.
+
+ {
+ name => TABLE_NAME,
+ primary_key => PRIMARY_KEY,
+ unique => UNIQUE,
+ 'index' => INDEX,
+ columns => COLUMNS
+ }
+
+TABLE_NAME is the name of the table. PRIMARY_KEY is the primary key (may be
+empty). UNIQUE is a DBIx::DBSchema::ColGroup::Unique object (see
L<DBIx::DBSchema::ColGroup::Unique>). INDEX is a
DBIx::DBSchema::ColGroup::Index object (see
-L<DBIx::DBSchema::ColGroup::Index>). The rest of the arguments should be
+L<DBIx::DBSchema::ColGroup::Index>). COLUMNS is a reference to an array of
DBIx::DBSchema::Column objects (see L<DBIx::DBSchema::Column>).
=cut
sub new {
- my($proto,$name,$primary_key,$unique,$index,@columns)=@_;
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ my $self;
+ if ( ref($_[0]) ) {
- my(%columns) = map { $_->name, $_ } @columns;
- my(@column_order) = map { $_->name } @columns;
+ $self = shift;
+ $self->{column_order} = [ map { $_->_name } @{$self->{columns}} ];
+ $self->{columns} = { map { $_->name, $_ } @{$self->{columns}} };
+
+ } else {
+
+ my($name,$primary_key,$unique,$index,@columns) = @_;
+
+ my %columns = map { $_->name, $_ } @columns;
+ my @column_order = map { $_->name } @columns;
+
+ $self = {
+ 'name' => $name,
+ 'primary_key' => $primary_key,
+ 'unique' => $unique,
+ 'index' => $index,
+ 'columns' => \%columns,
+ 'column_order' => \@column_order,
+ };
+
+ }
#check $primary_key, $unique and $index to make sure they are $columns ?
# (and sanity check?)
- my $class = ref($proto) || $proto;
- my $self = {
- 'name' => $name,
- 'primary_key' => $primary_key,
- 'unique' => $unique,
- 'index' => $index,
- 'columns' => \%columns,
- 'column_order' => \@column_order,
- };
-
bless ($self, $class);
}