tags(): self-join: postgres fixes
authorIan Beckwith <ianb@erislabs.net>
Thu, 23 Sep 2010 02:40:56 +0000 (03:40 +0100)
committerIan Beckwith <ianb@erislabs.net>
Thu, 23 Sep 2010 02:40:56 +0000 (03:40 +0100)
lib/ID3FS/DB.pm

index d0382e8..ac84aa0 100644 (file)
@@ -115,15 +115,17 @@ sub tags
                        "  INNER JOIN tags ON tags.id=fxt2.tags_id\n" .
                        "  WHERE fxt1.tags_id IN \n\t(");
     my $main_sql_mid=")\n\tAND fxt2.tags_id NOT IN \n\t(";
-    my $main_sql_end=")\n  GROUP BY fxt2.tags_id;";
+    my $main_sql_end=")\n  GROUP BY tags.name;";
     while(my $constraint=shift @constraints)
     {
        print "CONSTRAINT: $constraint->{name}\n";
        my $cid=$constraint->{id};
        push(@tag_ids, $cid);
     }
-    my $sql = ($main_sql_start . join(", ", map { "\"$_\""; } @tag_ids) .
-              $main_sql_mid   . join(", ", map { "\"$_\""; } @tag_ids) .
+    @tag_ids = map( { "\"$_\""; } @tag_ids) unless($self->{postgres});
+    my $tagstr=join(", ", @tag_ids);
+    my $sql = ($main_sql_start . $tagstr .
+              $main_sql_mid   . $tagstr .
               $main_sql_end);
     print "SQL: $sql\n";
     my $result=$self->cmd_rows($sql);