package Xmldoom::Criteria::Attribute;
use DBIx::Romani::Query::SQL::Column;
use strict;
sub new
{
my $class = shift;
my $args = shift;
my $table_name;
my $column_name;
if ( ref($args) eq 'HASH' )
{
$table_name = $args->{table_name};
$column_name = $args->{column_name};
}
else
{
($table_name, $column_name) = split '/', $args;
}
my $self = {
table_name => $table_name,
column_name => $column_name
};
bless $self, $class;
return $self;
}
sub get_table_name { return shift->{table_name}; }
sub get_column_name { return shift->{column_name}; }
sub get_query_lval
{
my ($self, $database) = @_;
# TODO: we could validate if the table/column pair actually exists
return [ DBIx::Romani::Query::SQL::Column->new( $self->get_table_name(), $self->get_column_name() ) ];
}
# really, there are only lvalues for attribute
sub get_query_rval
{
my ($self, $database, $lval) = @_;
if ( not $lval->isa( 'Xmldoom::Criteria::Attribute' ) )
{
die "An Attribute rvalue cannot be cast into anyother type.";
}
return $self->get_query_lval( $database );
}
sub get_tables
{
my ($self, $database) = @_;
return [ $self->get_table_name() ];
}
sub clone
{
my $self = shift;
return Xmldoom::Criteria::Attribute->new({
table_name => $self->get_table_name(),
column_name => $self->get_column_name()
});
}
1;