OSDN Git Service

Model::Moderations.pm: rewrite SQL in select_with_m2 method
authorhylom <hylom@users.sourceforge.jp>
Thu, 2 Feb 2017 16:05:06 +0000 (01:05 +0900)
committerhylom <hylom@users.sourceforge.jp>
Thu, 2 Feb 2017 16:05:06 +0000 (01:05 +0900)
src/newslash_web/lib/Newslash/Model/Moderations.pm

index b47ed04..46ffea5 100644 (file)
@@ -51,42 +51,22 @@ sub select {
 sub select_with_m2 {
     my ($self, $cid, $uid) = @_;
     my $sql = <<"EOSQL";
-SELECT moderatorlog.*, metamodlog.val AS m2val, metamodlog.uid AS m2uid from moderatorlog
-  LEFT JOIN metamodlog ON moderatorlog.id = metamodlog.mmid
-    WHERE moderatorlog.cid = ?
-      AND moderatorlog.active = 1
+SELECT moderatorlog.*, m2.val AS m2val, m2.uid AS m2uid FROM moderatorlog
+  LEFT JOIN
+    (SELECT metamodlog.* FROM moderatorlog
+       LEFT JOIN metamodlog ON moderatorlog.id = metamodlog.mmid
+       WHERE moderatorlog.cid = ? AND metamodlog.uid = ?) AS m2
+    ON moderatorlog.id = m2.mmid
+  WHERE moderatorlog.cid = ?
+    AND moderatorlog.active = 1
 EOSQL
-    #AND (metamodlog.uid = ? OR metamodlog.uid IS NULL)
 
     my $dbh = $self->connect_db;
     my $sth = $dbh->prepare($sql);
-    my $rs = $sth->execute($cid);
+    my $rs = $sth->execute($cid, $uid, $cid);
     my $mods = $sth->fetchall_arrayref({});
     $self->disconnect_db;
-    return if !$mods;
-
-    # query result contains non-given user's metamoderation, and moderation data is duplicated.
-    # so, remove those datas.
-    # TODO: are there more smart ways?
-    my %eliminated;
-    for my $mod (@$mods) {
-        $eliminated{$mod->{id}} = $mod;
-    }
-    for my $mod (@$mods) {
-        if ($mod->{m2uid} == $uid) {
-            $eliminated{$mod->{id}} = $mod;
-        }
-    }
-    for my $mod (values %eliminated) {
-        if ($mod->{m2uid} != $uid) {
-            delete $mod->{m2uid};
-            delete $mod->{m2val};
-        }
-    }
-    my @rs = values %eliminated;
-
-    return \@rs;
-
+    return $mods;
 }
 
 #========================================================================