tidy code
authorIan Beckwith <ianb@erislabs.net>
Sat, 23 Oct 2010 19:17:49 +0000 (20:17 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sat, 23 Oct 2010 19:17:49 +0000 (20:17 +0100)
lib/ID3FS/Path.pm
lib/ID3FS/Path/Node.pm

index de8d63b..406fbdf 100644 (file)
@@ -48,7 +48,6 @@ sub new
     $self->{path} =~ s/\/\//\//g; # drop doubled slashes
 
     $self->parse();
     $self->{path} =~ s/\/\//\//g; # drop doubled slashes
 
     $self->parse();
-#    print "STATE: ", $self->state(), "\n";
     return $self;
 }
 
     return $self;
 }
 
@@ -91,8 +90,6 @@ sub dirents
     my @dents=();
     my @fents=();
     my $state=$self->state();
     my @dents=();
     my @fents=();
     my $state=$self->state();
-#    print "DIRENTS: STATE: $state\n";
-#    print "DIRENTS: FILE: $self->{path}\n";
     if($state==$STATE_ALL)
     {
        @dents=($self->filter($PATH_ALLTRACKS, $PATH_NOARTIST), $self->artists());
     if($state==$STATE_ALL)
     {
        @dents=($self->filter($PATH_ALLTRACKS, $PATH_NOARTIST), $self->artists());
@@ -149,7 +146,6 @@ sub parse
     return if($self->{path} eq "/");
     @{$self->{components}}=split(/\//, $self->{path});
     shift @{$self->{components}}; # drop empty field before leading /
     return if($self->{path} eq "/");
     @{$self->{components}}=split(/\//, $self->{path});
     shift @{$self->{components}}; # drop empty field before leading /
-#    print "PATH: $self->{path}\n";
     my @parts=@{$self->{components}};
     my($tag, $tagval);
     $self->{elements}=[];
     my @parts=@{$self->{components}};
     my($tag, $tagval);
     $self->{elements}=[];
@@ -158,16 +154,13 @@ sub parse
     my $tags_seen=0;
     while(defined(my $name=shift @parts))
     {
     my $tags_seen=0;
     while(defined(my $name=shift @parts))
     {
-#      print "NAME: $name\n";
        my $state=$self->state();
        if($state==$STATE_INVALID)
        {
        my $state=$self->state();
        if($state==$STATE_INVALID)
        {
-#          print "SM: INVALID: $name\n";
            return;
        }
        elsif($state==$STATE_ROOT)
        {
            return;
        }
        elsif($state==$STATE_ROOT)
        {
-#          print "SM: ROOT: $name\n";
            if($name eq "ALL")
            {
                $self->{in_all}=1;
            if($name eq "ALL")
            {
                $self->{in_all}=1;
@@ -197,10 +190,8 @@ sub parse
        elsif($state==$STATE_TAG)
        {
            my $tag=$self->tail();
        elsif($state==$STATE_TAG)
        {
            my $tag=$self->tail();
-#          print "SM: TAG/TAGVAL($state): $name\n";
            if($self->is($TYPE_TAG, $tag) && $self->{db}->tag_has_values($tag->id()))
            {
            if($self->is($TYPE_TAG, $tag) && $self->{db}->tag_has_values($tag->id()))
            {
-#              print "Parsing: parent: $tag->id()\n";
                my $tagval=ID3FS::Path::Node->new($self->{db}, $TYPE_TAG, $name, $tag->id());
                if(defined($tagval))
                {
                my $tagval=ID3FS::Path::Node->new($self->{db}, $TYPE_TAG, $name, $tag->id());
                if(defined($tagval))
                {
@@ -246,7 +237,6 @@ sub parse
        }
        elsif($state==$STATE_BOOLEAN)
        {
        }
        elsif($state==$STATE_BOOLEAN)
        {
-#          print "SM: BOOLEAN: $name\n";
            my $parent=$self->tail();
            my $allownot=1;
            if($self->is($TYPE_BOOL, $parent) &&
            my $parent=$self->tail();
            my $allownot=1;
            if($self->is($TYPE_BOOL, $parent) &&
@@ -276,7 +266,6 @@ sub parse
        }
        elsif($state==$STATE_ALBUMS)
        {
        }
        elsif($state==$STATE_ALBUMS)
        {
-#          print "SM: ALBUM: $name\n";
            if($name eq $PATH_ALLTRACKS)
            {
                $self->state($STATE_TRACKLIST);
            if($name eq $PATH_ALLTRACKS)
            {
                $self->state($STATE_TRACKLIST);
@@ -301,7 +290,6 @@ sub parse
        }
        elsif($state==$STATE_TRACKLIST)
        {
        }
        elsif($state==$STATE_TRACKLIST)
        {
-#          print "SM: TRACKLIST: $name\n";
            my $track=ID3FS::Path::Node->new($self->{db}, $TYPE_FILE, $name);
            if($track)
            {
            my $track=ID3FS::Path::Node->new($self->{db}, $TYPE_FILE, $name);
            if($track)
            {
@@ -315,7 +303,6 @@ sub parse
        }
        elsif($state==$STATE_FILE)
        {
        }
        elsif($state==$STATE_FILE)
        {
-#          print "SM: FILE: $name\n";
            # Can't have anything after a filename
            $self->state($STATE_INVALID);
        }
            # Can't have anything after a filename
            $self->state($STATE_INVALID);
        }
@@ -356,14 +343,17 @@ sub parse
     {
        pop @elements;
     }
     {
        pop @elements;
     }
-#    print "\nELEMENTS: ", join(' ', map { $_->name(); } @elements), "\n";
-    my @joins=$self->number_joins(@elements);
-    @joins=qw(INNER) unless(@joins);
-    $self->{joins}=\@joins;
-#    print "AFTER: ", join(' ', map { $_->name() . "(" . $_->{table} . ")"; } @elements), "\n";
-#    print "JOINS: ", join(', ', @joins), "\n";
+
+    # calculate joins and assign table numbers to nodes
+    $self->{joins}=[$self->number_joins(@elements)];
+
+    # always need at least one join
+    $self->{joins}=[qw(INNER)] unless(@{$self->{joins}});
+
     # sort elements by precedence
     @elements=$self->sort_elements(@elements);
     # sort elements by precedence
     @elements=$self->sort_elements(@elements);
+
+    # convert to binary tree
     $self->{tagtree}=$self->elements_to_tree(\@elements);
 }
 
     $self->{tagtree}=$self->elements_to_tree(\@elements);
 }
 
@@ -397,6 +387,7 @@ sub number_joins
        }
        else
        {
        }
        else
        {
+           $node->hasvals(0);
            if(@elements)
            {
                # if tag has a value, eat the tag, shifting to the value
            if(@elements)
            {
                # if tag has a value, eat the tag, shifting to the value
@@ -405,10 +396,6 @@ sub number_joins
                    $node->hasvals(1);
                    $node=shift(@elements);
                }
                    $node->hasvals(1);
                    $node=shift(@elements);
                }
-               else
-               {
-                   $node->hasvals(0);
-               }
            }
            elsif($self->{db}->tag_has_values($node->id()))
            {
            }
            elsif($self->{db}->tag_has_values($node->id()))
            {
@@ -736,8 +723,6 @@ sub tags_subselect
 {
     my($self)=@_;
     my $tree=$self->{tagtree};
 {
     my($self)=@_;
     my $tree=$self->{tagtree};
-#    use Data::Dumper;
-#    print Dumper $tree;
     my ($sqlclause, @joins)=$tree->to_sql() if($tree);
     my $sql="\tSELECT fxt1.files_id FROM tags t1";
     my @crosses=();
     my ($sqlclause, @joins)=$tree->to_sql() if($tree);
     my $sql="\tSELECT fxt1.files_id FROM tags t1";
     my @crosses=();
index b343090..52888a6 100644 (file)
@@ -114,20 +114,4 @@ sub used_tags
     return $self->id();
 }
 
     return $self->id();
 }
 
-# does the bottom right-most expression end in a NOT?
-sub right_ends_in_not
-{
-    my($self, $node)=@_;
-    return 0 unless($node);
-    my $right=$node->right();
-    if($right && $right->type() == $TYPE_BOOL)
-    {
-       return $self->right_ends_in_not($right);
-    }
-    my $op=$node->name();
-    return 0 unless($op);
-    return 1 if($op eq "NOT");
-    return 0;
-}
-
 1;
 1;