join stack tweaking
authorIan Beckwith <ianb@erislabs.net>
Tue, 19 Oct 2010 21:16:15 +0000 (22:16 +0100)
committerIan Beckwith <ianb@erislabs.net>
Tue, 19 Oct 2010 21:16:15 +0000 (22:16 +0100)
lib/ID3FS/Path/Node.pm

index 720d12f..b71406d 100644 (file)
@@ -98,29 +98,26 @@ sub to_sql
     my $op=$self->name();
     if(defined($op))
     {
-       my $left_is_not =($left  && $left->name()  && $left->name()  eq "NOT");
-       my $right_is_not=($right && $right->name() && $right->name() eq "NOT");
        my $join=undef;
-       # if we are ANDing, add an inner join
-       # also if we are NOTing, but we are looking for a tag *value*
-       if($op eq "AND")
+       # if right child is a NOT, we don't need extra join/brackets
+       # NOT will do the same and we will end up with an extra one
+       unless($right && $right->name() && $right->name() eq "NOT")
        {
-           # if right child is a NOT, we don't need extra join/brackets
-           # NOT will do the same and we will end up with an extra one
-           $join= "INNER" unless($right_is_not);
-       }
-       elsif($op eq "NOT")
-       {
-           $not=1;
-           # as above - if right child is a NOT, we don't need extra join/brackets
-           # NOT will do the same and we will end up with an extra one
-           $join = ($hasvals ? "INNER" : "LEFT") unless($right_is_not);
-       }
-       elsif($op eq "OR")
-       {
-           # if left child is a NOT, we need an extra (inner) join
-           # unless right child is also a NOT
-           $join="INNER" if($left_is_not && ! $right_is_not)
+           # if we are ANDing or ORing, add an inner join
+           # also if we are NOTing, but we are looking for a tag *value*
+           if($op eq "AND")
+           {
+               $join= "INNER";
+           }
+           elsif($op eq "NOT")
+           {
+               $not=1;
+               $join = ($hasvals ? "INNER" : "LEFT");
+           }
+           elsif($op eq "OR")
+           {
+               $join="INNER" unless($left && $left->name() && $left->name() eq "NOT")
+           }
        }
        if($join)
        {