sub to_sql
{
- my($self, $parent, @injoins)=@_;
- my @childjoins=@injoins;
+ my($self, $parent, @joins)=@_;
my @outjoins=();
# init
- unless(@injoins)
+ unless(@joins)
{
- print "\nSTART\n";
- @outjoins = @childjoins = ("INNER");
+ @outjoins = @joins = ("INNER");
}
- print "OUT: ", join(', ', @outjoins), "\n";
- print "CLD: ", join(', ', @childjoins), "\n";
- my (@leftjoins, @rightjoins);
- my ($leftstr, $rightstr);
- my $op=$self->op();
my $left=$self->left();
my $right=$self->right();
return ("", @outjoins) unless($left || $right);
- ($leftstr, @leftjoins) = $self->node_to_sql($left, $parent, @childjoins);
-# $andlevel=$self->max($andlevel, $leftandlevel);
+ my ($leftstr, @leftjoins) = $self->node_to_sql($left, $parent, @joins);
+ push(@joins, @leftjoins);
+ push(@outjoins, @leftjoins);
+ my $op=$self->op();
if(defined($op))
{
if($op->{name} eq "AND")
{
- push(@childjoins, "INNER");
+ push(@joins, "INNER");
push(@outjoins, "INNER");
}
elsif($op->{name} eq "NOT")
{
- push(@childjoins, "LEFT");
+ push(@joins, "LEFT");
push(@outjoins, "LEFT");
}
}
- ($rightstr, @rightjoins) = $self->node_to_sql($right, $parent, @leftjoins, @childjoins);
- print "LEFT (", scalar(@leftjoins), "): $leftstr\n";
- print "RIGHT (", scalar(@rightjoins), "): $rightstr\n";
+ my ($rightstr, @rightjoins) = $self->node_to_sql($right, $parent, @joins);
+ push(@outjoins, @rightjoins);
+# print "LEFT (", scalar(@leftjoins), "): $leftstr\n";
+# print "RIGHT (", scalar(@rightjoins), "): $rightstr\n";
my $str=$leftstr;
$str .= (" " . $op->{name} . " ") if($op);
$str .= $rightstr;
{
$str="(" . $str . ")";
}
- print "STR: $str\n";
-# return($str, $self->max($leftandlevel, $rightandlevel));
- my @oldout=@outjoins;
- @outjoins = (@leftjoins, @outjoins, @rightjoins);
- if($op)
- {
- print "ME (", (defined($op) ? $op->{name} : ""), "): ";
- print(scalar(@outjoins), " = " , scalar(@leftjoins), " + ", scalar(@oldout),
- " + ", scalar(@rightjoins), "\n");
- }
+# print "STR: $str\n";
return($str, @outjoins);
}