package Xmldoom::Criteria::ExplicitJoinVisitor;
use DBIx::Romani::Query::Comparison;
use strict;
use Data::Dumper;
sub new
{
my $class = shift;
my $args = shift;
my $self = {
};
bless $self, $class;
return $self;
}
sub visit_select
{
my ($self, $select) = @_;
my $where = $select->get_where();
if ( $where )
{
return $where->visit( $self );
}
return undef;
}
sub visit_sql_column
{
my ($self, $column) = @_;
return [ $column->get_table(), $column->get_name() ];
}
sub visit_sql_literal
{
my ($self, $literal) = @_;
return undef;
}
sub visit_variable
{
my ($self, $variable) = @_;
return undef;
}
sub visit_null
{
my ($self, $null) = @_;
return undef;
}
sub visit_comparison
{
my ($self, $comp) = @_;
my $type = $comp->get_type();
if ( $type eq $DBIx::Romani::Query::Comparison::EQUAL )
{
my $lval = $comp->get_lvalue()->visit( $self );
my $rval = $comp->get_rvalue()->visit( $self );
if ( defined $lval and defined $rval )
{
return [
{
local_table => $lval->[0],
local_column => $lval->[1],
foreign_table => $rval->[0],
foreign_column => $rval->[1]
},
{
local_table => $rval->[0],
local_column => $rval->[1],
foreign_table => $lval->[0],
foreign_column => $lval->[1]
}
];
}
}
return undef;
}
sub visit_operator
{
my ($self, $operator) = @_;
return undef;
}
sub visit_where
{
my ($self, $where) = @_;
my @joins;
foreach my $value ( @{$where->get_values()} )
{
my $join = $value->visit( $self );
if ( defined $join )
{
if ( ref($join) eq 'ARRAY' )
{
@joins = ( @joins, @$join );
}
else
{
push @joins, $join;
}
}
}
return \@joins;
}
sub visit_ttt_function
{
my ($self, $ttt) = @_;
return undef;
}
sub visit_ttt_operator
{
my ($self, $ttt) = @_;
return undef;
}
sub visit_ttt_keyword
{
my ($self, $ttt) = @_;
return undef;
}
sub visit_ttt_join
{
my ($self, $ttt) = @_;
return undef;
}
sub visit_function_count
{
my ($self, $func) = @_;
return undef;
}
sub visit_function_now
{
my ($self, $func) = @_;
return undef;
}
1;