X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2FID3FS%2FPath%2FNode.pm;h=11e2de35ef4590c1058c8b9de2fd19b77304aada;hb=dfa48c6258f1e0db4b1b17719c2ad84065335b90;hp=8362f3462750d6bac4c161e96d88eefa4023b76e;hpb=9f98f6108a1d4666fd103a8a75df33d50db6940b;p=id3fs.git diff --git a/lib/ID3FS/Path/Node.pm b/lib/ID3FS/Path/Node.pm index 8362f34..11e2de3 100644 --- a/lib/ID3FS/Path/Node.pm +++ b/lib/ID3FS/Path/Node.pm @@ -59,31 +59,36 @@ sub print_node sub to_sql { my($self, $parent, @joins)=@_; - @joins=("INNER") unless(@joins); - my @newjoins=(); - my (@leftjoins, @rightjoins); - my ($leftstr, $rightstr); - my $op=$self->op(); + my @outjoins=(); + # init + unless(@joins) + { + @outjoins = @joins = ("INNER"); + } my $left=$self->left(); my $right=$self->right(); - return ("", @joins) unless($left || $right); - ($leftstr, @leftjoins) = $self->node_to_sql($left, $parent, @joins); -# print "LEFT: $leftstr\n"; -# $andlevel=$self->max($andlevel, $leftandlevel); + return ("", @outjoins) unless($left || $right); + 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(@newjoins, "INNER"); + push(@joins, "INNER"); + push(@outjoins, "INNER"); } elsif($op->{name} eq "NOT") { - push(@newjoins, "LEFT"); + push(@joins, "LEFT"); + push(@outjoins, "LEFT"); } } - push(@joins, @newjoins); - ($rightstr, @rightjoins) = $self->node_to_sql($right, $parent, @joins); -# print "RIGHT: $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; @@ -91,20 +96,14 @@ sub to_sql { $str="(" . $str . ")"; } -# print "LEFTJOINS: ", join(', ', @leftjoins), "\n"; -# print "RIGHTJOINS:", join(', ', @rightjoins), "\n"; -# print "NEWJOINS: ", join(', ', @newjoins), "\n"; # print "STR: $str\n"; -# return($str, $self->max($leftandlevel, $rightandlevel)); - my @sidejoins=((scalar(@leftjoins) > scalar(@rightjoins)) ? @leftjoins : @rightjoins); - my @alljoins=(@newjoins, @sidejoins); - return($str, @alljoins); + return($str, @outjoins); } sub node_to_sql { my($self, $node, $parent, @joins)=@_; - return ("", @joins) unless(defined($node)); + return ("", ()) unless(defined($node)); return $node->to_sql($parent, @joins) if(ref($node) eq "ID3FS::Path::Node"); my $sql; my $cnt=scalar(@joins)+1; @@ -118,7 +117,7 @@ sub node_to_sql $sql= "(t" . scalar(@joins) .".parents_id=''"; $sql .= " AND fxt" . scalar(@joins) . ".tags_id='" . $node->{id} . "')"; } - return ($sql, @joins); + return ($sql, ()); } sub used_tags