|
MythTV
0.26-pre
|
00001 #include <iostream> 00002 using namespace std; 00003 00004 #include <QString> 00005 #include <QSqlError> 00006 00007 #include <mythcontext.h> 00008 #include <mythdb.h> 00009 00010 #include "dbcheck.h" 00011 #include "gamesettings.h" 00012 00013 const QString currentDatabaseVersion = "1018"; 00014 00015 static bool UpdateDBVersionNumber(const QString &newnumber) 00016 { 00017 00018 if (!gCoreContext->SaveSettingOnHost("GameDBSchemaVer",newnumber,NULL)) 00019 { 00020 LOG(VB_GENERAL, LOG_ERR, 00021 QString("DB Error (Setting new DB version number): %1\n") 00022 .arg(newnumber)); 00023 00024 return false; 00025 } 00026 00027 return true; 00028 } 00029 00030 static bool performActualUpdate(const QString updates[], QString version, 00031 QString &dbver) 00032 { 00033 MSqlQuery query(MSqlQuery::InitCon()); 00034 00035 LOG(VB_GENERAL, LOG_NOTICE, 00036 QString("Upgrading to MythGame schema version ") + version); 00037 00038 int counter = 0; 00039 QString thequery = updates[counter]; 00040 00041 while (thequery != "") 00042 { 00043 if (!query.exec(thequery)) 00044 { 00045 QString msg = 00046 QString("DB Error (Performing database upgrade): \n" 00047 "Query was: %1 \nError was: %2 \nnew version: %3") 00048 .arg(thequery) 00049 .arg(MythDB::DBErrorMessage(query.lastError())) 00050 .arg(version); 00051 LOG(VB_GENERAL, LOG_ERR, msg); 00052 return false; 00053 } 00054 00055 counter++; 00056 thequery = updates[counter]; 00057 } 00058 00059 if (!UpdateDBVersionNumber(version)) 00060 return false; 00061 00062 dbver = version; 00063 return true; 00064 } 00065 00066 static bool InitializeDatabase(void) 00067 { 00068 LOG(VB_GENERAL, LOG_NOTICE, 00069 "Inserting MythGame initial database information."); 00070 00071 const QString updates[] = { 00072 "CREATE TABLE gamemetadata (" 00073 " system varchar(128) NOT NULL default ''," 00074 " romname varchar(128) NOT NULL default ''," 00075 " gamename varchar(128) NOT NULL default ''," 00076 " genre varchar(128) NOT NULL default ''," 00077 " year varchar(10) NOT NULL default ''," 00078 " publisher varchar(128) NOT NULL default ''," 00079 " favorite tinyint(1) default NULL," 00080 " rompath varchar(255) NOT NULL default ''," 00081 " gametype varchar(64) NOT NULL default ''," 00082 " diskcount tinyint(1) NOT NULL default '1'," 00083 " country varchar(128) NOT NULL default ''," 00084 " crc_value varchar(64) NOT NULL default ''," 00085 " display tinyint(1) NOT NULL default '1'," 00086 " version varchar(64) NOT NULL default ''," 00087 " KEY system (system)," 00088 " KEY year (year)," 00089 " KEY romname (romname)," 00090 " KEY gamename (gamename)," 00091 " KEY genre (genre)" 00092 ");", 00093 "CREATE TABLE gameplayers (" 00094 " gameplayerid int(10) unsigned NOT NULL auto_increment," 00095 " playername varchar(64) NOT NULL default ''," 00096 " workingpath varchar(255) NOT NULL default ''," 00097 " rompath varchar(255) NOT NULL default ''," 00098 " screenshots varchar(255) NOT NULL default ''," 00099 " commandline text NOT NULL," 00100 " gametype varchar(64) NOT NULL default ''," 00101 " extensions varchar(128) NOT NULL default ''," 00102 " spandisks tinyint(1) NOT NULL default '0'," 00103 " PRIMARY KEY (gameplayerid)," 00104 " UNIQUE KEY playername (playername)" 00105 ");", 00106 "CREATE TABLE romdb (" 00107 " crc varchar(64) NOT NULL default ''," 00108 " name varchar(128) NOT NULL default ''," 00109 " description varchar(128) NOT NULL default ''," 00110 " category varchar(128) NOT NULL default ''," 00111 " year varchar(10) NOT NULL default ''," 00112 " manufacturer varchar(128) NOT NULL default ''," 00113 " country varchar(128) NOT NULL default ''," 00114 " publisher varchar(128) NOT NULL default ''," 00115 " platform varchar(64) NOT NULL default ''," 00116 " filesize int(12) default NULL," 00117 " flags varchar(64) NOT NULL default ''," 00118 " version varchar(64) NOT NULL default ''," 00119 " KEY crc (crc)," 00120 " KEY year (year)," 00121 " KEY category (category)," 00122 " KEY name (name)," 00123 " KEY description (description)," 00124 " KEY platform (platform)" 00125 ");", 00126 "" 00127 }; 00128 QString dbver = ""; 00129 if (!performActualUpdate(updates, "1011", dbver)) 00130 return false; 00131 00132 return true; 00133 } 00134 00135 bool UpgradeGameDatabaseSchema(void) 00136 { 00137 QString dbver = gCoreContext->GetSetting("GameDBSchemaVer"); 00138 MSqlQuery query(MSqlQuery::InitCon()); 00139 00140 if (dbver == currentDatabaseVersion) 00141 return true; 00142 00143 if (dbver.isEmpty()) 00144 { 00145 if (!InitializeDatabase()) 00146 return false; 00147 dbver = "1011"; 00148 } 00149 00150 if (dbver == "1000") 00151 { 00152 const QString updates[] = { 00153 "ALTER TABLE gamemetadata ADD COLUMN favorite BOOL NULL;", 00154 "" 00155 }; 00156 if (!performActualUpdate(updates, "1001", dbver)) 00157 return false; 00158 } 00159 00160 if ((((dbver == "1004") 00161 || (dbver == "1003")) 00162 || (dbver == "1002")) 00163 || (dbver == "1001")) 00164 { 00165 const QString updates[] = { 00166 00167 "CREATE TABLE gameplayers (" 00168 " gameplayerid int(10) unsigned NOT NULL auto_increment," 00169 " playername varchar(64) NOT NULL default ''," 00170 " workingpath varchar(255) NOT NULL default ''," 00171 " rompath varchar(255) NOT NULL default ''," 00172 " screenshots varchar(255) NOT NULL default ''," 00173 " commandline varchar(255) NOT NULL default ''," 00174 " gametype varchar(64) NOT NULL default ''," 00175 " extensions varchar(128) NOT NULL default ''," 00176 " PRIMARY KEY (gameplayerid)," 00177 " UNIQUE KEY playername (playername)" 00178 ");", 00179 "ALTER TABLE gamemetadata ADD COLUMN rompath varchar(255) NOT NULL default ''; ", 00180 "ALTER TABLE gamemetadata ADD COLUMN gametype varchar(64) NOT NULL default ''; ", 00181 "" 00182 }; 00183 if (!performActualUpdate(updates, "1005", dbver)) 00184 return false; 00185 } 00186 00187 if (dbver == "1005") 00188 { 00189 const QString updates[] = { 00190 "ALTER TABLE gameplayers ADD COLUMN spandisks tinyint(1) NOT NULL default 0; ", 00191 "ALTER TABLE gamemetadata ADD COLUMN diskcount tinyint(1) NOT NULL default 1; ", 00192 "" 00193 }; 00194 if (!performActualUpdate(updates, "1006", dbver)) 00195 return false; 00196 } 00197 00198 if (dbver == "1006") 00199 { 00200 00201 if (!gCoreContext->GetSetting("GameAllTreeLevels").isEmpty()) 00202 if (!query.exec("UPDATE settings SET data = 'system gamename' " 00203 "WHERE value = 'GameAllTreeLevels'; ")) 00204 MythDB::DBError("update GameAllTreeLevels", query); 00205 00206 QString updates[] = { 00207 "ALTER TABLE gamemetadata ADD COLUMN country varchar(128) NOT NULL default ''; ", 00208 "ALTER TABLE gamemetadata ADD COLUMN crc_value varchar(64) NOT NULL default ''; ", 00209 "ALTER TABLE gamemetadata ADD COLUMN display tinyint(1) NOT NULL default 1; ", 00210 "" 00211 }; 00212 00213 if (!performActualUpdate(updates, "1007", dbver)) 00214 return false; 00215 } 00216 00217 if (dbver == "1007") 00218 { 00219 const QString updates[] = { 00220 "ALTER TABLE gameplayers MODIFY commandline TEXT NOT NULL default ''; ", 00221 "" 00222 }; 00223 00224 if (!performActualUpdate(updates, "1008", dbver)) 00225 return false; 00226 } 00227 00228 if (dbver == "1008") 00229 { 00230 const QString updates[] = { 00231 "CREATE TABLE romdb (" 00232 " crc varchar(64) NOT NULL default ''," 00233 " name varchar(128) NOT NULL default ''," 00234 " description varchar(128) NOT NULL default ''," 00235 " category varchar(128) NOT NULL default ''," 00236 " year varchar(10) NOT NULL default ''," 00237 " manufacturer varchar(128) NOT NULL default ''," 00238 " country varchar(128) NOT NULL default ''," 00239 " publisher varchar(128) NOT NULL default ''," 00240 " platform varchar(64) NOT NULL default ''," 00241 " filesize int(12) default NULL," 00242 " flags varchar(64) NOT NULL default ''," 00243 " version varchar(64) NOT NULL default ''," 00244 " KEY crc (crc)," 00245 " KEY year (year)," 00246 " KEY category (category)," 00247 " KEY name (name)," 00248 " KEY description (description)," 00249 " KEY platform (platform)" 00250 ");", 00251 "" 00252 }; 00253 00254 if (!performActualUpdate(updates, "1009", dbver)) 00255 return false; 00256 } 00257 00258 if (dbver == "1009") 00259 { 00260 const QString updates[] = { 00261 "ALTER TABLE gamemetadata MODIFY year varchar(10) not null default '';", 00262 "" 00263 }; 00264 00265 if (!performActualUpdate(updates, "1010", dbver)) 00266 return false; 00267 } 00268 00269 if (dbver == "1010") 00270 { 00271 const QString updates[] = { 00272 00273 "ALTER TABLE gamemetadata ADD COLUMN version varchar(64) NOT NULL default '';", 00274 "ALTER TABLE gamemetadata ADD COLUMN publisher varchar(128) NOT NULL default '';", 00275 "" 00276 }; 00277 00278 if (!performActualUpdate(updates, "1011", dbver)) 00279 return false; 00280 } 00281 00282 00283 if (dbver == "1011") 00284 { 00285 const QString updates[] = { 00286 "ALTER TABLE romdb ADD COLUMN binfile varchar(64) NOT NULL default ''; ", 00287 "" 00288 }; 00289 00290 if (!performActualUpdate(updates, "1012", dbver)) 00291 return false; 00292 } 00293 00294 00295 if (dbver == "1012") 00296 { 00297 const QString updates[] = { 00298 QString("ALTER DATABASE %1 DEFAULT CHARACTER SET latin1;") 00299 .arg(gContext->GetDatabaseParams().dbName), 00300 "ALTER TABLE gamemetadata" 00301 " MODIFY system varbinary(128) NOT NULL default ''," 00302 " MODIFY romname varbinary(128) NOT NULL default ''," 00303 " MODIFY gamename varbinary(128) NOT NULL default ''," 00304 " MODIFY genre varbinary(128) NOT NULL default ''," 00305 " MODIFY year varbinary(10) NOT NULL default ''," 00306 " MODIFY publisher varbinary(128) NOT NULL default ''," 00307 " MODIFY rompath varbinary(255) NOT NULL default ''," 00308 " MODIFY gametype varbinary(64) NOT NULL default ''," 00309 " MODIFY country varbinary(128) NOT NULL default ''," 00310 " MODIFY crc_value varbinary(64) NOT NULL default ''," 00311 " MODIFY version varbinary(64) NOT NULL default '';", 00312 "ALTER TABLE gameplayers" 00313 " MODIFY playername varbinary(64) NOT NULL default ''," 00314 " MODIFY workingpath varbinary(255) NOT NULL default ''," 00315 " MODIFY rompath varbinary(255) NOT NULL default ''," 00316 " MODIFY screenshots varbinary(255) NOT NULL default ''," 00317 " MODIFY commandline blob NOT NULL," 00318 " MODIFY gametype varbinary(64) NOT NULL default ''," 00319 " MODIFY extensions varbinary(128) NOT NULL default '';", 00320 "ALTER TABLE romdb" 00321 " MODIFY crc varbinary(64) NOT NULL default ''," 00322 " MODIFY name varbinary(128) NOT NULL default ''," 00323 " MODIFY description varbinary(128) NOT NULL default ''," 00324 " MODIFY category varbinary(128) NOT NULL default ''," 00325 " MODIFY year varbinary(10) NOT NULL default ''," 00326 " MODIFY manufacturer varbinary(128) NOT NULL default ''," 00327 " MODIFY country varbinary(128) NOT NULL default ''," 00328 " MODIFY publisher varbinary(128) NOT NULL default ''," 00329 " MODIFY platform varbinary(64) NOT NULL default ''," 00330 " MODIFY flags varbinary(64) NOT NULL default ''," 00331 " MODIFY version varbinary(64) NOT NULL default ''," 00332 " MODIFY binfile varbinary(64) NOT NULL default '';", 00333 "" 00334 }; 00335 00336 if (!performActualUpdate(updates, "1013", dbver)) 00337 return false; 00338 } 00339 00340 00341 if (dbver == "1013") 00342 { 00343 const QString updates[] = { 00344 QString("ALTER DATABASE %1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;") 00345 .arg(gContext->GetDatabaseParams().dbName), 00346 "ALTER TABLE gamemetadata" 00347 " DEFAULT CHARACTER SET default," 00348 " MODIFY system varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00349 " MODIFY romname varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00350 " MODIFY gamename varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00351 " MODIFY genre varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00352 " MODIFY year varchar(10) CHARACTER SET utf8 NOT NULL default ''," 00353 " MODIFY publisher varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00354 " MODIFY rompath varchar(255) CHARACTER SET utf8 NOT NULL default ''," 00355 " MODIFY gametype varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00356 " MODIFY country varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00357 " MODIFY crc_value varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00358 " MODIFY version varchar(64) CHARACTER SET utf8 NOT NULL default '';", 00359 "ALTER TABLE gameplayers" 00360 " DEFAULT CHARACTER SET default," 00361 " MODIFY playername varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00362 " MODIFY workingpath varchar(255) CHARACTER SET utf8 NOT NULL default ''," 00363 " MODIFY rompath varchar(255) CHARACTER SET utf8 NOT NULL default ''," 00364 " MODIFY screenshots varchar(255) CHARACTER SET utf8 NOT NULL default ''," 00365 " MODIFY commandline text CHARACTER SET utf8 NOT NULL," 00366 " MODIFY gametype varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00367 " MODIFY extensions varchar(128) CHARACTER SET utf8 NOT NULL default '';", 00368 "ALTER TABLE romdb" 00369 " DEFAULT CHARACTER SET default," 00370 " MODIFY crc varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00371 " MODIFY name varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00372 " MODIFY description varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00373 " MODIFY category varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00374 " MODIFY year varchar(10) CHARACTER SET utf8 NOT NULL default ''," 00375 " MODIFY manufacturer varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00376 " MODIFY country varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00377 " MODIFY publisher varchar(128) CHARACTER SET utf8 NOT NULL default ''," 00378 " MODIFY platform varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00379 " MODIFY flags varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00380 " MODIFY version varchar(64) CHARACTER SET utf8 NOT NULL default ''," 00381 " MODIFY binfile varchar(64) CHARACTER SET utf8 NOT NULL default '';", 00382 "" 00383 }; 00384 00385 if (!performActualUpdate(updates, "1014", dbver)) 00386 return false; 00387 } 00388 00389 if (dbver == "1014") 00390 { 00391 const QString updates[] = { 00392 00393 "ALTER TABLE gamemetadata ADD fanart VARCHAR(255) NOT NULL AFTER rompath," 00394 "ADD boxart VARCHAR( 255 ) NOT NULL AFTER fanart;", 00395 "" 00396 }; 00397 00398 if (!performActualUpdate(updates, "1015", dbver)) 00399 return false; 00400 } 00401 00402 if (dbver == "1015") 00403 { 00404 const QString updates[] = { 00405 00406 "ALTER TABLE gamemetadata ADD screenshot VARCHAR(255) NOT NULL AFTER rompath," 00407 "ADD plot TEXT NOT NULL AFTER fanart;", 00408 "" 00409 }; 00410 00411 if (!performActualUpdate(updates, "1016", dbver)) 00412 return false; 00413 } 00414 00415 if (dbver == "1016") 00416 { 00417 const QString updates[] = { 00418 00419 "ALTER TABLE gamemetadata ADD inetref TEXT AFTER crc_value;", 00420 "" 00421 }; 00422 00423 if (!performActualUpdate(updates, "1017", dbver)) 00424 return false; 00425 } 00426 00427 if (dbver == "1017") 00428 { 00429 const QString updates[] = { 00430 00431 "ALTER TABLE gamemetadata ADD intid int(11) NOT NULL AUTO_INCREMENT " 00432 "PRIMARY KEY FIRST;", 00433 "" 00434 }; 00435 00436 if (!performActualUpdate(updates, "1018", dbver)) 00437 return false; 00438 } 00439 00440 return true; 00441 }
1.7.6.1