]> git.ktnx.net Git - mpd-feeder.git/commitdiff
fix DB stats retrieval when no songs were queued recently
authorDamyan Ivanov <dmn@debian.org>
Fri, 12 Nov 2021 06:42:35 +0000 (06:42 +0000)
committerDamyan Ivanov <dmn@debian.org>
Fri, 12 Nov 2021 06:42:35 +0000 (06:42 +0000)
strangely one of the totals was getting undef and broke the division
perhaps the UNION is not working as expected?

lib/App/MPD/Feeder.pm

index 4285e7077549ce294e26b6c7b6d75babef7f9da3..c23b4b465bf6c3c4590b96a549a14000d004d9cc 100644 (file)
@@ -248,7 +248,6 @@ SQL
             $sql =~ s/^SELECT .+$/SELECT COUNT(DISTINCT s.path)/m;
             $sql =~ s/^ORDER BY .+$//m;
             $sql =~ s/^LIMIT .+$//m;
-            $log->debug($sql);
             my $sth = $db->prepare_cached($sql);
             pop @params;
             $sth->execute(@params);
@@ -258,26 +257,22 @@ SQL
             $sth = $db->prepare_cached('SELECT COUNT(*) FROM songs');
             $sth->execute;
             my $total = ($sth->fetchrow_array)[0];
+            $sth->finish;
             $log->debug(
                 sprintf(
                     "Number of songs meeting the criteria: %d out of total %d (%5.2f%%)",
                     $count, $total, 100.0 * $count / $total
                 )
             );
-            $sth->finish;
 
             $sql = <<SQL;
 SELECT COUNT(*)
 FROM songs s
 WHERE (s.last_queued IS NULL OR s.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
-UNION
-SELECT COUNT(*)
-FROM songs
 SQL
             $sth = $db->prepare_cached($sql);
             $sth->execute($opt->min_song_interval);
             $count = ($sth->fetchrow_array)[0];
-            $total = ($sth->fetchrow_array)[0];
             $sth->finish;
 
             $log->debug(
@@ -292,41 +287,43 @@ SQL
 SELECT COUNT(*)
 FROM artists ar
 WHERE (ar.last_queued IS NULL OR ar.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
-UNION
-SELECT COUNT(*)
-FROM artists
 SQL
             $sth = $db->prepare_cached($sql);
             $sth->execute($opt->min_artist_interval);
             $count = ($sth->fetchrow_array)[0];
+            $sth->finish;
+
+            $sth = $db->prepare_cached('SELECT COUNT(*) FROM artists');
+            $sth->execute;
             $total = ($sth->fetchrow_array)[0];
+            $sth->finish;
             $log->debug(
                 sprintf(
                     "Number of artists not queued soon: %d out of total %d (%5.2f%%)",
                     $count, $total, 100.0 * $count / $total
                 )
             );
-            $sth->finish;
 
             $sql = <<SQL;
 SELECT COUNT(*)
 FROM albums al
 WHERE (al.last_queued IS NULL OR al.last_queued < CURRENT_TIMESTAMP - (? || ' seconds')::interval)
-UNION
-SELECT COUNT(*)
-FROM albums
 SQL
             $sth = $db->prepare_cached($sql);
             $sth->execute($opt->min_album_interval);
             $count = ($sth->fetchrow_array)[0];
+            $sth->finish;
+
+            $sth = $db->prepare_cached('SELECT COUNT(*) FROM albums');
+            $sth->execute;
             $total = ($sth->fetchrow_array)[0];
+            $sth->finish;
             $log->debug(
                 sprintf(
                     "Number of albums not queued soon: %d out of total %d (%5.2f%%)",
                     $count, $total, 100.0 * $count / $total
                 )
             );
-            $sth->finish;
 
             undef $sth;
         }