aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h
diff options
context:
space:
mode:
Diffstat (limited to 'Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h')
-rw-r--r--Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h181
1 files changed, 181 insertions, 0 deletions
diff --git a/Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h b/Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h
new file mode 100644
index 00000000..8f3b7f9f
--- /dev/null
+++ b/Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h
@@ -0,0 +1,181 @@
+//
+// $Id$
+//
+// SPMySQLConnection.h
+// SPMySQLFramework
+//
+// Created by Rowan Beentje (rowan.beent.je) on January 8, 2012
+// Copyright (c) 2012 Rowan Beentje. All rights reserved.
+//
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+// More info at <http://code.google.com/p/sequel-pro/>
+
+@class SPMySQLKeepAliveTimer;
+
+@interface SPMySQLConnection : NSObject {
+
+ // Delegate
+ NSObject <SPMySQLConnectionDelegate> *delegate;
+ BOOL delegateSupportsWillQueryString;
+ BOOL delegateSupportsConnectionLost;
+ BOOL delegateQueryLogging; // Defaults to YES if protocol implemented
+
+ // Basic connection details
+ NSString *host;
+ NSString *username;
+ NSString *password;
+ NSUInteger port;
+ BOOL useSocket;
+ NSString *socketPath;
+
+ // SSL connection details
+ BOOL useSSL;
+ NSString *sslKeyFilePath;
+ NSString *sslCertificatePath;
+ NSString *sslCACertificatePath;
+
+ // MySQL connection details and state
+ struct st_mysql *mySQLConnection;
+ SPMySQLConnectionState state;
+ BOOL connectedWithSSL;
+ BOOL userTriggeredDisconnect;
+ BOOL isReconnecting;
+ uint64_t initialConnectTime;
+ unsigned long mysqlConnectionThreadId;
+
+ // Connection proxy
+ NSObject <SPMySQLConnectionProxy> *proxy;
+ SPMySQLConnectionProxyState previousProxyState;
+ BOOL proxyStateChangeNotificationsIgnored;
+
+ // Connection lock to prevent non-thread-safe query misuse
+ NSConditionLock *connectionLock;
+
+ // Currently selected database
+ NSString *database;
+
+ // Delegate connection lost decisions
+ NSUInteger reconnectionRetryAttempts;
+ SPMySQLConnectionLostDecision lastDelegateDecisionForLostConnection;
+ NSLock *delegateDecisionLock;
+
+ // Timeout and keep-alive
+ NSUInteger timeout;
+ BOOL useKeepAlive;
+ SPMySQLKeepAliveTimer *keepAliveTimer;
+ CGFloat keepAliveInterval;
+ uint64_t lastKeepAliveTime;
+ NSUInteger keepAlivePingFailures;
+ pthread_t keepAlivePingThread;
+ BOOL keepAlivePingThreadActive;
+ BOOL keepAliveLastPingSuccess;
+ BOOL keepAliveLastPingBlocked;
+
+ // Encoding details - and also a record of any previous encoding to allow
+ // switching back and forth
+ NSString *encoding;
+ NSStringEncoding stringEncoding;
+ BOOL encodingUsesLatin1Transport;
+ NSString *previousEncoding;
+ BOOL previousEncodingUsesLatin1Transport;
+
+ // Server details
+ NSString *serverVersionString;
+
+ // Error state for the last query or connection state
+ NSUInteger queryErrorID;
+ NSString *queryErrorMessage;
+
+ // Query details
+ unsigned long long lastQueryAffectedRowCount;
+ unsigned long long lastQueryInsertID;
+
+ // Query cancellation details
+ BOOL lastQueryWasCancelled;
+ BOOL lastQueryWasCancelledUsingReconnect;
+
+ // Timing details
+ uint64_t lastConnectionUsedTime;
+ double lastQueryExecutionTime;
+
+ // Maximum query size
+ NSUInteger maxQuerySize;
+ BOOL maxQuerySizeIsEditable;
+ BOOL maxQuerySizeEditabilityChecked;
+ NSUInteger queryActionShouldRestoreMaxQuerySize;
+
+ // Queries
+ BOOL retryQueriesOnConnectionFailure;
+}
+
+#pragma mark -
+#pragma mark Synthesized properties
+
+@property (readwrite, assign, nonatomic) NSObject <SPMySQLConnectionDelegate> *delegate;
+@property (readwrite, assign, nonatomic) NSObject <SPMySQLConnectionProxy> *proxy;
+
+@property (readwrite, retain) NSString *host;
+@property (readwrite, retain) NSString *username;
+@property (readwrite, retain) NSString *password;
+@property (readwrite, assign) NSUInteger port;
+@property (readwrite, assign) BOOL useSocket;
+@property (readwrite, retain) NSString *socketPath;
+
+@property (readwrite, assign) BOOL useSSL;
+@property (readwrite, retain) NSString *sslKeyFilePath;
+@property (readwrite, retain) NSString *sslCertificatePath;
+@property (readwrite, retain) NSString *sslCACertificatePath;
+
+@property (readwrite, assign) NSUInteger timeout;
+@property (readwrite, assign) BOOL useKeepAlive;
+@property (readwrite, assign) CGFloat keepAliveInterval;
+
+@property (readonly) unsigned long mysqlConnectionThreadId;
+@property (readwrite, assign) BOOL retryQueriesOnConnectionFailure;
+
+@property (readwrite, assign) BOOL delegateQueryLogging;
+
+@property (readwrite, assign) BOOL lastQueryWasCancelled;
+
+#pragma mark -
+#pragma mark Connection and disconnection
+
+- (BOOL)connect;
+- (BOOL)reconnect;
+- (void)disconnect;
+
+#pragma mark -
+#pragma mark Connection state
+
+- (BOOL)isConnected;
+- (BOOL)isConnectedViaSSL;
+- (BOOL)checkConnection;
+- (double)timeConnected;
+- (BOOL)userTriggeredDisconnect;
+
+#pragma mark -
+#pragma mark Connection utility
+
++ (NSString *)findSocketPath;
+
+@end