fix foo/bar/AND/
[id3fs.git] / lib / ID3FS / Path.pm
index 5c7eacc..370c105 100644 (file)
@@ -300,14 +300,11 @@ sub parse
        }
     }
     # remove trailing boolean
-    if(@{$self->{elements}} &&
-       ref($self->{elements}->[$#{$self->{elements}}]) eq "ID3FS::PathElement::Boolean")
-    {
-       $self->{lastop}=pop @{$self->{elements}};
-    }
+    my @elements=@{$self->{elements}};
+    pop @elements if(@elements && ref($elements[$#elements]) eq "ID3FS::PathElement::Boolean");
     # sort elements by precedence
-    @{$self->{elements}}=$self->sort_elements(@{$self->{elements}});
-    $self->{tagtree}=$self->elements_to_tree([ @{$self->{elements}} ]);
+    @elements=$self->sort_elements(@elements);
+    $self->{tagtree}=$self->elements_to_tree(@elements);
     if($self->{tagtree})
     {
        ($self->{sqlconditions},
@@ -328,17 +325,17 @@ sub state
 
 sub elements_to_tree
 {
-    my($self, $elements)=@_;
-    return undef unless(@$elements);
+    my($self, @elements)=@_;
+    return undef unless(@elements);
     my ($left, $right, $op)=(undef, undef, undef);
-    my $thing=pop @$elements;
+    my $thing=pop @elements;
     if(ref($thing) eq "ID3FS::PathElement::Boolean")
     {
        my $op=$thing;
-       $right=$self->elements_to_tree($elements);
+       $right=$self->elements_to_tree(@elements);
        if($op->{name} ne "NOT")
        {
-           $left=$self->elements_to_tree($elements);
+           $left=$self->elements_to_tree(@elements);
        }
        return ID3FS::Path::Node->new($left, $op, $right);
     }
@@ -408,6 +405,7 @@ sub tag_has_values
 {
     my($self)=@_;
     my $tail=$self->{elements}->[$#{$self->{elements}}];
+    print "TAIL: ", ref($tail), "\n";
     if($tail && ref($tail) eq "ID3FS::PathElement::Tag")
     {
        return($self->{db}->tag_has_values($tail->{id}));
@@ -425,4 +423,16 @@ sub trailing_tag_id
     return undef;
 }
 
+sub trailing_tag_parent
+{
+    my($self)=@_;
+    my $tail=$self->{elements}->[$#{$self->{elements}}];
+    if($tail && ref($tail) eq "ID3FS::PathElement::Tag")
+    {
+       return($tail->{parents_id});
+    }
+    return undef;
+}
+
+
 1;