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;
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
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};
}