mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-16 17:10:03 -04:00
Improve browse queries (credit @chme)
Adjusted re-commit of commit ec47c6e730106d511ea5054102233411d4980878
This commit is contained in:
parent
27a2fabb56
commit
2208c021aa
30
src/db.c
30
src/db.c
@ -1433,28 +1433,28 @@ db_build_query_browse(struct query_params *qp, char *field, char *sort_field, ch
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size = strlen("ORDER BY f.") + strlen(field) + 1;
|
size = strlen("ORDER BY f.") + strlen(sort_field) + 1;
|
||||||
sort = malloc(size);
|
sort = malloc(size);
|
||||||
if (!sort)
|
if (!sort)
|
||||||
{
|
{
|
||||||
DPRINTF(E_LOG, L_DB, "Out of memory for sort string\n");
|
DPRINTF(E_LOG, L_DB, "Out of memory for sort string\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
snprintf(sort, size, "ORDER BY f.%s", field);
|
snprintf(sort, size, "ORDER BY f.%s", sort_field);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx && qp->filter)
|
if (idx && qp->filter)
|
||||||
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
||||||
" AND %s %s %s;", field, sort_field, field, qp->filter, sort, idx);
|
" AND %s GROUP BY f.%s %s %s;", field, sort_field, field, qp->filter, field, sort, idx);
|
||||||
else if (idx)
|
else if (idx)
|
||||||
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
||||||
" %s %s;", field, sort_field, field, sort, idx);
|
" GROUP BY f.%s %s %s;", field, sort_field, field, field, sort, idx);
|
||||||
else if (qp->filter)
|
else if (qp->filter)
|
||||||
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
||||||
" AND %s %s;", field, sort_field, field, qp->filter, sort);
|
" AND %s GROUP BY f.%s %s;", field, sort_field, field, qp->filter, field, sort);
|
||||||
else
|
else
|
||||||
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != '' %s",
|
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
|
||||||
field, sort_field, field, sort);
|
" GROUP BY f.%s %s", field, sort_field, field, field, sort);
|
||||||
|
|
||||||
free(sort);
|
free(sort);
|
||||||
|
|
||||||
@ -4431,11 +4431,17 @@ static const struct db_init_query db_init_table_queries[] =
|
|||||||
#define I_ALBUMARTIST \
|
#define I_ALBUMARTIST \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_albumartist ON files(album_artist, album_artist_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_albumartist ON files(album_artist, album_artist_sort);"
|
||||||
|
|
||||||
|
/* Used by Q_BROWSE_COMPOSERS */
|
||||||
#define I_COMPOSER \
|
#define I_COMPOSER \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_composer ON files(composer, composer_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_composer ON files(disabled, media_kind, composer_sort);"
|
||||||
|
|
||||||
|
/* Used by Q_BROWSE_GENRES */
|
||||||
|
#define I_GENRE \
|
||||||
|
"CREATE INDEX IF NOT EXISTS idx_genre ON files(disabled, media_kind, genre);"
|
||||||
|
|
||||||
|
/* Used by Q_PLITEMS for smart playlists */
|
||||||
#define I_TITLE \
|
#define I_TITLE \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_title ON files(title, title_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_title ON files(disabled, media_kind, title_sort);"
|
||||||
|
|
||||||
#define I_ALBUM \
|
#define I_ALBUM \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_album ON files(album, album_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_album ON files(album, album_sort);"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user