Changeset View
Standalone View
src/databaseinterface.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 1211 Lines • ▼ Show 20 Line(s) | 1158 | { | |||
---|---|---|---|---|---|
1212 | 1212 | | |||
1213 | if (listTables.contains(QStringLiteral("DatabaseVersionV5")) && | 1213 | if (listTables.contains(QStringLiteral("DatabaseVersionV5")) && | ||
1214 | !listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | 1214 | !listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | ||
1215 | upgradeDatabaseV9(); | 1215 | upgradeDatabaseV9(); | ||
1216 | upgradeDatabaseV11(); | 1216 | upgradeDatabaseV11(); | ||
1217 | upgradeDatabaseV12(); | 1217 | upgradeDatabaseV12(); | ||
1218 | upgradeDatabaseV13(); | 1218 | upgradeDatabaseV13(); | ||
1219 | upgradeDatabaseV14(); | 1219 | upgradeDatabaseV14(); | ||
1220 | upgradeDatabaseV15(); | ||||
1220 | 1221 | | |||
1221 | checkDatabaseSchema(); | 1222 | checkDatabaseSchema(); | ||
1222 | } else if (listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | 1223 | } else if (listTables.contains(QStringLiteral("DatabaseVersionV9"))) { | ||
1223 | if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { | 1224 | if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { | ||
1224 | upgradeDatabaseV11(); | 1225 | upgradeDatabaseV11(); | ||
1225 | } | 1226 | } | ||
1226 | if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { | 1227 | if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { | ||
1227 | upgradeDatabaseV12(); | 1228 | upgradeDatabaseV12(); | ||
1228 | } | 1229 | } | ||
1229 | if (!listTables.contains(QStringLiteral("DatabaseVersionV13"))) { | 1230 | if (!listTables.contains(QStringLiteral("DatabaseVersionV13"))) { | ||
1230 | upgradeDatabaseV13(); | 1231 | upgradeDatabaseV13(); | ||
1231 | } | 1232 | } | ||
1232 | if (!listTables.contains(QStringLiteral("DatabaseVersionV14"))) { | 1233 | if (!listTables.contains(QStringLiteral("DatabaseVersionV14"))) { | ||
1233 | upgradeDatabaseV14(); | 1234 | upgradeDatabaseV14(); | ||
1234 | } | 1235 | } | ||
1236 | if (!listTables.contains(QStringLiteral("DatabaseVersionV15"))) { | ||||
1237 | upgradeDatabaseV15(); | ||||
1238 | } | ||||
1235 | 1239 | | |||
1236 | checkDatabaseSchema(); | 1240 | checkDatabaseSchema(); | ||
1237 | } else { | 1241 | } else { | ||
1238 | createDatabaseV9(); | 1242 | createDatabaseV9(); | ||
1239 | upgradeDatabaseV11(); | 1243 | upgradeDatabaseV11(); | ||
1240 | upgradeDatabaseV12(); | 1244 | upgradeDatabaseV12(); | ||
1241 | upgradeDatabaseV13(); | 1245 | upgradeDatabaseV13(); | ||
1242 | upgradeDatabaseV14(); | 1246 | upgradeDatabaseV14(); | ||
1247 | upgradeDatabaseV15(); | ||||
1243 | } | 1248 | } | ||
1244 | } | 1249 | } | ||
1245 | 1250 | | |||
1246 | void DatabaseInterface::createDatabaseV9() | 1251 | void DatabaseInterface::createDatabaseV9() | ||
1247 | { | 1252 | { | ||
1248 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | 1253 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | ||
1249 | 1254 | | |||
1250 | { | 1255 | { | ||
▲ Show 20 Lines • Show All 1648 Lines • ▼ Show 20 Line(s) | 2901 | if (!result) { | |||
2899 | 2904 | | |||
2900 | Q_EMIT databaseError(); | 2905 | Q_EMIT databaseError(); | ||
2901 | } | 2906 | } | ||
2902 | } | 2907 | } | ||
2903 | 2908 | | |||
2904 | qCInfo(orgKdeElisaDatabase) << "finished update to v14 of database schema"; | 2909 | qCInfo(orgKdeElisaDatabase) << "finished update to v14 of database schema"; | ||
2905 | } | 2910 | } | ||
2906 | 2911 | | |||
2912 | void DatabaseInterface::upgradeDatabaseV15() { | ||||
2913 | qCInfo(orgKdeElisaDatabase) << "begin update to v15 of database schema"; | ||||
2914 | | ||||
2915 | { | ||||
2916 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2917 | | ||||
2918 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV15` (`Version` INTEGER PRIMARY KEY NOT NULL)")); | ||||
2919 | | ||||
2920 | if (!result) { | ||||
2921 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastQuery(); | ||||
2922 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastError(); | ||||
2923 | | ||||
2924 | Q_EMIT databaseError(); | ||||
2925 | } | ||||
2926 | } | ||||
2927 | | ||||
2928 | { | ||||
2929 | QSqlQuery disableForeignKeys(d->mTracksDatabase); | ||||
2930 | | ||||
2931 | auto result = disableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=OFF")); | ||||
2932 | | ||||
2933 | if (!result) { | ||||
2934 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << disableForeignKeys.lastQuery(); | ||||
2935 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << disableForeignKeys.lastError(); | ||||
2936 | | ||||
2937 | Q_EMIT databaseError(); | ||||
2938 | } | ||||
2939 | } | ||||
2940 | | ||||
2941 | d->mTracksDatabase.transaction(); | ||||
2942 | | ||||
2943 | { | ||||
2944 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
2945 | | ||||
2946 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `NewTracks` (" | ||||
2947 | "`ID` INTEGER PRIMARY KEY AUTOINCREMENT, " | ||||
2948 | "`FileName` VARCHAR(255) NOT NULL, " | ||||
2949 | "`Priority` INTEGER NOT NULL, " | ||||
2950 | "`Title` VARCHAR(85), " | ||||
2951 | "`ArtistName` VARCHAR(55), " | ||||
2952 | "`AlbumTitle` VARCHAR(55), " | ||||
2953 | "`AlbumArtistName` VARCHAR(55), " | ||||
2954 | "`AlbumPath` VARCHAR(255), " | ||||
2955 | "`TrackNumber` INTEGER, " | ||||
2956 | "`DiscNumber` INTEGER, " | ||||
2957 | "`Duration` INTEGER NOT NULL, " | ||||
2958 | "`Rating` INTEGER NOT NULL DEFAULT 0, " | ||||
2959 | "`Genre` VARCHAR(55), " | ||||
2960 | "`Composer` VARCHAR(55), " | ||||
2961 | "`Lyricist` VARCHAR(55), " | ||||
2962 | "`Comment` VARCHAR(255), " | ||||
2963 | "`Year` INTEGER, " | ||||
2964 | "`Channels` INTEGER, " | ||||
2965 | "`BitRate` INTEGER, " | ||||
2966 | "`SampleRate` INTEGER, " | ||||
2967 | "`HasEmbeddedCover` BOOLEAN NOT NULL, " | ||||
2968 | "UNIQUE (" | ||||
2969 | "`FileName`" | ||||
2970 | "), " | ||||
2971 | "UNIQUE (" | ||||
2972 | "`Priority`, `Title`, `ArtistName`, " | ||||
2973 | "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`, " | ||||
2974 | "`TrackNumber`, `DiscNumber`" | ||||
2975 | "), " | ||||
2976 | "CONSTRAINT fk_fileName FOREIGN KEY (`FileName`) " | ||||
2977 | "REFERENCES `TracksData`(`FileName`) ON DELETE CASCADE, " | ||||
2978 | "CONSTRAINT fk_artist FOREIGN KEY (`ArtistName`) REFERENCES `Artists`(`Name`), " | ||||
2979 | "CONSTRAINT fk_tracks_composer FOREIGN KEY (`Composer`) REFERENCES `Composer`(`Name`), " | ||||
2980 | "CONSTRAINT fk_tracks_lyricist FOREIGN KEY (`Lyricist`) REFERENCES `Lyricist`(`Name`), " | ||||
2981 | "CONSTRAINT fk_tracks_genre FOREIGN KEY (`Genre`) REFERENCES `Genre`(`Name`), " | ||||
2982 | "CONSTRAINT fk_tracks_album FOREIGN KEY (" | ||||
2983 | "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)" | ||||
2984 | "REFERENCES `Albums`(`Title`, `ArtistName`, `AlbumPath`))")); | ||||
2985 | | ||||
2986 | if (!result) { | ||||
2987 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastQuery(); | ||||
2988 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastError(); | ||||
2989 | } | ||||
2990 | } | ||||
2991 | | ||||
2992 | { | ||||
2993 | QSqlQuery copyDataQuery(d->mTracksDatabase); | ||||
2994 | | ||||
2995 | auto result = copyDataQuery.exec(QStringLiteral("INSERT INTO `NewTracks` " | ||||
2996 | "SELECT " | ||||
2997 | "t.`ID`, " | ||||
2998 | "t.`FileName`, " | ||||
2999 | "t.`Priority`, " | ||||
3000 | "t.`Title`, " | ||||
3001 | "t.`ArtistName`, " | ||||
3002 | "t.`AlbumTitle`, " | ||||
3003 | "t.`AlbumArtistName`, " | ||||
3004 | "t.`AlbumPath`, " | ||||
3005 | "t.`TrackNumber`, " | ||||
3006 | "t.`DiscNumber`, " | ||||
3007 | "t.`Duration`, " | ||||
3008 | "t.`Rating`, " | ||||
3009 | "t.`Genre`, " | ||||
3010 | "t.`Composer`, " | ||||
3011 | "t.`Lyricist`, " | ||||
3012 | "t.`Comment`, " | ||||
3013 | "t.`Year`, " | ||||
3014 | "t.`Channels`, " | ||||
3015 | "t.`BitRate`, " | ||||
3016 | "t.`SampleRate`, " | ||||
3017 | "t.`HasEmbeddedCover` " | ||||
3018 | "FROM " | ||||
3019 | "`Tracks` t")); | ||||
3020 | | ||||
3021 | if (!result) { | ||||
3022 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << copyDataQuery.lastQuery(); | ||||
3023 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << copyDataQuery.lastError(); | ||||
3024 | | ||||
3025 | Q_EMIT databaseError(); | ||||
3026 | } | ||||
3027 | } | ||||
3028 | | ||||
3029 | { | ||||
3030 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
3031 | | ||||
3032 | auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `Tracks`")); | ||||
3033 | | ||||
3034 | if (!result) { | ||||
3035 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastQuery(); | ||||
3036 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastError(); | ||||
3037 | | ||||
3038 | Q_EMIT databaseError(); | ||||
3039 | } | ||||
3040 | } | ||||
3041 | | ||||
3042 | { | ||||
3043 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
3044 | | ||||
3045 | auto result = createSchemaQuery.exec(QStringLiteral("ALTER TABLE `NewTracks` RENAME TO `Tracks`")); | ||||
3046 | | ||||
3047 | if (!result) { | ||||
3048 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastQuery(); | ||||
3049 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createSchemaQuery.lastError(); | ||||
3050 | | ||||
3051 | Q_EMIT databaseError(); | ||||
3052 | } | ||||
3053 | } | ||||
3054 | | ||||
3055 | d->mTracksDatabase.commit(); | ||||
3056 | | ||||
3057 | { | ||||
3058 | QSqlQuery enableForeignKeys(d->mTracksDatabase); | ||||
3059 | | ||||
3060 | auto result = enableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=ON")); | ||||
3061 | | ||||
3062 | if (!result) { | ||||
3063 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << enableForeignKeys.lastQuery(); | ||||
3064 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << enableForeignKeys.lastError(); | ||||
3065 | | ||||
3066 | Q_EMIT databaseError(); | ||||
3067 | } | ||||
3068 | } | ||||
3069 | | ||||
3070 | { | ||||
3071 | QSqlQuery createTrackIndex(d->mTracksDatabase); | ||||
3072 | | ||||
3073 | const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " | ||||
3074 | "IF NOT EXISTS " | ||||
3075 | "`TracksAlbumIndex` ON `Tracks` " | ||||
3076 | "(`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); | ||||
3077 | | ||||
3078 | if (!result) { | ||||
3079 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastQuery(); | ||||
3080 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastError(); | ||||
3081 | | ||||
3082 | Q_EMIT databaseError(); | ||||
3083 | } | ||||
3084 | } | ||||
3085 | | ||||
3086 | { | ||||
3087 | QSqlQuery createTrackIndex(d->mTracksDatabase); | ||||
3088 | | ||||
3089 | const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " | ||||
3090 | "IF NOT EXISTS " | ||||
3091 | "`ArtistNameIndex` ON `Tracks` " | ||||
3092 | "(`ArtistName`)")); | ||||
3093 | | ||||
3094 | if (!result) { | ||||
3095 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastQuery(); | ||||
3096 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastError(); | ||||
3097 | | ||||
3098 | Q_EMIT databaseError(); | ||||
3099 | } | ||||
3100 | } | ||||
3101 | | ||||
3102 | { | ||||
3103 | QSqlQuery createTrackIndex(d->mTracksDatabase); | ||||
3104 | | ||||
3105 | const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " | ||||
3106 | "IF NOT EXISTS " | ||||
3107 | "`AlbumArtistNameIndex` ON `Tracks` " | ||||
3108 | "(`AlbumArtistName`)")); | ||||
3109 | | ||||
3110 | if (!result) { | ||||
3111 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastQuery(); | ||||
3112 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastError(); | ||||
3113 | | ||||
3114 | Q_EMIT databaseError(); | ||||
3115 | } | ||||
3116 | } | ||||
3117 | | ||||
3118 | { | ||||
3119 | QSqlQuery createTrackIndex(d->mTracksDatabase); | ||||
3120 | | ||||
3121 | const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " | ||||
3122 | "IF NOT EXISTS " | ||||
3123 | "`TracksUniqueData` ON `Tracks` " | ||||
3124 | "(`Title`, `ArtistName`, " | ||||
3125 | "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`, " | ||||
3126 | "`TrackNumber`, `DiscNumber`)")); | ||||
3127 | | ||||
3128 | if (!result) { | ||||
3129 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastQuery(); | ||||
3130 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastError(); | ||||
3131 | | ||||
3132 | Q_EMIT databaseError(); | ||||
3133 | } | ||||
3134 | } | ||||
3135 | | ||||
3136 | { | ||||
3137 | QSqlQuery createTrackIndex(d->mTracksDatabase); | ||||
3138 | | ||||
3139 | const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " | ||||
3140 | "IF NOT EXISTS " | ||||
3141 | "`TracksUniqueDataPriority` ON `Tracks` " | ||||
3142 | "(`Priority`, `Title`, `ArtistName`, " | ||||
3143 | "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`, " | ||||
3144 | "`TrackNumber`, `DiscNumber`)")); | ||||
3145 | | ||||
3146 | if (!result) { | ||||
3147 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastQuery(); | ||||
3148 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastError(); | ||||
3149 | | ||||
3150 | Q_EMIT databaseError(); | ||||
3151 | } | ||||
3152 | } | ||||
3153 | | ||||
3154 | { | ||||
3155 | QSqlQuery createTrackIndex(d->mTracksDatabase); | ||||
3156 | | ||||
3157 | const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " | ||||
3158 | "IF NOT EXISTS " | ||||
3159 | "`TracksFileNameIndex` ON `Tracks` " | ||||
3160 | "(`FileName`)")); | ||||
3161 | | ||||
3162 | if (!result) { | ||||
3163 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastQuery(); | ||||
3164 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::upgradeDatabaseV15" << createTrackIndex.lastError(); | ||||
3165 | | ||||
3166 | Q_EMIT databaseError(); | ||||
3167 | } | ||||
3168 | } | ||||
3169 | | ||||
3170 | qCInfo(orgKdeElisaDatabase) << "finished update to v14 of database schema"; | ||||
mgallien: You are upgrading the v15 schema.
By the way, on my tests, the upgrade is too long and that is… | |||||
Well, that is kind of expected with a large collection as the tracks table is huge. I have no idea how to prevent this besides forcing a complete reindex astippich: Well, that is kind of expected with a large collection as the tracks table is huge. I have no… | |||||
I have to do some research to find why it is faster to rebuild the database from scratch rather than the update. mgallien: I have to do some research to find why it is faster to rebuild the database from scratch rather… | |||||
3171 | } | ||||
3172 | | ||||
2907 | void DatabaseInterface::checkDatabaseSchema() | 3173 | void DatabaseInterface::checkDatabaseSchema() | ||
2908 | { | 3174 | { | ||
2909 | checkAlbumsTableSchema(); | 3175 | checkAlbumsTableSchema(); | ||
2910 | if (d->mIsInBadState) | 3176 | if (d->mIsInBadState) | ||
2911 | { | 3177 | { | ||
2912 | resetDatabase(); | 3178 | resetDatabase(); | ||
2913 | return; | 3179 | return; | ||
2914 | } | 3180 | } | ||
▲ Show 20 Lines • Show All 686 Lines • ▼ Show 20 Line(s) | 3771 | auto selectAllTracksText = QStringLiteral("SELECT " | |||
3601 | "WHERE " | 3867 | "WHERE " | ||
3602 | "tracksMapping.`FileName` = tracks.`FileName` AND " | 3868 | "tracksMapping.`FileName` = tracks.`FileName` AND " | ||
3603 | "tracks.`Priority` = (" | 3869 | "tracks.`Priority` = (" | ||
3604 | " SELECT " | 3870 | " SELECT " | ||
3605 | " MIN(`Priority`) " | 3871 | " MIN(`Priority`) " | ||
3606 | " FROM " | 3872 | " FROM " | ||
3607 | " `Tracks` tracks2 " | 3873 | " `Tracks` tracks2 " | ||
3608 | " WHERE " | 3874 | " WHERE " | ||
3609 | " tracks.`Title` = tracks2.`Title` AND " | 3875 | " (tracks.`Title` IS NULL OR tracks.`Title` = tracks2.`Title`) AND " | ||
I could not get the current code to output some execution time values, so I've added some QElapsedTimers, which are probably not that accurate, but show the problem anyways. I've tracked it down to the actual sql query . Adding "tracks.Title IS NULL OR ..." here increases the runtime of this query from approximately 150ms to 850 ms. Any ideas? astippich: I could not get the current code to output some execution time values, so I've added some… | |||||
Not yet but I will spent time this week on that. I cannot promise the exact day but before Friday should be possible. mgallien: Not yet but I will spent time this week on that. I cannot promise the exact day but before… | |||||
This should do the job while keeping reasonable runtime duration: ((tracks.Title IS NULL AND tracks.FileName = tracks2.FileName) OR tracks.Title = tracks2.Title) AND mgallien: This should do the job while keeping reasonable runtime duration:
((tracks.`Title` IS NULL AND… | |||||
3610 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | 3876 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | ||
3611 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | 3877 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | ||
3612 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | 3878 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | ||
3613 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | 3879 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | ||
3614 | ")" | 3880 | ")" | ||
3615 | ""); | 3881 | ""); | ||
3616 | 3882 | | |||
3617 | auto result = prepareQuery(d->mSelectAllTracksQuery, selectAllTracksText); | 3883 | auto result = prepareQuery(d->mSelectAllTracksQuery, selectAllTracksText); | ||
▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Line(s) | 3917 | auto selectAllTracksText = QStringLiteral("SELECT " | |||
3748 | "tracksMapping.`FileName` = tracks.`FileName` AND " | 4014 | "tracksMapping.`FileName` = tracks.`FileName` AND " | ||
3749 | "tracksMapping.`PlayCounter` > 0 AND " | 4015 | "tracksMapping.`PlayCounter` > 0 AND " | ||
3750 | "tracks.`Priority` = (" | 4016 | "tracks.`Priority` = (" | ||
3751 | " SELECT " | 4017 | " SELECT " | ||
3752 | " MIN(`Priority`) " | 4018 | " MIN(`Priority`) " | ||
3753 | " FROM " | 4019 | " FROM " | ||
3754 | " `Tracks` tracks2 " | 4020 | " `Tracks` tracks2 " | ||
3755 | " WHERE " | 4021 | " WHERE " | ||
3756 | " tracks.`Title` = tracks2.`Title` AND " | 4022 | " (tracks.`Title` IS NULL OR tracks.`Title` = tracks2.`Title`) AND " | ||
3757 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | 4023 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | ||
3758 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | 4024 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | ||
3759 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | 4025 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | ||
3760 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | 4026 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | ||
3761 | ")" | 4027 | ")" | ||
3762 | "ORDER BY tracksMapping.`LastPlayDate` DESC " | 4028 | "ORDER BY tracksMapping.`LastPlayDate` DESC " | ||
3763 | "LIMIT :maximumResults"); | 4029 | "LIMIT :maximumResults"); | ||
3764 | 4030 | | |||
▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Line(s) | 4042 | auto selectAllTracksText = QStringLiteral("SELECT " | |||
3873 | "tracksMapping.`FileName` = tracks.`FileName` AND " | 4139 | "tracksMapping.`FileName` = tracks.`FileName` AND " | ||
3874 | "tracksMapping.`PlayCounter` > 0 AND " | 4140 | "tracksMapping.`PlayCounter` > 0 AND " | ||
3875 | "tracks.`Priority` = (" | 4141 | "tracks.`Priority` = (" | ||
3876 | " SELECT " | 4142 | " SELECT " | ||
3877 | " MIN(`Priority`) " | 4143 | " MIN(`Priority`) " | ||
3878 | " FROM " | 4144 | " FROM " | ||
3879 | " `Tracks` tracks2 " | 4145 | " `Tracks` tracks2 " | ||
3880 | " WHERE " | 4146 | " WHERE " | ||
3881 | " tracks.`Title` = tracks2.`Title` AND " | 4147 | " (tracks.`Title` IS NULL OR tracks.`Title` = tracks2.`Title`) AND " | ||
3882 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | 4148 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | ||
3883 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | 4149 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | ||
3884 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | 4150 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | ||
3885 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | 4151 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | ||
3886 | ")" | 4152 | ")" | ||
3887 | "ORDER BY CAST(tracksMapping.`PlayCounter` AS REAL) / ((CAST(strftime('%s','now') as INTEGER) - CAST(tracksMapping.`FirstPlayDate` / 1000 as INTEGER)) / CAST(1000 AS REAL)) DESC " | 4153 | "ORDER BY CAST(tracksMapping.`PlayCounter` AS REAL) / ((CAST(strftime('%s','now') as INTEGER) - CAST(tracksMapping.`FirstPlayDate` / 1000 as INTEGER)) / CAST(1000 AS REAL)) DESC " | ||
3888 | "LIMIT :maximumResults"); | 4154 | "LIMIT :maximumResults"); | ||
3889 | 4155 | | |||
▲ Show 20 Lines • Show All 363 Lines • ▼ Show 20 Line(s) | 4421 | auto selectTrackQueryText = QStringLiteral("SELECT " | |||
4253 | "tracksMapping.`FileName` = tracks.`FileName` AND " | 4519 | "tracksMapping.`FileName` = tracks.`FileName` AND " | ||
4254 | "album.`ID` = :albumId AND " | 4520 | "album.`ID` = :albumId AND " | ||
4255 | "tracks.`Priority` = (" | 4521 | "tracks.`Priority` = (" | ||
4256 | " SELECT " | 4522 | " SELECT " | ||
4257 | " MIN(`Priority`) " | 4523 | " MIN(`Priority`) " | ||
4258 | " FROM " | 4524 | " FROM " | ||
4259 | " `Tracks` tracks2 " | 4525 | " `Tracks` tracks2 " | ||
4260 | " WHERE " | 4526 | " WHERE " | ||
4261 | " tracks.`Title` = tracks2.`Title` AND " | 4527 | " (tracks.`Title` IS NULL OR tracks.`Title` = tracks2.`Title`) AND " | ||
4262 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | 4528 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | ||
4263 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | 4529 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | ||
4264 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | 4530 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | ||
4265 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | 4531 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | ||
4266 | ")" | 4532 | ")" | ||
4267 | "ORDER BY tracks.`DiscNumber` ASC, " | 4533 | "ORDER BY tracks.`DiscNumber` ASC, " | ||
4268 | "tracks.`TrackNumber` ASC"); | 4534 | "tracks.`TrackNumber` ASC"); | ||
4269 | 4535 | | |||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 Line(s) | 4588 | auto selectTrackFromIdQueryText = QStringLiteral("SELECT " | |||
4419 | "tracks.`ID` = :trackId AND " | 4685 | "tracks.`ID` = :trackId AND " | ||
4420 | "tracksMapping.`FileName` = tracks.`FileName` AND " | 4686 | "tracksMapping.`FileName` = tracks.`FileName` AND " | ||
4421 | "tracks.`Priority` = (" | 4687 | "tracks.`Priority` = (" | ||
4422 | " SELECT " | 4688 | " SELECT " | ||
4423 | " MIN(`Priority`) " | 4689 | " MIN(`Priority`) " | ||
4424 | " FROM " | 4690 | " FROM " | ||
4425 | " `Tracks` tracks2 " | 4691 | " `Tracks` tracks2 " | ||
4426 | " WHERE " | 4692 | " WHERE " | ||
4427 | " tracks.`Title` = tracks2.`Title` AND " | 4693 | " (tracks.`Title` IS NULL OR tracks.`Title` = tracks2.`Title`) AND " | ||
4428 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | 4694 | " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " | ||
4429 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | 4695 | " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " | ||
4430 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | 4696 | " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " | ||
4431 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | 4697 | " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" | ||
4432 | ")" | 4698 | ")" | ||
4433 | ""); | 4699 | ""); | ||
4434 | 4700 | | |||
4435 | auto result = prepareQuery(d->mSelectTrackFromIdQuery, selectTrackFromIdQueryText); | 4701 | auto result = prepareQuery(d->mSelectTrackFromIdQuery, selectTrackFromIdQueryText); | ||
▲ Show 20 Lines • Show All 1592 Lines • ▼ Show 20 Line(s) | 6276 | { | |||
6028 | d->mUpdateTrackFileModifiedTime.finish(); | 6294 | d->mUpdateTrackFileModifiedTime.finish(); | ||
6029 | } | 6295 | } | ||
6030 | 6296 | | |||
6031 | qulonglong DatabaseInterface::internalInsertTrack(const MusicAudioTrack &oneTrack, | 6297 | qulonglong DatabaseInterface::internalInsertTrack(const MusicAudioTrack &oneTrack, | ||
6032 | const QHash<QString, QUrl> &covers, bool &isInserted) | 6298 | const QHash<QString, QUrl> &covers, bool &isInserted) | ||
6033 | { | 6299 | { | ||
6034 | qulonglong resultId = 0; | 6300 | qulonglong resultId = 0; | ||
6035 | 6301 | | |||
6036 | if (oneTrack.title().isEmpty()) { | | |||
6037 | return resultId; | | |||
6038 | } | | |||
6039 | | ||||
6040 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | 6302 | QUrl::FormattingOptions currentOptions = QUrl::PreferLocalFile | | ||
6041 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | 6303 | QUrl::RemoveAuthority | QUrl::RemoveFilename | QUrl::RemoveFragment | | ||
6042 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | 6304 | QUrl::RemovePassword | QUrl::RemovePort | QUrl::RemoveQuery | | ||
6043 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | 6305 | QUrl::RemoveScheme | QUrl::RemoveUserInfo; | ||
6044 | 6306 | | |||
6045 | const auto &trackPath = oneTrack.resourceURI().toString(currentOptions); | 6307 | const auto &trackPath = oneTrack.resourceURI().toString(currentOptions); | ||
6046 | 6308 | | |||
6047 | auto albumCover = covers[oneTrack.resourceURI().toString()]; | 6309 | auto albumCover = covers[oneTrack.resourceURI().toString()]; | ||
▲ Show 20 Lines • Show All 298 Lines • ▼ Show 20 Line(s) | 6592 | { | |||
6346 | } else { | 6608 | } else { | ||
6347 | result[TrackDataType::key_type::IsValidAlbumArtistRole] = false; | 6609 | result[TrackDataType::key_type::IsValidAlbumArtistRole] = false; | ||
6348 | if (trackRecord.value(4).toInt() == 1) { | 6610 | if (trackRecord.value(4).toInt() == 1) { | ||
6349 | result[TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(3); | 6611 | result[TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(3); | ||
6350 | } else if (trackRecord.value(4).toInt() > 1) { | 6612 | } else if (trackRecord.value(4).toInt() > 1) { | ||
6351 | result[TrackDataType::key_type::AlbumArtistRole] = QStringLiteral("Various Artists"); | 6613 | result[TrackDataType::key_type::AlbumArtistRole] = QStringLiteral("Various Artists"); | ||
6352 | } | 6614 | } | ||
6353 | } | 6615 | } | ||
6354 | | ||||
6355 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(7); | 6616 | result[TrackDataType::key_type::ResourceRole] = trackRecord.value(7); | ||
6356 | if (!trackRecord.value(9).isNull()) { | 6617 | if (!trackRecord.value(9).isNull()) { | ||
6357 | result[TrackDataType::key_type::TrackNumberRole] = trackRecord.value(9); | 6618 | result[TrackDataType::key_type::TrackNumberRole] = trackRecord.value(9); | ||
6358 | } | 6619 | } | ||
6359 | if (!trackRecord.value(10).isNull()) { | 6620 | if (!trackRecord.value(10).isNull()) { | ||
6360 | result[TrackDataType::key_type::DiscNumberRole] = trackRecord.value(10); | 6621 | result[TrackDataType::key_type::DiscNumberRole] = trackRecord.value(10); | ||
6361 | } | 6622 | } | ||
6362 | result[TrackDataType::key_type::DurationRole] = QTime::fromMSecsSinceStartOfDay(trackRecord.value(11).toInt()); | 6623 | result[TrackDataType::key_type::DurationRole] = QTime::fromMSecsSinceStartOfDay(trackRecord.value(11).toInt()); | ||
▲ Show 20 Lines • Show All 1377 Lines • Show Last 20 Lines |
You are upgrading the v15 schema.
By the way, on my tests, the upgrade is too long and that is a blocker for integration of this work.