From a6a0327b97516aa4820d26fd7c71e3e22b6a5f19 Mon Sep 17 00:00:00 2001 From: Randomnicode Date: Sun, 12 Jan 2020 21:18:47 +0100 Subject: [PATCH] Set limit in random track query itself instead of in connection to optimize query plan This is a direct backport of https://github.com/airsonic-advanced/airsonic-advanced/commit/f84644ae3df80fe4918844b62035b6bffeeed824 --- .../main/java/org/airsonic/player/dao/AbstractDao.java | 10 ---------- .../java/org/airsonic/player/dao/MediaFileDao.java | 4 +++- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/dao/AbstractDao.java b/airsonic-main/src/main/java/org/airsonic/player/dao/AbstractDao.java index fedfff16..8c825dd5 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/dao/AbstractDao.java +++ b/airsonic-main/src/main/java/org/airsonic/player/dao/AbstractDao.java @@ -102,16 +102,6 @@ public class AbstractDao { return result; } - protected List namedQueryWithLimit(String sql, RowMapper rowMapper, Map args, int limit) { - long t = System.nanoTime(); - JdbcTemplate jdbcTemplate = new JdbcTemplate(daoHelper.getDataSource()); - jdbcTemplate.setMaxRows(limit); - NamedParameterJdbcTemplate namedTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); - List result = namedTemplate.query(sql, args, rowMapper); - log(sql, t); - return result; - } - protected List queryForStrings(String sql, Object... args) { long t = System.nanoTime(); List result = getJdbcTemplate().queryForList(sql, args, String.class); diff --git a/airsonic-main/src/main/java/org/airsonic/player/dao/MediaFileDao.java b/airsonic-main/src/main/java/org/airsonic/player/dao/MediaFileDao.java index ed44f20a..3b9f3313 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/dao/MediaFileDao.java +++ b/airsonic-main/src/main/java/org/airsonic/player/dao/MediaFileDao.java @@ -592,7 +592,9 @@ public class MediaFileDao extends AbstractDao { query += " order by rand()"; - return namedQueryWithLimit(query, rowMapper, args, criteria.getCount()); + query += " limit " + criteria.getCount(); + + return namedQuery(query, rowMapper, args); } public int getAlbumCount(final List musicFolders) {