partial (broken) support for tagvals
[id3fs.git] / lib / ID3FS / Path / Node.pm
index 9fc4570..f03d040 100644 (file)
@@ -58,22 +58,21 @@ sub print_node
 
 sub to_sql
 {
-    my($self, $andlevel, $parent_is_tag)=@_;
+    my($self, $parent, $andlevel)=@_;
     $andlevel=1 unless(defined($andlevel));
-    $parent_is_tag=0 unless(defined($parent_is_tag));
     my ($leftandlevel, $rightandlevel);
     my ($leftstr, $rightstr);
     my $op=$self->op();
     my $left=$self->left();
     my $right=$self->right();
     return ("", $andlevel) unless($left || $right);
-    ($leftstr, $leftandlevel) = $self->node_to_sql($left, $andlevel);
+    ($leftstr, $leftandlevel) = $self->node_to_sql($left, $parent, $andlevel);
     $andlevel=$self->max($andlevel, $leftandlevel);
     if(defined($op) && (($op->{name} eq "AND") || ($op->{name} eq "NOT")))
     {
        $andlevel++;
     }
-    ($rightstr, $rightandlevel) = $self->node_to_sql($right, $andlevel);
+    ($rightstr, $rightandlevel) = $self->node_to_sql($right, $parent, $andlevel);
     my $str=$leftstr;
     $str .= (" " . $op->{name} . " ") if($op);
     $str .= $rightstr;
@@ -86,10 +85,27 @@ sub to_sql
 
 sub node_to_sql
 {
-    my($self, $node, $andlevel)=@_;
+    my($self, $node, $parent, $andlevel)=@_;
     return ("", $andlevel) unless(defined($node));
-    return $node->to_sql($andlevel) if(ref($node) eq "ID3FS::Path::Node");
-    return( ( "fxt${andlevel}.tags_id=\"" . $node->{id} . "\""), $andlevel);
+    return $node->to_sql($parent, $andlevel) if(ref($node) eq "ID3FS::Path::Node");
+    my $sql;
+    if(defined($node->{parents_id}))
+    {
+       print "HIT PARENTS_ID: $node->{parents_id}\n";
+       $sql= "(t$andlevel.parents_id='$node->{parents_id}'";
+       $sql .= " AND fxt${andlevel}.tags_id='" . $node->{id} . "')";
+    }
+#    elsif($parent)
+#    {
+#      print "HIT \$parent\n";
+#      $sql= "(t$andlevel.parents_id='$parent')";
+#    }
+    else
+    {
+       $sql= "(t$andlevel.parents_id=''";
+       $sql .= " AND fxt${andlevel}.tags_id='" . $node->{id} . "')";
+    }
+    return ($sql, $andlevel);
 }
 
 sub used_tags
@@ -106,8 +122,11 @@ sub node_used_tags
     my($self, $node)=@_;
     return (undef) unless(defined($node));
     return $node->used_tags() if(ref($node) eq "ID3FS::Path::Node");
-    print $node->{id}, "\n";
-    return($node->{id});
+    if(defined($node->{parents_id}))
+    {
+       return([ $node->{parents_id}, $node->{id} ]);
+    }
+    return $node->{id};
 }