|
MythTV
0.26-pre
|
00001 #include <iostream> 00002 using namespace std; 00003 00004 // Qt 00005 #include <QString> 00006 #include <QSqlError> 00007 00008 // MythTV 00009 #include <mythcontext.h> 00010 #include <mythdb.h> 00011 00012 // mytharchive 00013 #include "dbcheck.h" 00014 00015 const QString currentDatabaseVersion = "1005"; 00016 00017 static bool UpdateDBVersionNumber(const QString &newnumber) 00018 { 00019 00020 if (!gCoreContext->SaveSettingOnHost("ArchiveDBSchemaVer",newnumber,NULL)) 00021 { 00022 LOG(VB_GENERAL, LOG_ERR, 00023 QString("DB Error (Setting new DB version number): %1\n") 00024 .arg(newnumber)); 00025 00026 return false; 00027 } 00028 00029 return true; 00030 } 00031 00032 static bool performActualUpdate(const QString updates[], QString version, 00033 QString &dbver) 00034 { 00035 MSqlQuery query(MSqlQuery::InitCon()); 00036 00037 LOG(VB_GENERAL, LOG_NOTICE, 00038 "Upgrading to MythArchive schema version " + version); 00039 00040 int counter = 0; 00041 QString thequery = updates[counter]; 00042 00043 while (thequery != "") 00044 { 00045 if (!query.exec(thequery)) 00046 { 00047 QString msg = 00048 QString("DB Error (Performing database upgrade): \n" 00049 "Query was: %1 \nError was: %2 \nnew version: %3") 00050 .arg(thequery) 00051 .arg(MythDB::DBErrorMessage(query.lastError())) 00052 .arg(version); 00053 LOG(VB_GENERAL, LOG_ERR, msg); 00054 return false; 00055 } 00056 00057 counter++; 00058 thequery = updates[counter]; 00059 } 00060 00061 if (!UpdateDBVersionNumber(version)) 00062 return false; 00063 00064 dbver = version; 00065 return true; 00066 } 00067 00068 bool UpgradeArchiveDatabaseSchema(void) 00069 { 00070 QString dbver = gCoreContext->GetSetting("ArchiveDBSchemaVer"); 00071 00072 if (dbver == currentDatabaseVersion) 00073 return true; 00074 00075 if (dbver == "") 00076 { 00077 LOG(VB_GENERAL, LOG_INFO, 00078 "Inserting MythArchive initial database information."); 00079 00080 const QString updates[] = 00081 { 00082 "DROP TABLE IF EXISTS archiveitems;", 00083 00084 "CREATE TABLE IF NOT EXISTS archiveitems (" 00085 " intid INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY," 00086 " type set ('Recording','Video','File')," 00087 " title VARCHAR(128)," 00088 " subtitle VARCHAR(128)," 00089 " description TEXT," 00090 " startdate VARCHAR(30)," 00091 " starttime VARCHAR(30)," 00092 " size INT UNSIGNED NOT NULL," 00093 " filename TEXT NOT NULL," 00094 " hascutlist BOOL NOT NULL DEFAULT 0," 00095 " cutlist TEXT," 00096 " INDEX (title)" 00097 ");", 00098 "" 00099 }; 00100 if (!performActualUpdate(updates, "1000", dbver)) 00101 return false; 00102 } 00103 00104 if (dbver == "1000") 00105 { 00106 const QString updates[] = 00107 { 00108 "ALTER TABLE archiveitems MODIFY size BIGINT UNSIGNED NOT NULL;", 00109 "" 00110 }; 00111 00112 if (!performActualUpdate(updates, "1001", dbver)) 00113 return false; 00114 } 00115 00116 00117 if (dbver == "1001") 00118 { 00119 const QString updates[] = 00120 { 00121 QString("ALTER DATABASE %1 DEFAULT CHARACTER SET latin1;") 00122 .arg(gContext->GetDatabaseParams().dbName), 00123 "ALTER TABLE archiveitems" 00124 " MODIFY title varbinary(128) default NULL," 00125 " MODIFY subtitle varbinary(128) default NULL," 00126 " MODIFY description blob," 00127 " MODIFY startdate varbinary(30) default NULL," 00128 " MODIFY starttime varbinary(30) default NULL," 00129 " MODIFY filename blob," 00130 " MODIFY cutlist blob;", 00131 "" 00132 }; 00133 00134 if (!performActualUpdate(updates, "1002", dbver)) 00135 return false; 00136 } 00137 00138 00139 if (dbver == "1002") 00140 { 00141 const QString updates[] = 00142 { 00143 QString("ALTER DATABASE %1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;") 00144 .arg(gContext->GetDatabaseParams().dbName), 00145 "ALTER TABLE archiveitems" 00146 " DEFAULT CHARACTER SET default," 00147 " MODIFY title varchar(128) CHARACTER SET utf8 default NULL," 00148 " MODIFY subtitle varchar(128) CHARACTER SET utf8 default NULL," 00149 " MODIFY description text CHARACTER SET utf8," 00150 " MODIFY startdate varchar(30) CHARACTER SET utf8 default NULL," 00151 " MODIFY starttime varchar(30) CHARACTER SET utf8 default NULL," 00152 " MODIFY filename text CHARACTER SET utf8 NOT NULL," 00153 " MODIFY cutlist text CHARACTER SET utf8;", 00154 "" 00155 }; 00156 00157 if (!performActualUpdate(updates, "1003", dbver)) 00158 return false; 00159 } 00160 00161 if (dbver == "1003") 00162 { 00163 const QString updates[] = 00164 { 00165 "ALTER TABLE `archiveitems` " 00166 "ADD duration INT UNSIGNED NOT NULL DEFAULT 0, " 00167 "ADD cutduration INT UNSIGNED NOT NULL DEFAULT 0, " 00168 "ADD videowidth INT UNSIGNED NOT NULL DEFAULT 0, " 00169 "ADD videoheight INT UNSIGNED NOT NULL DEFAULT 0, " 00170 "ADD filecodec VARCHAR(50) NOT NULL DEFAULT '', " 00171 "ADD videocodec VARCHAR(50) NOT NULL DEFAULT '', " 00172 "ADD encoderprofile VARCHAR(50) NOT NULL DEFAULT 'NONE';", 00173 "" 00174 }; 00175 00176 if (!performActualUpdate(updates, "1004", dbver)) 00177 return false; 00178 } 00179 00180 if (dbver == "1004") 00181 { 00182 const QString updates[] = 00183 { 00184 "DELETE FROM keybindings " 00185 " WHERE action = 'DELETEITEM' AND context = 'Archive';", 00186 "" 00187 }; 00188 00189 if (!performActualUpdate(updates, "1005", dbver)) 00190 return false; 00191 } 00192 00193 return true; 00194 } 00195
1.7.6.1