summaryrefslogtreecommitdiffstats
path: root/src/library/columncache.cpp
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2020-12-13 18:09:06 +0100
committerUwe Klotz <uklotz@mixxx.org>2020-12-13 19:31:12 +0100
commitfe5d7ac5e307a72495b4059465897cbf3fb594ed (patch)
tree9088285749c11451070581c0fa514e8b3bd9f4cc /src/library/columncache.cpp
parentf6c94b0a8590e73024b75188c986f9fb98d85e61 (diff)
ColumnCache: Verify consistency of all column maps
Diffstat (limited to 'src/library/columncache.cpp')
-rw-r--r--src/library/columncache.cpp150
1 files changed, 79 insertions, 71 deletions
diff --git a/src/library/columncache.cpp b/src/library/columncache.cpp
index 4e815186ea..730462bf1f 100644
--- a/src/library/columncache.cpp
+++ b/src/library/columncache.cpp
@@ -22,67 +22,71 @@ void ColumnCache::setColumns(const QStringList& columns) {
m_columnIndexByName.clear();
for (int i = 0; i < columns.size(); ++i) {
QString column = columns[i];
+ DEBUG_ASSERT(!m_columnIndexByName.contains(column));
m_columnIndexByName[column] = i;
}
m_columnNameByEnum.clear();
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_ID] = LIBRARYTABLE_ID;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_ARTIST] = LIBRARYTABLE_ARTIST;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_TITLE] = LIBRARYTABLE_TITLE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_ALBUM] = LIBRARYTABLE_ALBUM;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_ALBUMARTIST] = LIBRARYTABLE_ALBUMARTIST;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_YEAR] = LIBRARYTABLE_YEAR;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_GENRE] = LIBRARYTABLE_GENRE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COMPOSER] = LIBRARYTABLE_COMPOSER;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_GROUPING] = LIBRARYTABLE_GROUPING;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_TRACKNUMBER] = LIBRARYTABLE_TRACKNUMBER;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_FILETYPE] = LIBRARYTABLE_FILETYPE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_NATIVELOCATION] = LIBRARYTABLE_LOCATION;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COMMENT] = LIBRARYTABLE_COMMENT;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_DURATION] = LIBRARYTABLE_DURATION;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_BITRATE] = LIBRARYTABLE_BITRATE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_BPM] = LIBRARYTABLE_BPM;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_REPLAYGAIN] = LIBRARYTABLE_REPLAYGAIN;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_CUEPOINT] = LIBRARYTABLE_CUEPOINT;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_URL] = LIBRARYTABLE_URL;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_SAMPLERATE] = LIBRARYTABLE_SAMPLERATE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_WAVESUMMARYHEX] = LIBRARYTABLE_WAVESUMMARYHEX;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_CHANNELS] = LIBRARYTABLE_CHANNELS;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_MIXXXDELETED] = LIBRARYTABLE_MIXXXDELETED;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_DATETIMEADDED] = LIBRARYTABLE_DATETIMEADDED;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_HEADERPARSED] = LIBRARYTABLE_HEADERPARSED;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_TIMESPLAYED] = LIBRARYTABLE_TIMESPLAYED;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_PLAYED] = LIBRARYTABLE_PLAYED;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_RATING] = LIBRARYTABLE_RATING;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_KEY] = LIBRARYTABLE_KEY;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_KEY_ID] = LIBRARYTABLE_KEY_ID;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_BPM_LOCK] = LIBRARYTABLE_BPM_LOCK;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_PREVIEW] = LIBRARYTABLE_PREVIEW;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COLOR] = LIBRARYTABLE_COLOR;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COVERART] = LIBRARYTABLE_COVERART;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COVERART_SOURCE] = LIBRARYTABLE_COVERART_SOURCE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COVERART_TYPE] = LIBRARYTABLE_COVERART_TYPE;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COVERART_LOCATION] = LIBRARYTABLE_COVERART_LOCATION;
- m_columnNameByEnum[COLUMN_LIBRARYTABLE_COVERART_HASH] = LIBRARYTABLE_COVERART_HASH;
-
- m_columnNameByEnum[COLUMN_TRACKLOCATIONSTABLE_FSDELETED] = TRACKLOCATIONSTABLE_FSDELETED;
-
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_TRACKID] = PLAYLISTTRACKSTABLE_TRACKID;
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_POSITION] = PLAYLISTTRACKSTABLE_POSITION;
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_PLAYLISTID] = PLAYLISTTRACKSTABLE_PLAYLISTID;
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_LOCATION] = PLAYLISTTRACKSTABLE_LOCATION;
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_ARTIST] = PLAYLISTTRACKSTABLE_ARTIST;
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_TITLE] = PLAYLISTTRACKSTABLE_TITLE;
- m_columnNameByEnum[COLUMN_PLAYLISTTRACKSTABLE_DATETIMEADDED] =
- PLAYLISTTRACKSTABLE_DATETIMEADDED;
-
- m_columnNameByEnum[COLUMN_REKORDBOX_ANALYZE_PATH] = REKORDBOX_ANALYZE_PATH;
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_ID, LIBRARYTABLE_ID);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_ARTIST, LIBRARYTABLE_ARTIST);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_TITLE, LIBRARYTABLE_TITLE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_ALBUM, LIBRARYTABLE_ALBUM);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_ALBUMARTIST, LIBRARYTABLE_ALBUMARTIST);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_YEAR, LIBRARYTABLE_YEAR);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_GENRE, LIBRARYTABLE_GENRE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COMPOSER, LIBRARYTABLE_COMPOSER);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_GROUPING, LIBRARYTABLE_GROUPING);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_TRACKNUMBER, LIBRARYTABLE_TRACKNUMBER);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_FILETYPE, LIBRARYTABLE_FILETYPE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_NATIVELOCATION, LIBRARYTABLE_LOCATION);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COMMENT, LIBRARYTABLE_COMMENT);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_DURATION, LIBRARYTABLE_DURATION);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_BITRATE, LIBRARYTABLE_BITRATE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_BPM, LIBRARYTABLE_BPM);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_REPLAYGAIN, LIBRARYTABLE_REPLAYGAIN);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_CUEPOINT, LIBRARYTABLE_CUEPOINT);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_URL, LIBRARYTABLE_URL);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_SAMPLERATE, LIBRARYTABLE_SAMPLERATE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_WAVESUMMARYHEX, LIBRARYTABLE_WAVESUMMARYHEX);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_CHANNELS, LIBRARYTABLE_CHANNELS);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_MIXXXDELETED, LIBRARYTABLE_MIXXXDELETED);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_DATETIMEADDED, LIBRARYTABLE_DATETIMEADDED);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_HEADERPARSED, LIBRARYTABLE_HEADERPARSED);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_TIMESPLAYED, LIBRARYTABLE_TIMESPLAYED);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_PLAYED, LIBRARYTABLE_PLAYED);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_RATING, LIBRARYTABLE_RATING);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_KEY, LIBRARYTABLE_KEY);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_KEY_ID, LIBRARYTABLE_KEY_ID);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_BPM_LOCK, LIBRARYTABLE_BPM_LOCK);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_PREVIEW, LIBRARYTABLE_PREVIEW);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COLOR, LIBRARYTABLE_COLOR);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COVERART, LIBRARYTABLE_COVERART);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COVERART_SOURCE, LIBRARYTABLE_COVERART_SOURCE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COVERART_TYPE, LIBRARYTABLE_COVERART_TYPE);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COVERART_LOCATION, LIBRARYTABLE_COVERART_LOCATION);
+ insertColumnNameByEnum(COLUMN_LIBRARYTABLE_COVERART_HASH, LIBRARYTABLE_COVERART_HASH);
+
+ insertColumnNameByEnum(COLUMN_TRACKLOCATIONSTABLE_FSDELETED, TRACKLOCATIONSTABLE_FSDELETED);
+
+ insertColumnNameByEnum(COLUMN_PLAYLISTTRACKSTABLE_TRACKID, PLAYLISTTRACKSTABLE_TRACKID);
+ insertColumnNameByEnum(COLUMN_PLAYLISTTRACKSTABLE_POSITION, PLAYLISTTRACKSTABLE_POSITION);
+ insertColumnNameByEnum(COLUMN_PLAYLISTTRACKSTABLE_PLAYLISTID, PLAYLISTTRACKSTABLE_PLAYLISTID);
+ insertColumnNameByEnum(COLUMN_PLAYLISTTRACKSTABLE_LOCATION, PLAYLISTTRACKSTABLE_LOCATION);
+ insertColumnNameByEnum(COLUMN_PLAYLISTTRACKSTABLE_ARTIST, PLAYLISTTRACKSTABLE_ARTIST);
+ insertColumnNameByEnum(COLUMN_PLAYLISTTRACKSTABLE_TITLE, PLAYLISTTRACKSTABLE_TITLE);
+ insertColumnNameByEnum(
+ COLUMN_PLAYLISTTRACKSTABLE_DATETIMEADDED,
+ PLAYLISTTRACKSTABLE_DATETIMEADDED);
+
+ insertColumnNameByEnum(COLUMN_REKORDBOX_ANALYZE_PATH, REKORDBOX_ANALYZE_PATH);
for (int i = 0; i < NUM_COLUMNS; ++i) {
m_columnIndexByEnum[i] = -1;
}
-
for (auto it = m_columnNameByEnum.constBegin(); it != m_columnNameByEnum.constEnd(); ++it) {
+ DEBUG_ASSERT(it.key() >= 0);
+ DEBUG_ASSERT(it.key() < NUM_COLUMNS);
+ DEBUG_ASSERT(m_columnIndexByEnum[it.key()] == -1);
m_columnIndexByEnum[it.key()] = fieldIndex(it.value());
}
@@ -91,28 +95,31 @@ void ColumnCache::setColumns(const QStringList& columns) {
m_columnSortByIndex.clear();
// Add the columns that requires a special sort
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_ARTIST], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_TITLE], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_ALBUM], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_ALBUMARTIST], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_YEAR], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_GENRE], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_COMPOSER], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_GROUPING], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_TRACKNUMBER], sortInt);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_FILETYPE], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_NATIVELOCATION], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_COMMENT], sortNoCase);
-
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_PLAYLISTTRACKSTABLE_LOCATION], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_PLAYLISTTRACKSTABLE_ARTIST], sortNoCase);
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_PLAYLISTTRACKSTABLE_TITLE], sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_ARTIST, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_TITLE, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_ALBUM, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_ALBUMARTIST, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_YEAR, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_GENRE, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_COMPOSER, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_GROUPING, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_TRACKNUMBER, sortInt);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_FILETYPE, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_NATIVELOCATION, sortNoCase);
+ insertColumnSortByIndex(COLUMN_LIBRARYTABLE_COMMENT, sortNoCase);
+
+ insertColumnSortByIndex(COLUMN_PLAYLISTTRACKSTABLE_LOCATION, sortNoCase);
+ insertColumnSortByIndex(COLUMN_PLAYLISTTRACKSTABLE_ARTIST, sortNoCase);
+ insertColumnSortByIndex(COLUMN_PLAYLISTTRACKSTABLE_TITLE, sortNoCase);
slotSetKeySortOrder(m_pKeyNotationCP->get());
}
void ColumnCache::slotSetKeySortOrder(double notationValue) {
- if (m_columnIndexByEnum[COLUMN_LIBRARYTABLE_KEY] < 0) return;
+ const int keyColumnIndex = m_columnIndexByEnum[COLUMN_LIBRARYTABLE_KEY];
+ if (keyColumnIndex < 0) {
+ return;
+ }
// A custom COLLATE function was tested, but using CASE ... WHEN was found to be faster
// see GitHub PR#649
@@ -121,7 +128,7 @@ void ColumnCache::slotSetKeySortOrder(double notationValue) {
KeyUtils::keyNotationFromNumericValue(notationValue);
// The placeholder %1 will be replaced by the "key" column. The actual
// key code needed for sorting is stored in the column "key_id".
- DEBUG_ASSERT(LIBRARYTABLE_KEY_ID == LIBRARYTABLE_KEY_ID + QStringLiteral("_id"));
+ DEBUG_ASSERT(LIBRARYTABLE_KEY_ID == LIBRARYTABLE_KEY + QStringLiteral("_id"));
QString keySortSQL = QStringLiteral("CASE %1_id WHEN NULL THEN 0");
for (int i = 0; i <= 24; ++i) {
const auto sortOrder = KeyUtils::keyToCircleOfFifthsOrder(
@@ -135,5 +142,6 @@ void ColumnCache::slotSetKeySortOrder(double notationValue) {
}
keySortSQL.append(" END");
- m_columnSortByIndex.insert(m_columnIndexByEnum[COLUMN_LIBRARYTABLE_KEY], keySortSQL);
+ // Replace the existing sort order
+ m_columnSortByIndex[keyColumnIndex] = keySortSQL;
}