From 2eb69e8fc1f41c6947afbb88c0cf59565d2eda7a Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Tue, 19 Oct 2010 21:14:31 +0100 Subject: [PATCH] rename in_or to want_all_tags, tweak --- lib/ID3FS/Path.pm | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index a961792..744946c 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -499,7 +499,7 @@ sub tags } my $hasvals=$self->expecting_values(); my $sql="SELECT tags.name FROM "; - if($self->in_or()) + if($self->want_all_tags()) { $sql .= "files_x_tags\n"; } @@ -739,19 +739,27 @@ sub empty return 1; } -# if path is .../OR/ or .../OR/NOT -sub in_or +# if path is .../OR/ or .../OR/NOT or .../AND/NOT +sub want_all_tags { my($self)=@_; my $tail=$self->tail(); return 0 unless($tail); - return 0 unless($tail->type() == $TYPE_BOOL); - return 1 if($tail->name() eq "OR"); - return 0 unless($tail->name() eq "NOT"); my $parent=$self->tail_parent(); - return 0 unless($parent); - return 0 unless($parent->type() == $TYPE_BOOL); - return 1 if($parent->name() eq "OR"); + my $parent_valid = ($parent && $parent->type() == $TYPE_BOOL); + if($tail->type() == $TYPE_BOOL) + { + return 1 if($tail->name() eq "OR"); + return 0 unless($tail->name() eq "NOT"); + return 0 unless($parent_valid); + return 1 if($parent->name() eq "OR"); + return 1 if($parent->name() eq "AND"); + } + elsif($tail->type() == $TYPE_TAG) + { + return 0 unless($parent_valid); + return 1 if($parent->name() eq "NOT"); + } return 0; } -- 2.11.0