Changeset View
Changeset View
Standalone 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 82 Lines • ▼ Show 20 Line(s) | 46 | : mTracksDatabase(tracksDatabase), mSelectAlbumQuery(mTracksDatabase), | |||
---|---|---|---|---|---|
83 | mQueryMaximumLyricistIdQuery(mTracksDatabase), mQueryMaximumComposerIdQuery(mTracksDatabase), | 83 | mQueryMaximumLyricistIdQuery(mTracksDatabase), mQueryMaximumComposerIdQuery(mTracksDatabase), | ||
84 | mQueryMaximumGenreIdQuery(mTracksDatabase), mSelectAllArtistsWithGenreFilterQuery(mTracksDatabase), | 84 | mQueryMaximumGenreIdQuery(mTracksDatabase), mSelectAllArtistsWithGenreFilterQuery(mTracksDatabase), | ||
85 | mSelectAllAlbumsShortWithGenreArtistFilterQuery(mTracksDatabase), mSelectAllAlbumsShortWithArtistFilterQuery(mTracksDatabase), | 85 | mSelectAllAlbumsShortWithGenreArtistFilterQuery(mTracksDatabase), mSelectAllAlbumsShortWithArtistFilterQuery(mTracksDatabase), | ||
86 | mSelectAllRecentlyPlayedTracksQuery(mTracksDatabase), mSelectAllFrequentlyPlayedTracksQuery(mTracksDatabase), | 86 | mSelectAllRecentlyPlayedTracksQuery(mTracksDatabase), mSelectAllFrequentlyPlayedTracksQuery(mTracksDatabase), | ||
87 | mClearTracksTable(mTracksDatabase), mClearAlbumsTable(mTracksDatabase), mClearArtistsTable(mTracksDatabase), | 87 | mClearTracksTable(mTracksDatabase), mClearAlbumsTable(mTracksDatabase), mClearArtistsTable(mTracksDatabase), | ||
88 | mClearComposerTable(mTracksDatabase), mClearGenreTable(mTracksDatabase), mClearLyricistTable(mTracksDatabase), | 88 | mClearComposerTable(mTracksDatabase), mClearGenreTable(mTracksDatabase), mClearLyricistTable(mTracksDatabase), | ||
89 | mArtistMatchGenreQuery(mTracksDatabase), mSelectTrackIdQuery(mTracksDatabase), | 89 | mArtistMatchGenreQuery(mTracksDatabase), mSelectTrackIdQuery(mTracksDatabase), | ||
90 | mInsertRadioQuery(mTracksDatabase), mDeleteRadioQuery(mTracksDatabase), | 90 | mInsertRadioQuery(mTracksDatabase), mDeleteRadioQuery(mTracksDatabase), | ||
91 | mSelectTrackFromIdAndUrlQuery(mTracksDatabase) | 91 | mSelectTrackFromIdAndUrlQuery(mTracksDatabase), | ||
92 | mUpdateDatabaseVersionQuery(mTracksDatabase), mSelectDatabaseVersionQuery(mTracksDatabase) | ||||
92 | { | 93 | { | ||
93 | } | 94 | } | ||
94 | 95 | | |||
95 | QSqlDatabase mTracksDatabase; | 96 | QSqlDatabase mTracksDatabase; | ||
96 | 97 | | |||
97 | QSqlQuery mSelectAlbumQuery; | 98 | QSqlQuery mSelectAlbumQuery; | ||
98 | 99 | | |||
99 | QSqlQuery mSelectTrackQuery; | 100 | QSqlQuery mSelectTrackQuery; | ||
▲ Show 20 Lines • Show All 161 Lines • ▼ Show 20 Line(s) | |||||
261 | QSqlQuery mSelectTrackIdQuery; | 262 | QSqlQuery mSelectTrackIdQuery; | ||
262 | 263 | | |||
263 | QSqlQuery mInsertRadioQuery; | 264 | QSqlQuery mInsertRadioQuery; | ||
264 | 265 | | |||
265 | QSqlQuery mDeleteRadioQuery; | 266 | QSqlQuery mDeleteRadioQuery; | ||
266 | 267 | | |||
267 | QSqlQuery mSelectTrackFromIdAndUrlQuery; | 268 | QSqlQuery mSelectTrackFromIdAndUrlQuery; | ||
268 | 269 | | |||
270 | QSqlQuery mUpdateDatabaseVersionQuery; | ||||
271 | | ||||
272 | QSqlQuery mSelectDatabaseVersionQuery; | ||||
273 | | ||||
269 | QSet<qulonglong> mModifiedTrackIds; | 274 | QSet<qulonglong> mModifiedTrackIds; | ||
270 | 275 | | |||
271 | QSet<qulonglong> mModifiedAlbumIds; | 276 | QSet<qulonglong> mModifiedAlbumIds; | ||
272 | 277 | | |||
273 | QSet<qulonglong> mModifiedArtistIds; | 278 | QSet<qulonglong> mModifiedArtistIds; | ||
274 | 279 | | |||
275 | QSet<qulonglong> mInsertedTracks; | 280 | QSet<qulonglong> mInsertedTracks; | ||
276 | 281 | | |||
▲ Show 20 Lines • Show All 969 Lines • ▼ Show 20 Line(s) | 1243 | for (const auto &oneTable : oldTables) { | |||
1246 | 1251 | | |||
1247 | if (!result) { | 1252 | if (!result) { | ||
1248 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); | 1253 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); | ||
1249 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); | 1254 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); | ||
1250 | 1255 | | |||
1251 | Q_EMIT databaseError(); | 1256 | Q_EMIT databaseError(); | ||
1252 | } | 1257 | } | ||
1253 | } | 1258 | } | ||
1254 | | ||||
1255 | listTables = d->mTracksDatabase.tables(); | | |||
1256 | } | | |||
1257 | | ||||
1258 | listTables = d->mTracksDatabase.tables(); | | |||
1259 | | ||||
1260 | if (listTables.contains(QLatin1String("DatabaseVersionV5")) && | | |||
1261 | !listTables.contains(QLatin1String("DatabaseVersionV9"))) { | | |||
1262 | upgradeDatabaseV9(); | | |||
1263 | upgradeDatabaseV11(); | | |||
1264 | upgradeDatabaseV12(); | | |||
1265 | upgradeDatabaseV13(); | | |||
1266 | upgradeDatabaseV14(); | | |||
1267 | | ||||
1268 | checkDatabaseSchema(); | | |||
1269 | } else if (listTables.contains(QLatin1String("DatabaseVersionV9"))) { | | |||
1270 | if (!listTables.contains(QLatin1String("DatabaseVersionV11"))) { | | |||
1271 | upgradeDatabaseV11(); | | |||
1272 | } | | |||
1273 | if (!listTables.contains(QLatin1String("DatabaseVersionV12"))) { | | |||
1274 | upgradeDatabaseV12(); | | |||
1275 | } | | |||
1276 | if (!listTables.contains(QLatin1String("DatabaseVersionV13"))) { | | |||
1277 | upgradeDatabaseV13(); | | |||
1278 | } | | |||
1279 | if (!listTables.contains(QLatin1String("DatabaseVersionV14"))) { | | |||
1280 | upgradeDatabaseV14(); | | |||
1281 | } | 1259 | } | ||
1282 | 1260 | | |||
1283 | checkDatabaseSchema(); | 1261 | manageNewDatabaseVersion(); | ||
1284 | } else { | | |||
1285 | createDatabaseV9(); | | |||
1286 | upgradeDatabaseV11(); | | |||
1287 | upgradeDatabaseV12(); | | |||
1288 | upgradeDatabaseV13(); | | |||
1289 | upgradeDatabaseV14(); | | |||
1290 | } | | |||
1291 | } | 1262 | } | ||
1292 | 1263 | | |||
1293 | void DatabaseInterface::createDatabaseV9() | 1264 | void DatabaseInterface::createDatabaseV9() | ||
1294 | { | 1265 | { | ||
1295 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | 1266 | qCInfo(orgKdeElisaDatabase) << "begin creation of v9 database schema"; | ||
1296 | 1267 | | |||
1297 | { | 1268 | { | ||
1298 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | 1269 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||
▲ Show 20 Lines • Show All 1546 Lines • ▼ Show 20 Line(s) | 2813 | if (!result) { | |||
2845 | 2816 | | |||
2846 | Q_EMIT databaseError(); | 2817 | Q_EMIT databaseError(); | ||
2847 | } | 2818 | } | ||
2848 | } | 2819 | } | ||
2849 | 2820 | | |||
2850 | qCInfo(orgKdeElisaDatabase) << "finished update to v13 of database schema"; | 2821 | qCInfo(orgKdeElisaDatabase) << "finished update to v13 of database schema"; | ||
2851 | } | 2822 | } | ||
2852 | 2823 | | |||
2824 | void DatabaseInterface::upgradeDatabaseV15() | ||||
2825 | { | ||||
2826 | | ||||
2827 | } | ||||
2828 | | ||||
2829 | void DatabaseInterface::upgradeDatabaseV16() | ||||
2830 | { | ||||
2831 | | ||||
2832 | } | ||||
2833 | | ||||
2853 | void DatabaseInterface::upgradeDatabaseV14() | 2834 | void DatabaseInterface::upgradeDatabaseV14() | ||
2854 | { | 2835 | { | ||
2855 | qCInfo(orgKdeElisaDatabase) << "begin update to v14 of database schema"; | 2836 | qCInfo(orgKdeElisaDatabase) << "begin update to v14 of database schema"; | ||
2856 | 2837 | | |||
2857 | { | 2838 | { | ||
2858 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | 2839 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||
2859 | 2840 | | |||
2860 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV14` (`Version` INTEGER PRIMARY KEY NOT NULL)")); | 2841 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV14` (`Version` INTEGER PRIMARY KEY NOT NULL)")); | ||
▲ Show 20 Lines • Show All 243 Lines • ▼ Show 20 Line(s) | 3075 | while(!listTables.isEmpty()) { | |||
3104 | if (listTables == QStringList{QStringLiteral("sqlite_sequence")}) { | 3085 | if (listTables == QStringList{QStringLiteral("sqlite_sequence")}) { | ||
3105 | break; | 3086 | break; | ||
3106 | } | 3087 | } | ||
3107 | } | 3088 | } | ||
3108 | 3089 | | |||
3109 | d->mIsInBadState = false; | 3090 | d->mIsInBadState = false; | ||
3110 | } | 3091 | } | ||
3111 | 3092 | | |||
3093 | void DatabaseInterface::manageNewDatabaseVersion() | ||||
3094 | { | ||||
3095 | int versionBegin = 0; | ||||
3096 | | ||||
3097 | auto listTables = d->mTracksDatabase.tables(); | ||||
3098 | | ||||
3099 | if (listTables.contains(QLatin1String("DatabaseVersion"))) { | ||||
3100 | manageNewDatabaseVersionInitRequests(); | ||||
3101 | | ||||
3102 | auto queryResult = execQuery(d->mSelectDatabaseVersionQuery); | ||||
3103 | if (!queryResult) { | ||||
3104 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::manageNewDatabaseVersion" << d->mUpdateDatabaseVersionQuery.lastQuery(); | ||||
3105 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::manageNewDatabaseVersion" << d->mUpdateDatabaseVersionQuery.lastError(); | ||||
3106 | | ||||
3107 | Q_EMIT databaseError(); | ||||
3108 | } | ||||
3109 | | ||||
3110 | if(d->mSelectDatabaseVersionQuery.next()) { | ||||
3111 | const auto ¤tRecord = d->mSelectDatabaseVersionQuery.record(); | ||||
3112 | | ||||
3113 | versionBegin = currentRecord.value(0).toInt(); | ||||
3114 | } | ||||
3115 | } else if (listTables.contains(QLatin1String("DatabaseVersionV5")) && | ||||
3116 | !listTables.contains(QLatin1String("DatabaseVersionV9"))) { | ||||
3117 | versionBegin = DatabaseInterface::V9; | ||||
3118 | } else { | ||||
3119 | createDatabaseVersionTable(); | ||||
3120 | manageNewDatabaseVersionInitRequests(); | ||||
3121 | | ||||
3122 | if(listTables.contains(QLatin1String("DatabaseVersionV9"))) { | ||||
3123 | if (!listTables.contains(QLatin1String("DatabaseVersionV11"))) { | ||||
3124 | versionBegin = DatabaseInterface::V11; | ||||
3125 | } else if (!listTables.contains(QLatin1String("DatabaseVersionV12"))) { | ||||
3126 | versionBegin = DatabaseInterface::V12; | ||||
3127 | } else if (!listTables.contains(QLatin1String("DatabaseVersionV13"))) { | ||||
3128 | versionBegin = DatabaseInterface::V13; | ||||
3129 | } else if (!listTables.contains(QLatin1String("DatabaseVersionV14"))) { | ||||
3130 | versionBegin = DatabaseInterface::V14; | ||||
3131 | } else { | ||||
3132 | versionBegin = DatabaseInterface::V15; | ||||
3133 | } | ||||
3134 | } else { | ||||
3135 | createDatabaseV9(); | ||||
3136 | versionBegin = DatabaseInterface::V11; | ||||
3137 | } | ||||
3138 | } | ||||
3139 | | ||||
3140 | int version = versionBegin; | ||||
3141 | for(; version-1 != DatabaseInterface::V16; version++) { | ||||
3142 | callUpgradeFunctionForVersion(static_cast<DatabaseVersion>(version)); | ||||
3143 | } | ||||
3144 | | ||||
3145 | if(version-1 != versionBegin) { | ||||
3146 | dropTable(QStringLiteral("DROP TABLE DatabaseVersionV9")); | ||||
mgallien: Some spaces are missing around the - operator and after the if | |||||
3147 | dropTable(QStringLiteral("DROP TABLE DatabaseVersionV11")); | ||||
3148 | dropTable(QStringLiteral("DROP TABLE DatabaseVersionV12")); | ||||
3149 | dropTable(QStringLiteral("DROP TABLE DatabaseVersionV13")); | ||||
3150 | dropTable(QStringLiteral("DROP TABLE DatabaseVersionV14")); | ||||
3151 | } | ||||
3152 | | ||||
3153 | setDatabaseVersionInTable(DatabaseInterface::V16); | ||||
3154 | | ||||
3155 | checkDatabaseSchema(); | ||||
3156 | } | ||||
3157 | | ||||
3158 | void DatabaseInterface::dropTable(QString query) | ||||
3159 | { | ||||
3160 | { | ||||
3161 | QSqlQuery dropQueryQuery(d->mTracksDatabase); | ||||
mgallien: Why the double { ? | |||||
jguidon: It remained after some refactoring, thanks :) | |||||
3162 | | ||||
3163 | const auto &result = dropQueryQuery.exec(query); | ||||
3164 | | ||||
3165 | if (!result) { | ||||
3166 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::dropTable" << dropQueryQuery.lastQuery(); | ||||
3167 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::dropTable" << dropQueryQuery.lastError(); | ||||
3168 | | ||||
3169 | Q_EMIT databaseError(); | ||||
3170 | } | ||||
3171 | } | ||||
3172 | } | ||||
3173 | | ||||
3174 | void DatabaseInterface::setDatabaseVersionInTable(int version) | ||||
3175 | { | ||||
3176 | { | ||||
3177 | d->mUpdateDatabaseVersionQuery.bindValue(QStringLiteral(":version"), version); | ||||
3178 | | ||||
3179 | auto queryResult = execQuery(d->mUpdateDatabaseVersionQuery); | ||||
3180 | | ||||
3181 | if (!queryResult) { | ||||
3182 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::setDatabaseVersionInTable" << d->mUpdateDatabaseVersionQuery.lastQuery(); | ||||
3183 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::setDatabaseVersionInTable" << d->mUpdateDatabaseVersionQuery.lastError(); | ||||
3184 | | ||||
3185 | Q_EMIT databaseError(); | ||||
3186 | } | ||||
3187 | } | ||||
3188 | } | ||||
3189 | | ||||
3190 | void DatabaseInterface::createDatabaseVersionTable() | ||||
3191 | { | ||||
3192 | qCInfo(orgKdeElisaDatabase) << "begin creation of DatabaseVersion table"; | ||||
3193 | QSqlQuery createSchemaQuery(d->mTracksDatabase); | ||||
3194 | | ||||
3195 | const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersion` (`Version` INTEGER PRIMARY KEY NOT NULL default 0)")); | ||||
3196 | | ||||
3197 | if (!result) { | ||||
3198 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::createDatabaseVersionTable" << createSchemaQuery.lastQuery(); | ||||
3199 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::createDatabaseVersionTable" << createSchemaQuery.lastError(); | ||||
3200 | | ||||
3201 | Q_EMIT databaseError(); | ||||
3202 | } | ||||
3203 | | ||||
3204 | const auto resultInsert = createSchemaQuery.exec(QStringLiteral("INSERT INTO `DatabaseVersion` VALUES (0)")); | ||||
3205 | if (!resultInsert) { | ||||
3206 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::createDatabaseVersionTable" << createSchemaQuery.lastQuery(); | ||||
3207 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::createDatabaseVersionTable" << createSchemaQuery.lastError(); | ||||
3208 | | ||||
3209 | Q_EMIT databaseError(); | ||||
3210 | } | ||||
3211 | } | ||||
3212 | | ||||
3213 | void DatabaseInterface::manageNewDatabaseVersionInitRequests() | ||||
3214 | { | ||||
3215 | { | ||||
3216 | auto initDatabaseVersionQuery = QStringLiteral("UPDATE `DatabaseVersion` set `Version` = :version "); | ||||
3217 | | ||||
3218 | auto result = prepareQuery(d->mUpdateDatabaseVersionQuery, initDatabaseVersionQuery); | ||||
3219 | | ||||
3220 | if (!result) { | ||||
3221 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::manageNewDatabaseVersionInitRequests" << d->mUpdateDatabaseVersionQuery.lastQuery(); | ||||
3222 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::manageNewDatabaseVersionInitRequests" << d->mUpdateDatabaseVersionQuery.lastError(); | ||||
3223 | | ||||
3224 | Q_EMIT databaseError(); | ||||
3225 | } | ||||
3226 | } | ||||
3227 | | ||||
3228 | { | ||||
3229 | auto selectDatabaseVersionQuery = QStringLiteral("SELECT versionTable.`Version` FROM `DatabaseVersion` versionTable"); | ||||
3230 | | ||||
3231 | auto result = prepareQuery(d->mSelectDatabaseVersionQuery, selectDatabaseVersionQuery); | ||||
3232 | | ||||
3233 | if (!result) { | ||||
3234 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::manageNewDatabaseVersionInitRequests" << d->mSelectDatabaseVersionQuery.lastQuery(); | ||||
3235 | qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::manageNewDatabaseVersionInitRequests" << d->mSelectDatabaseVersionQuery.lastError(); | ||||
3236 | | ||||
3237 | Q_EMIT databaseError(); | ||||
3238 | } | ||||
3239 | } | ||||
3240 | } | ||||
3241 | | ||||
3242 | void DatabaseInterface::callUpgradeFunctionForVersion(DatabaseVersion databaseVersion) | ||||
3243 | { | ||||
3244 | switch(databaseVersion) | ||||
3245 | { | ||||
3246 | case DatabaseInterface::V9: | ||||
3247 | upgradeDatabaseV9(); | ||||
3248 | break; | ||||
3249 | case DatabaseInterface::V11: | ||||
3250 | upgradeDatabaseV11(); | ||||
3251 | break; | ||||
3252 | case DatabaseInterface::V12: | ||||
3253 | upgradeDatabaseV12(); | ||||
3254 | break; | ||||
3255 | case DatabaseInterface::V13: | ||||
3256 | upgradeDatabaseV13(); | ||||
3257 | break; | ||||
3258 | case DatabaseInterface::V14: | ||||
3259 | upgradeDatabaseV14(); | ||||
3260 | break; | ||||
3261 | case DatabaseInterface::V15: | ||||
3262 | upgradeDatabaseV15(); | ||||
3263 | break; | ||||
3264 | case DatabaseInterface::V16: | ||||
3265 | upgradeDatabaseV16(); | ||||
3266 | break; | ||||
3267 | } | ||||
3268 | } | ||||
3269 | | ||||
3112 | void DatabaseInterface::initRequest() | 3270 | void DatabaseInterface::initRequest() | ||
3113 | { | 3271 | { | ||
3114 | auto transactionResult = startTransaction(); | 3272 | auto transactionResult = startTransaction(); | ||
3115 | if (!transactionResult) { | 3273 | if (!transactionResult) { | ||
3116 | return; | 3274 | return; | ||
3117 | } | 3275 | } | ||
3118 | 3276 | | |||
3119 | { | 3277 | { | ||
▲ Show 20 Lines • Show All 4816 Lines • Show Last 20 Lines |
Some spaces are missing around the - operator and after the if