Skip to content

Commit 61c3aa1

Browse files
committed
Prevent users from creating tables using the performance_schema storage engine.
1 parent dbc3198 commit 61c3aa1

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

Source/SPDatabaseData.m

+7-4
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,10 @@ - (NSArray *)getDatabaseStorageEngines
276276
// Check if InnoDB support is enabled
277277
NSString *result = [self _getSingleVariableValue:@"have_innodb"];
278278

279-
if(result && [result isEqualToString:@"YES"])
279+
if (result && [result isEqualToString:@"YES"])
280+
{
280281
[storageEngines addObject:@{@"Engine" : @"InnoDB"}];
282+
}
281283

282284
// Before MySQL 4.1 the MEMORY engine was known as HEAP and the ISAM engine was included
283285
if ([serverSupport supportsPre41StorageEngines]) {
@@ -314,7 +316,7 @@ - (NSArray *)getDatabaseStorageEngines
314316

315317
// Table is accessible so get available storage engines
316318
// Note, that the case of the column names specified in this query are important.
317-
[storageEngines addObjectsFromArray:[self _getDatabaseDataForQuery:@"SELECT Engine, Support FROM `information_schema`.`engines` WHERE SUPPORT IN ('DEFAULT', 'YES')"]];
319+
[storageEngines addObjectsFromArray:[self _getDatabaseDataForQuery:@"SELECT Engine, Support FROM `information_schema`.`engines` WHERE SUPPORT IN ('DEFAULT', 'YES') AND Engine != 'PERFORMANCE_SCHEMA'"]];
318320
}
319321
}
320322
else {
@@ -324,8 +326,9 @@ - (NSArray *)getDatabaseStorageEngines
324326
// We only want to include engines that are supported
325327
for (NSDictionary *engine in engines)
326328
{
327-
if (([[engine objectForKey:@"Support"] isEqualToString:@"DEFAULT"]) ||
328-
([[engine objectForKey:@"Support"] isEqualToString:@"YES"]))
329+
if (([[engine objectForKey:@"Support"] isEqualToString:@"DEFAULT"] ||
330+
[[engine objectForKey:@"Support"] isEqualToString:@"YES"]) &&
331+
![[engine objectForKey:@"Engine"] isEqualToString:@"PERFORMANCE_SCHEMA"])
329332
{
330333
[storageEngines addObject:engine];
331334
}

Source/SPExtendedTableInfo.m

+10-2
Original file line numberDiff line numberDiff line change
@@ -335,16 +335,24 @@ - (void)loadTable:(NSString *)table
335335
NSArray *encodings = [databaseDataInstance getDatabaseCharacterSetEncodings];
336336
NSArray *collations = [databaseDataInstance getDatabaseCollationsForEncoding:[tableDataInstance tableEncoding]];
337337

338-
if (([engines count] > 0) && ([statusFields objectForKey:SPMySQLEngineField])) {
338+
NSString *storageEngine = [statusFields objectForKey:SPMySQLEngineField];
339+
340+
if ([engines count] > 0 && storageEngine) {
339341

340342
// Populate type popup button
341343
for (NSDictionary *engine in engines)
342344
{
343345
[tableTypePopUpButton addItemWithTitle:[engine objectForKey:SPMySQLEngineField]];
344346
}
345347

346-
[tableTypePopUpButton selectItemWithTitle:[statusFields objectForKey:SPMySQLEngineField]];
348+
[tableTypePopUpButton selectItemWithTitle:storageEngine];
347349
[tableTypePopUpButton setEnabled:enableInteraction];
350+
351+
// Object has a non-user storage engine (i.e. performance_schema) so just add it
352+
if ([tableTypePopUpButton indexOfSelectedItem] == -1) {
353+
[tableTypePopUpButton addItemWithTitle:storageEngine];
354+
[tableTypePopUpButton selectItemWithTitle:storageEngine];
355+
}
348356
}
349357
else {
350358
[tableTypePopUpButton addItemWithTitle:NSLocalizedString(@"Not available", @"not available label")];

0 commit comments

Comments
 (0)