MythTV
master
mythplugins
mythgame
mythgame
gamedbcheck.cpp
Go to the documentation of this file.
1
// C++
2
#include <iostream>
3
4
// Qt
5
#include <QString>
6
#include <QSqlError>
7
8
// MythTV
9
#include <
libmythbase/mythcorecontext.h
>
10
#include <
libmythbase/mythdb.h
>
11
#include <
libmythbase/mythdbcheck.h
>
12
#include <
libmythbase/mythlogging.h
>
13
14
// MythGame
15
#include "
gamedbcheck.h
"
16
#include "
gamesettings.h
"
17
18
const
QString
currentDatabaseVersion
=
"1020"
;
19
const
QString
MythGameVersionName
=
"GameDBSchemaVer"
;
20
21
static
bool
InitializeDatabase
(
void
)
22
{
23
LOG
(VB_GENERAL, LOG_NOTICE,
24
"Inserting MythGame initial database information."
);
25
26
DBUpdates
updates {
27
"CREATE TABLE gamemetadata ("
28
" `system` varchar(128) NOT NULL default '',"
29
" romname varchar(128) NOT NULL default '',"
30
" gamename varchar(128) NOT NULL default '',"
31
" genre varchar(128) NOT NULL default '',"
32
" year varchar(10) NOT NULL default '',"
33
" publisher varchar(128) NOT NULL default '',"
34
" favorite tinyint(1) default NULL,"
35
" rompath varchar(255) NOT NULL default '',"
36
" gametype varchar(64) NOT NULL default '',"
37
" diskcount tinyint(1) NOT NULL default '1',"
38
" country varchar(128) NOT NULL default '',"
39
" crc_value varchar(64) NOT NULL default '',"
40
" display tinyint(1) NOT NULL default '1',"
41
" version varchar(64) NOT NULL default '',"
42
" KEY `system` (`system`),"
43
" KEY year (year),"
44
" KEY romname (romname),"
45
" KEY gamename (gamename),"
46
" KEY genre (genre)"
47
");"
,
48
"CREATE TABLE gameplayers ("
49
" gameplayerid int(10) unsigned NOT NULL auto_increment,"
50
" playername varchar(64) NOT NULL default '',"
51
" workingpath varchar(255) NOT NULL default '',"
52
" rompath varchar(255) NOT NULL default '',"
53
" screenshots varchar(255) NOT NULL default '',"
54
" commandline text NOT NULL,"
55
" gametype varchar(64) NOT NULL default '',"
56
" extensions varchar(128) NOT NULL default '',"
57
" spandisks tinyint(1) NOT NULL default '0',"
58
" PRIMARY KEY (gameplayerid),"
59
" UNIQUE KEY playername (playername)"
60
");"
,
61
"CREATE TABLE romdb ("
62
" crc varchar(64) NOT NULL default '',"
63
" name varchar(128) NOT NULL default '',"
64
" description varchar(128) NOT NULL default '',"
65
" category varchar(128) NOT NULL default '',"
66
" year varchar(10) NOT NULL default '',"
67
" manufacturer varchar(128) NOT NULL default '',"
68
" country varchar(128) NOT NULL default '',"
69
" publisher varchar(128) NOT NULL default '',"
70
" platform varchar(64) NOT NULL default '',"
71
" filesize int(12) default NULL,"
72
" flags varchar(64) NOT NULL default '',"
73
" version varchar(64) NOT NULL default '',"
74
" KEY crc (crc),"
75
" KEY year (year),"
76
" KEY category (category),"
77
" KEY name (name),"
78
" KEY description (description),"
79
" KEY platform (platform)"
80
");"
81
};
82
QString dbver =
""
;
83
return
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
84
updates,
"1011"
, dbver);
85
}
86
87
bool
UpgradeGameDatabaseSchema
(
void
)
88
{
89
QString dbver =
gCoreContext
->
GetSetting
(
"GameDBSchemaVer"
);
90
MSqlQuery
query(
MSqlQuery::InitCon
());
91
92
if
(dbver ==
currentDatabaseVersion
)
93
return
true
;
94
95
if
(dbver.isEmpty())
96
{
97
if
(!
InitializeDatabase
())
98
return
false
;
99
dbver =
"1011"
;
100
}
101
102
if
(dbver ==
"1000"
)
103
{
104
DBUpdates
updates {
105
"ALTER TABLE gamemetadata ADD COLUMN favorite BOOL NULL;"
106
};
107
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
108
updates,
"1001"
, dbver))
109
return
false
;
110
}
111
112
if
((((dbver ==
"1004"
)
113
|| (dbver ==
"1003"
))
114
|| (dbver ==
"1002"
))
115
|| (dbver ==
"1001"
))
116
{
117
DBUpdates
updates {
118
119
"CREATE TABLE gameplayers ("
120
" gameplayerid int(10) unsigned NOT NULL auto_increment,"
121
" playername varchar(64) NOT NULL default '',"
122
" workingpath varchar(255) NOT NULL default '',"
123
" rompath varchar(255) NOT NULL default '',"
124
" screenshots varchar(255) NOT NULL default '',"
125
" commandline varchar(255) NOT NULL default '',"
126
" gametype varchar(64) NOT NULL default '',"
127
" extensions varchar(128) NOT NULL default '',"
128
" PRIMARY KEY (gameplayerid),"
129
" UNIQUE KEY playername (playername)"
130
");"
,
131
"ALTER TABLE gamemetadata ADD COLUMN rompath varchar(255) NOT NULL default ''; "
,
132
"ALTER TABLE gamemetadata ADD COLUMN gametype varchar(64) NOT NULL default ''; "
133
};
134
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
135
updates,
"1005"
, dbver))
136
return
false
;
137
}
138
139
if
(dbver ==
"1005"
)
140
{
141
DBUpdates
updates {
142
"ALTER TABLE gameplayers ADD COLUMN spandisks tinyint(1) NOT NULL default 0; "
,
143
"ALTER TABLE gamemetadata ADD COLUMN diskcount tinyint(1) NOT NULL default 1; "
144
};
145
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
146
updates,
"1006"
, dbver))
147
return
false
;
148
}
149
150
if
(dbver ==
"1006"
)
151
{
152
153
if
(!
gCoreContext
->
GetSetting
(
"GameAllTreeLevels"
).isEmpty())
154
{
155
if
(!query.
exec
(
"UPDATE settings SET data = 'system gamename' "
156
"WHERE value = 'GameAllTreeLevels'; "
))
157
MythDB::DBError
(
"update GameAllTreeLevels"
, query);
158
}
159
160
DBUpdates
updates = {
161
"ALTER TABLE gamemetadata ADD COLUMN country varchar(128) NOT NULL default ''; "
,
162
"ALTER TABLE gamemetadata ADD COLUMN crc_value varchar(64) NOT NULL default ''; "
,
163
"ALTER TABLE gamemetadata ADD COLUMN display tinyint(1) NOT NULL default 1; "
164
};
165
166
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
167
updates,
"1007"
, dbver))
168
return
false
;
169
}
170
171
if
(dbver ==
"1007"
)
172
{
173
DBUpdates
updates {
174
"ALTER TABLE gameplayers MODIFY commandline TEXT NOT NULL default ''; "
175
};
176
177
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
178
updates,
"1008"
, dbver))
179
return
false
;
180
}
181
182
if
(dbver ==
"1008"
)
183
{
184
DBUpdates
updates {
185
"CREATE TABLE romdb ("
186
" crc varchar(64) NOT NULL default '',"
187
" name varchar(128) NOT NULL default '',"
188
" description varchar(128) NOT NULL default '',"
189
" category varchar(128) NOT NULL default '',"
190
" year varchar(10) NOT NULL default '',"
191
" manufacturer varchar(128) NOT NULL default '',"
192
" country varchar(128) NOT NULL default '',"
193
" publisher varchar(128) NOT NULL default '',"
194
" platform varchar(64) NOT NULL default '',"
195
" filesize int(12) default NULL,"
196
" flags varchar(64) NOT NULL default '',"
197
" version varchar(64) NOT NULL default '',"
198
" KEY crc (crc),"
199
" KEY year (year),"
200
" KEY category (category),"
201
" KEY name (name),"
202
" KEY description (description),"
203
" KEY platform (platform)"
204
");"
205
};
206
207
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
208
updates,
"1009"
, dbver))
209
return
false
;
210
}
211
212
if
(dbver ==
"1009"
)
213
{
214
DBUpdates
updates {
215
"ALTER TABLE gamemetadata MODIFY year varchar(10) not null default '';"
216
};
217
218
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
219
updates,
"1010"
, dbver))
220
return
false
;
221
}
222
223
if
(dbver ==
"1010"
)
224
{
225
DBUpdates
updates {
226
227
"ALTER TABLE gamemetadata ADD COLUMN version varchar(64) NOT NULL default '';"
,
228
"ALTER TABLE gamemetadata ADD COLUMN publisher varchar(128) NOT NULL default '';"
229
};
230
231
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
232
updates,
"1011"
, dbver))
233
return
false
;
234
}
235
236
237
if
(dbver ==
"1011"
)
238
{
239
DBUpdates
updates {
240
"ALTER TABLE romdb ADD COLUMN binfile varchar(64) NOT NULL default ''; "
241
};
242
243
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
244
updates,
"1012"
, dbver))
245
return
false
;
246
}
247
248
249
if
(dbver ==
"1012"
)
250
{
251
DBUpdates
updates {
252
qPrintable(QString(
"ALTER DATABASE %1 DEFAULT CHARACTER SET latin1;"
)
253
.arg(
GetMythDB
()->GetDatabaseName())),
254
"ALTER TABLE gamemetadata"
255
" MODIFY `system` varbinary(128) NOT NULL default '',"
256
" MODIFY romname varbinary(128) NOT NULL default '',"
257
" MODIFY gamename varbinary(128) NOT NULL default '',"
258
" MODIFY genre varbinary(128) NOT NULL default '',"
259
" MODIFY year varbinary(10) NOT NULL default '',"
260
" MODIFY publisher varbinary(128) NOT NULL default '',"
261
" MODIFY rompath varbinary(255) NOT NULL default '',"
262
" MODIFY gametype varbinary(64) NOT NULL default '',"
263
" MODIFY country varbinary(128) NOT NULL default '',"
264
" MODIFY crc_value varbinary(64) NOT NULL default '',"
265
" MODIFY version varbinary(64) NOT NULL default '';"
,
266
"ALTER TABLE gameplayers"
267
" MODIFY playername varbinary(64) NOT NULL default '',"
268
" MODIFY workingpath varbinary(255) NOT NULL default '',"
269
" MODIFY rompath varbinary(255) NOT NULL default '',"
270
" MODIFY screenshots varbinary(255) NOT NULL default '',"
271
" MODIFY commandline blob NOT NULL,"
272
" MODIFY gametype varbinary(64) NOT NULL default '',"
273
" MODIFY extensions varbinary(128) NOT NULL default '';"
,
274
"ALTER TABLE romdb"
275
" MODIFY crc varbinary(64) NOT NULL default '',"
276
" MODIFY name varbinary(128) NOT NULL default '',"
277
" MODIFY description varbinary(128) NOT NULL default '',"
278
" MODIFY category varbinary(128) NOT NULL default '',"
279
" MODIFY year varbinary(10) NOT NULL default '',"
280
" MODIFY manufacturer varbinary(128) NOT NULL default '',"
281
" MODIFY country varbinary(128) NOT NULL default '',"
282
" MODIFY publisher varbinary(128) NOT NULL default '',"
283
" MODIFY platform varbinary(64) NOT NULL default '',"
284
" MODIFY flags varbinary(64) NOT NULL default '',"
285
" MODIFY version varbinary(64) NOT NULL default '',"
286
" MODIFY binfile varbinary(64) NOT NULL default '';"
287
};
288
289
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
290
updates,
"1013"
, dbver))
291
return
false
;
292
}
293
294
295
if
(dbver ==
"1013"
)
296
{
297
DBUpdates
updates {
298
qPrintable(QString(
"ALTER DATABASE %1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
)
299
.arg(
GetMythDB
()->GetDatabaseName())),
300
"ALTER TABLE gamemetadata"
301
" DEFAULT CHARACTER SET utf8,"
302
" MODIFY `system` varchar(128) CHARACTER SET utf8 NOT NULL default '',"
303
" MODIFY romname varchar(128) CHARACTER SET utf8 NOT NULL default '',"
304
" MODIFY gamename varchar(128) CHARACTER SET utf8 NOT NULL default '',"
305
" MODIFY genre varchar(128) CHARACTER SET utf8 NOT NULL default '',"
306
" MODIFY year varchar(10) CHARACTER SET utf8 NOT NULL default '',"
307
" MODIFY publisher varchar(128) CHARACTER SET utf8 NOT NULL default '',"
308
" MODIFY rompath varchar(255) CHARACTER SET utf8 NOT NULL default '',"
309
" MODIFY gametype varchar(64) CHARACTER SET utf8 NOT NULL default '',"
310
" MODIFY country varchar(128) CHARACTER SET utf8 NOT NULL default '',"
311
" MODIFY crc_value varchar(64) CHARACTER SET utf8 NOT NULL default '',"
312
" MODIFY version varchar(64) CHARACTER SET utf8 NOT NULL default '';"
,
313
"ALTER TABLE gameplayers"
314
" DEFAULT CHARACTER SET utf8,"
315
" MODIFY playername varchar(64) CHARACTER SET utf8 NOT NULL default '',"
316
" MODIFY workingpath varchar(255) CHARACTER SET utf8 NOT NULL default '',"
317
" MODIFY rompath varchar(255) CHARACTER SET utf8 NOT NULL default '',"
318
" MODIFY screenshots varchar(255) CHARACTER SET utf8 NOT NULL default '',"
319
" MODIFY commandline text CHARACTER SET utf8 NOT NULL,"
320
" MODIFY gametype varchar(64) CHARACTER SET utf8 NOT NULL default '',"
321
" MODIFY extensions varchar(128) CHARACTER SET utf8 NOT NULL default '';"
,
322
"ALTER TABLE romdb"
323
" DEFAULT CHARACTER SET utf8,"
324
" MODIFY crc varchar(64) CHARACTER SET utf8 NOT NULL default '',"
325
" MODIFY name varchar(128) CHARACTER SET utf8 NOT NULL default '',"
326
" MODIFY description varchar(128) CHARACTER SET utf8 NOT NULL default '',"
327
" MODIFY category varchar(128) CHARACTER SET utf8 NOT NULL default '',"
328
" MODIFY year varchar(10) CHARACTER SET utf8 NOT NULL default '',"
329
" MODIFY manufacturer varchar(128) CHARACTER SET utf8 NOT NULL default '',"
330
" MODIFY country varchar(128) CHARACTER SET utf8 NOT NULL default '',"
331
" MODIFY publisher varchar(128) CHARACTER SET utf8 NOT NULL default '',"
332
" MODIFY platform varchar(64) CHARACTER SET utf8 NOT NULL default '',"
333
" MODIFY flags varchar(64) CHARACTER SET utf8 NOT NULL default '',"
334
" MODIFY version varchar(64) CHARACTER SET utf8 NOT NULL default '',"
335
" MODIFY binfile varchar(64) CHARACTER SET utf8 NOT NULL default '';"
336
};
337
338
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
339
updates,
"1014"
, dbver))
340
return
false
;
341
}
342
343
if
(dbver ==
"1014"
)
344
{
345
DBUpdates
updates {
346
347
"ALTER TABLE gamemetadata ADD fanart VARCHAR(255) NOT NULL AFTER rompath,"
348
"ADD boxart VARCHAR( 255 ) NOT NULL AFTER fanart;"
349
};
350
351
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
352
updates,
"1015"
, dbver))
353
return
false
;
354
}
355
356
if
(dbver ==
"1015"
)
357
{
358
DBUpdates
updates {
359
360
"ALTER TABLE gamemetadata ADD screenshot VARCHAR(255) NOT NULL AFTER rompath,"
361
"ADD plot TEXT NOT NULL AFTER fanart;"
362
};
363
364
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
365
updates,
"1016"
, dbver))
366
return
false
;
367
}
368
369
if
(dbver ==
"1016"
)
370
{
371
DBUpdates
updates {
372
373
"ALTER TABLE gamemetadata ADD inetref TEXT AFTER crc_value;"
374
};
375
376
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
377
updates,
"1017"
, dbver))
378
return
false
;
379
}
380
381
if
(dbver ==
"1017"
)
382
{
383
DBUpdates
updates {
384
385
"ALTER TABLE gamemetadata ADD intid int(11) NOT NULL AUTO_INCREMENT "
386
"PRIMARY KEY FIRST;"
387
};
388
389
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
390
updates,
"1018"
, dbver))
391
return
false
;
392
}
393
394
if
(dbver ==
"1018"
)
395
{
396
DBUpdates
updates {
397
"ALTER TABLE romdb MODIFY description varchar(192) CHARACTER SET utf8 NOT NULL default '';"
,
398
"ALTER TABLE romdb MODIFY binfile varchar(128) CHARACTER SET utf8 NOT NULL default '';"
,
399
"ALTER TABLE romdb MODIFY filesize int(12) unsigned default NULL;"
400
};
401
402
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
403
updates,
"1019"
, dbver))
404
return
false
;
405
}
406
407
// Repeat 1013 DBs pre MySQL v8 systems that may have not be set to utf8
408
409
if
(dbver ==
"1019"
)
410
{
411
DBUpdates
updates {
412
"ALTER TABLE gamemetadata DEFAULT CHARACTER SET utf8;"
,
413
"ALTER TABLE gameplayers DEFAULT CHARACTER SET utf8;"
,
414
"ALTER TABLE romdb DEFAULT CHARACTER SET utf8;"
415
};
416
417
if
(!
performActualUpdate
(
"MythGame"
,
MythGameVersionName
,
418
updates,
"1020"
, dbver))
419
return
false
;
420
}
421
422
return
true
;
423
424
}
MSqlQuery
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition:
mythdbcon.h:128
MSqlQuery::exec
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition:
mythdbcon.cpp:618
MSqlQuery::InitCon
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition:
mythdbcon.cpp:550
MythCoreContext::GetSetting
QString GetSetting(const QString &key, const QString &defaultval="")
Definition:
mythcorecontext.cpp:905
MythDB::DBError
static void DBError(const QString &where, const MSqlQuery &query)
Definition:
mythdb.cpp:226
performActualUpdate
bool performActualUpdate(const QString &component, const QString &versionkey, const DBUpdates &updates, const QString &version, QString &dbver)
Definition:
dbcheckcommon.cpp:113
currentDatabaseVersion
const QString currentDatabaseVersion
Definition:
gamedbcheck.cpp:18
InitializeDatabase
static bool InitializeDatabase(void)
Definition:
gamedbcheck.cpp:21
MythGameVersionName
const QString MythGameVersionName
Definition:
gamedbcheck.cpp:19
UpgradeGameDatabaseSchema
bool UpgradeGameDatabaseSchema(void)
Definition:
gamedbcheck.cpp:87
gamedbcheck.h
gamesettings.h
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition:
mythcorecontext.cpp:57
mythcorecontext.h
GetMythDB
MythDB * GetMythDB(void)
Definition:
mythdb.cpp:51
mythdb.h
mythdbcheck.h
DBUpdates
std::vector< std::string > DBUpdates
Definition:
mythdbcheck.h:9
mythlogging.h
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition:
mythlogging.h:39
Generated on Tue Oct 28 2025 03:15:53 for MythTV by
1.9.4