// // $Id$ // // SPServerSupport.h // sequel-pro // // Created by Stuart Connolly (stuconnolly.com) on September 23, 2010 // Copyright (c) 2010 Stuart Connolly. All rights reserved. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // More info at /** * @class SPServerSupport SPServerSupport.h * * @author Stuart Connolly http://stuconnolly.com/ * * This class is provided as a convenient method of determining what features/functionality the MySQL server * with the supplied version numbers supports. Note that this class has no direct connection to the server, * all of it's information is simply determined by way of version comparisons using hard coded values of known * versions and the functionality they support. * * Every new MySQL connection that is established should create an instance of this class and make it globally * accessible to the rest of the application to remove the need of manual version comparisons. Calling it's * designated initializer (initWithMajorVersion:major:minor:release:) causes the determination of what * functionality is supported, and so other initializtion is required. * * See the method evaluate for information regarding adding additional functionality checks. */ @interface SPServerSupport : NSObject { // Convenience vars BOOL isMySQL3; BOOL isMySQL4; BOOL isMySQL5; BOOL isMySQL6; // General BOOL supportsInformationSchema; BOOL supportsSpatialExtensions; // Encoding BOOL supportsShowCharacterSet; BOOL supportsCharacterSetDatabaseVar; BOOL supportsPost41CharacterSetHandling; // User account related BOOL supportsCreateUser; BOOL supportsDropUser; BOOL supportsFullDropUser; BOOL supportsUserMaxVars; BOOL supportsShowPrivileges; // Storage engines NSString *engineTypeQueryName; BOOL supportsInformationSchemaEngines; BOOL supportsPre41StorageEngines; BOOL supportsBlackholeStorageEngine; BOOL supportsArchiveStorageEngine; BOOL supportsCSVStorageEngine; // Triggers BOOL supportsTriggers; // Indexes BOOL supportsIndexKeyBlockSize; // Server versions NSInteger serverMajorVersion; NSInteger serverMinorVersion; NSInteger serverReleaseVersion; } /** * @property serverMajorVersion */ @property (readwrite, assign) NSInteger serverMajorVersion; /** * @property serverMinorVersion */ @property (readwrite, assign) NSInteger serverMinorVersion; /** * @property serverReleaseVersion */ @property (readwrite, assign) NSInteger serverReleaseVersion; /** * @property isMySQL3 Indicates if the server is MySQL version 3 */ @property (readonly) BOOL isMySQL3; /** * @property isMySQL4 Indicates if the server is MySQL version 4 */ @property (readonly) BOOL isMySQL4; /** * @property isMySQL5 Indicates if the server is MySQL version 5 */ @property (readonly) BOOL isMySQL5; /** * @property isMySQL6 Indicates if the server is MySQL version 6 */ @property (readonly) BOOL isMySQL6; /** * @property supportsInformationSchema Indicates if the server supports the information_schema database */ @property (readonly) BOOL supportsInformationSchema; /** * @property supportsSpatialExtensions Indicates if the server supports spatial extensions */ @property (readonly) BOOL supportsSpatialExtensions; /** * @property supportsShowCharacterSet Indicates if the server supports the SHOW CHARACTER SET statement */ @property (readonly) BOOL supportsShowCharacterSet; /** * @property supportsCharacterSetDatabaseVar Indicates if the server supports the 'character_set_database' * variable. */ @property (readonly) BOOL supportsCharacterSetDatabaseVar; /** * @property supportsPost41CharacterSetHandling Indicates whether the server supports post 4.1 character set * handling. */ @property (readonly) BOOL supportsPost41CharacterSetHandling; /** * @property supportsCreateUser Indicates if the server supports the CREATE USER statement */ @property (readonly) BOOL supportsCreateUser; /** * @property supportsDropUser Indicates if the server supports the DROP USER statement */ @property (readonly) BOOL supportsDropUser; /** * @property supportsFullDropUser Indicates if the server supports deleting a user's priveleges when issueing * the DROP USER statement. */ @property (readonly) BOOL supportsFullDropUser; /** * @property supportsUserMaxVars Indicates if the server supports setting a user's maximum variables */ @property (readonly) BOOL supportsUserMaxVars; /** * @property supportsShowPrivileges Indicates if the server supports the SHOW PRIVILEGES statement */ @property (readonly) BOOL supportsShowPrivileges; /** * @property engineTypeQueryName Returns the appropriate query part for specifying table engine - ENGINE or TYPE */ @property (readonly) NSString *engineTypeQueryName; /** * @property supportsInformationSchemaEngines Indicates if the server supports the information_schema.engines table */ @property (readonly) BOOL supportsInformationSchemaEngines; /** * @property supportsPre41StorageEngines Indicates if the server supports storage engines available prior * to MySQL 4.1 */ @property (readonly) BOOL supportsPre41StorageEngines; /** * @property supportsBlackholeStorageEngine Indicates if the server supports the BLACKHOLE storage engine */ @property (readonly) BOOL supportsBlackholeStorageEngine; /** * @property supportsArchiveStorageEngine Indicates if the server supports the ARCHIVE storage engine */ @property (readonly) BOOL supportsArchiveStorageEngine; /** * @property supportsCSVStorageEngine Indicates if the server supports the CSV storage engine */ @property (readonly) BOOL supportsCSVStorageEngine; /** * @property supportsTriggers Indicates if the server supports table triggers */ @property (readonly) BOOL supportsTriggers; /** * @property supportsIndexKeyBlockSize Indicates if the server supports specifying an index's key block size */ @property (readonly) BOOL supportsIndexKeyBlockSize; - (id)initWithMajorVersion:(NSInteger)majorVersion minor:(NSInteger)minorVersion release:(NSInteger)releaseVersion; - (void)evaluate; - (BOOL)isEqualToOrGreaterThanMajorVersion:(NSInteger)majorVersion minor:(NSInteger)minorVersion release:(NSInteger)releaseVersion; @end