The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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;