DbFramework::Key - Key class


DbFramework documentation Contained in the DbFramework distribution.

Index


Code Index:

NAME

Top

DbFramework::Key - Key class

SYNOPSIS

Top

  use DbFramework::Key;
  $k     = new DbFramework::Key($name,\@attributes);
  $name  = $k->name($name);
  @a     = @{$k->incorporates_l(\@attributes)};
  @names = $k->attribute_names;
  $sql   = $k->as_sql;
  $table = $k->belongs_to($table);
  $html  = $k->as_html_heading;

DESCRIPTION

Top

The DbFramework::Key class implements keys (indexes) for a table.

SUPERCLASSES

Top

DbFramework::Util

CLASS METHODS

Top

new($name,\@attributes)

Create a new DbFramework::Key object. $name is the name of the key. @attributes is a list of DbFramework::Attribute objects from a single DbFramework::Table object which make up the key.

OBJECT METHODS

Top

A key incorporates 0 or more attributes. These attributes can be accessed using the attribute INCORPORATES_L. See AUTOLOAD() in DbFramework::Util for the accessor methods for this attribute.

name($name)

If $name is supplied sets the data model name. Returns the data model name.

belongs_to($table)

$table is a DbFramework::Table object. If supplied sets the table to which this key refers to $table. Returns a DbFramework::Table.

bgcolor($bgcolor)

If $color is supplied sets the background colour for HTML table cells. Returns the current background colour.

attribute_names()

Returns a list of the names of the attributes which make up the key.

as_sql()

Returns a string which can be used in an SQL 'CREATE TABLE' statement to create the key.

as_html_heading()

Returns a string for use as a column heading cell in an HTML table;

SEE ALSO

Top

DbFramework::ForeignKey, DbFramework::PrimaryKey and DbFramework::Catalog.

AUTHOR

Top

Paul Sharpe <paul@miraclefish.com>

COPYRIGHT

Top


DbFramework documentation Contained in the DbFramework distribution.
package DbFramework::Key;
use strict;
use base qw(DbFramework::Util);
use Alias;
use vars qw( $NAME @INCORPORATES_L $BELONGS_TO $BGCOLOR );

my %fields = (
	      NAME           => undef,
	      # Key 0:N Incorporates 0:N Attribute
	      INCORPORATES_L => undef,
	      # Key 1:1 BelongsTo 1:1 Table
	      BELONGS_TO     => undef,
	      BGCOLOR        => '#ffffff',
	     );

##-----------------------------------------------------------------------------
## CLASS METHODS
##-----------------------------------------------------------------------------

sub new {
  my $DEBUG = 0;
  my $proto = shift;
  my $class = ref($proto) || $proto;
  print STDERR "=>$class::new(@_)\n" if $DEBUG;
  my $self  = bless { _PERMITTED => \%fields, %fields, }, $class;
  $self->name(shift);
  $self->incorporates_l(shift);
  print STDERR "<=$class::new()\n" if $DEBUG;
  return $self;
}

##----------------------------------------------------------------------------
## OBJECT METHODS
##-----------------------------------------------------------------------------

sub attribute_names {
  my $self = attr shift;
  my @names;
  for ( @INCORPORATES_L ) { push(@names,$_->name) }
  return @names;
}

#-----------------------------------------------------------------------------

sub as_sql {
  my $self = attr shift;
  return "KEY $NAME (" . join(',',$self->attribute_names) . ")";
}

#-----------------------------------------------------------------------------

sub _input_template {
  my $self   = attr shift;
  my $t_name = $BELONGS_TO ? $BELONGS_TO->name : 'UNKNOWN_TABLE';
  my $in;
  my $bgcolor = $self->bgcolor;
  for ( @INCORPORATES_L ) {
    my $a_name = $_->name;
    $in .= qq{<TD><DbField ${t_name}.${a_name}></TD>};
  }
  $in;
}

#-----------------------------------------------------------------------------

sub _output_template {
  my $self   = attr shift;
  my $t_name = $BELONGS_TO ? $BELONGS_TO->name : 'UNKNOWN_TABLE';
  my $out;
  for ( @INCORPORATES_L ) {
    my $a_name = $_->name;
    $out .= qq{<TD BGCOLOR='$BGCOLOR'><DbValue ${t_name}.${a_name}></TD>};
  }
  $out;
}

#-----------------------------------------------------------------------------

sub as_html_heading {
  my $self = attr shift;
  my $html = "<TD BGCOLOR='$BGCOLOR' COLSPAN=".scalar(@INCORPORATES_L).">";
  for ( @INCORPORATES_L ) { $html .= $_->name . ',' }
  chop($html);
  "$html</TD>";
}

1;