Skip to content

Commit c7b5e88

Browse files
committed
Added fallback code for server version identification.
Good news: Sequel Pro can now connect to sphinxql server. Bad news: It will treat it like a MySQL 2 server (or whatever version of Sphinx is running)
1 parent 5befad8 commit c7b5e88

File tree

5 files changed

+33
-21
lines changed

5 files changed

+33
-21
lines changed

Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Max Packet Size.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ - (void)_updateMaxQuerySize
108108

109109
// Make a standard query to the server to retrieve the information
110110
SPMySQLResult *result = [self queryString:packetQueryString];
111+
if(!result) { // query fails on sphinxql
112+
NSLog(@"Query for max_allowed_packet failed: %@ (%lu) (on %@)", [self lastErrorMessage], [self lastErrorID], [self serverVersionString]);
113+
return;
114+
}
111115
[result setReturnDataAsStrings:YES];
112116

113117
// Get the maximum size string

Frameworks/SPMySQLFramework/Source/SPMySQLConnection Categories/Server Info.m

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,15 @@ @implementation SPMySQLConnection (Server_Info)
4242
*/
4343
- (NSString *)serverVersionString
4444
{
45-
if (serverVersionString) {
46-
return [NSString stringWithString:serverVersionString];
45+
if (serverVariableVersion) {
46+
return [NSString stringWithString:serverVariableVersion];
4747
}
4848

49+
#warning FIXME: There is probably a race condition here with -[self _disconnect]
50+
if(mySQLConnection) {
51+
return [self _stringForCString:mysql_get_server_info(mySQLConnection)];
52+
}
53+
4954
return nil;
5055
}
5156

@@ -54,9 +59,9 @@ - (NSString *)serverVersionString
5459
*/
5560
- (NSUInteger)serverMajorVersion
5661
{
57-
58-
if (serverVersionString != nil) {
59-
NSString *s = [[serverVersionString componentsSeparatedByString:@"."] objectAtIndex:0];
62+
NSString *ver;
63+
if ((ver = [self serverVersionString]) != nil) {
64+
NSString *s = [[ver componentsSeparatedByString:@"."] objectAtIndex:0];
6065
return (NSUInteger)[s integerValue];
6166
}
6267

@@ -68,8 +73,9 @@ - (NSUInteger)serverMajorVersion
6873
*/
6974
- (NSUInteger)serverMinorVersion
7075
{
71-
if (serverVersionString != nil) {
72-
NSString *s = [[serverVersionString componentsSeparatedByString:@"."] objectAtIndex:1];
76+
NSString *ver;
77+
if ((ver = [self serverVersionString]) != nil) {
78+
NSString *s = [[ver componentsSeparatedByString:@"."] objectAtIndex:1];
7379
return (NSUInteger)[s integerValue];
7480
}
7581

@@ -81,8 +87,9 @@ - (NSUInteger)serverMinorVersion
8187
*/
8288
- (NSUInteger)serverReleaseVersion
8389
{
84-
if (serverVersionString != nil) {
85-
NSString *s = [[serverVersionString componentsSeparatedByString:@"."] objectAtIndex:2];
90+
NSString *ver;
91+
if ((ver = [self serverVersionString]) != nil) {
92+
NSString *s = [[ver componentsSeparatedByString:@"."] objectAtIndex:2];
8693
return (NSUInteger)[[[s componentsSeparatedByString:@"-"] objectAtIndex:0] integerValue];
8794
}
8895

@@ -98,9 +105,10 @@ - (NSUInteger)serverReleaseVersion
98105
*/
99106
- (BOOL)serverVersionIsGreaterThanOrEqualTo:(NSUInteger)aMajorVersion minorVersion:(NSUInteger)aMinorVersion releaseVersion:(NSUInteger)aReleaseVersion
100107
{
101-
if (!serverVersionString) return NO;
108+
NSString *ver;
109+
if (!(ver = [self serverVersionString])) return NO;
102110

103-
NSArray *serverVersionParts = [serverVersionString componentsSeparatedByString:@"."];
111+
NSArray *serverVersionParts = [ver componentsSeparatedByString:@"."];
104112

105113
NSUInteger serverMajorVersion = (NSUInteger)[[serverVersionParts objectAtIndex:0] integerValue];
106114
if (serverMajorVersion < aMajorVersion) return NO;

Frameworks/SPMySQLFramework/Source/SPMySQLConnection.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
BOOL previousEncodingUsesLatin1Transport;
101101

102102
// Server details
103-
NSString *serverVersionString;
103+
NSString *serverVariableVersion;
104104

105105
// Error state for the last query or connection state
106106
NSUInteger queryErrorID;

Frameworks/SPMySQLFramework/Source/SPMySQLConnection.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ - (id)init
175175
[connectionLock setName:@"SPMySQLConnection query lock"];
176176

177177
// Ensure the server detail records are initialised
178-
serverVersionString = nil;
178+
serverVariableVersion = nil;
179179

180180
// Start with a blank error state
181181
queryErrorID = 0;
@@ -249,7 +249,7 @@ - (void) dealloc
249249

250250
if (database) [database release], database = nil;
251251
if (databaseToRestore) [databaseToRestore release], databaseToRestore = nil;
252-
if (serverVersionString) [serverVersionString release], serverVersionString = nil;
252+
if (serverVariableVersion) [serverVariableVersion release], serverVariableVersion = nil;
253253
if (queryErrorMessage) [queryErrorMessage release], queryErrorMessage = nil;
254254
if (querySqlstate) [querySqlstate release], querySqlstate = nil;
255255
[delegateDecisionLock release];
@@ -911,7 +911,7 @@ - (void)_disconnect
911911
}
912912

913913
// Clear host-specific information
914-
if (serverVersionString) [serverVersionString release], serverVersionString = nil;
914+
if (serverVariableVersion) [serverVariableVersion release], serverVariableVersion = nil;
915915
if (database) [database release], database = nil;
916916

917917
state = SPMySQLDisconnected;
@@ -940,8 +940,8 @@ - (void)_updateConnectionVariables
940940
}
941941

942942
// Copy the server version string to the instance variable
943-
if (serverVersionString) [serverVersionString release], serverVersionString = nil;
944-
serverVersionString = [[variables objectForKey:@"version"] retain];
943+
if (serverVariableVersion) [serverVariableVersion release], serverVariableVersion = nil;
944+
serverVariableVersion = [[variables objectForKey:@"version"] retain];
945945

946946
// Get the connection encoding. Although a specific encoding may have been requested on
947947
// connection, it may be overridden by init_connect commands or connection state changes.

Source/SPServerSupport.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ @implementation SPServerSupport
9595
- (id)initWithMajorVersion:(NSInteger)majorVersion minor:(NSInteger)minorVersion release:(NSInteger)releaseVersion
9696
{
9797
if ((self = [super init])) {
98-
99-
serverMajorVersion = majorVersion;
100-
serverMinorVersion = minorVersion;
101-
serverReleaseVersion = releaseVersion;
98+
// Might be NSNotFound if unknown. unknown should also lose against "0".
99+
serverMajorVersion = (majorVersion != NSNotFound)? majorVersion : -1;
100+
serverMinorVersion = (minorVersion != NSNotFound)? minorVersion : -1;
101+
serverReleaseVersion = (releaseVersion != NSNotFound)? releaseVersion : -1;
102102

103103
// Determine what the server supports
104104
[self evaluate];

0 commit comments

Comments
 (0)