From f75f70ecc3a72e771bee6e1a73944836d0883c53 Mon Sep 17 00:00:00 2001 From: Bibiko Date: Thu, 11 Jun 2009 18:41:49 +0000 Subject: =?UTF-8?q?=E2=80=A2=20fix=20to=20allow=20insert=20large=20blob=20?= =?UTF-8?q?data=20If=20a=20query=20gave=20the=20error=202006=20(server=20h?= =?UTF-8?q?as=20gone=20away)=20try=20to=20increase=20max=5Fallowed=5Fpacke?= =?UTF-8?q?t=20-=20if=20the=20user=20has=20SUPER=20privileges=20-=20and=20?= =?UTF-8?q?redo=20the=20query.=20If=20max=5Fallowed=5Fpacket=20was=20chang?= =?UTF-8?q?ed=20reset=20it=20to=20default=20after=20executing.=20In=20addi?= =?UTF-8?q?tion=20if=20error=202006=20occurred=20and=20max=5Fallowed=5Fpac?= =?UTF-8?q?ket=20can't=20be=20set=20write=20an=20additional=20error=20mess?= =?UTF-8?q?age=20to=20the=20log=20"(Please=20check=20if=20query=20size=20 -1) + [self setMaxAllowedPacketTo:currentMaxAllowedPacket]; + // Retrieve the result or error appropriately. if (0 == workerQueryResultCode) { if (mysql_field_count(mConnection) != 0) { @@ -704,12 +719,16 @@ static void forcePingTimeout(int signalNumber); // Inform the delegate about errors if (delegate && [delegate respondsToSelector:@selector(queryGaveError:)]) { - [delegate queryGaveError:[self getLastErrorMessage]]; + if(workerQueryResultCode == 1 && [self getLastErrorID] == 2006) + // very likely that query length > max_allowed_packet + [delegate queryGaveError:[NSString stringWithFormat:@"%@ (Please check if query size < max_allowed_packet)", [self getLastErrorMessage]]]; + else + [delegate queryGaveError:[self getLastErrorMessage]]; } return nil; } - + [self startKeepAliveTimerResettingState:YES]; return [theResult autorelease]; @@ -1048,17 +1067,18 @@ static void forcePingTimeout(int signalNumber) */ - (int) getMaxAllowedPacket { - CMMCPResult * r; - r = [self queryString:@"SELECT @@global.max_allowed_packet" usingEncoding:mEncoding]; - if (![[self getLastErrorMessage] isEqualToString:@""]) { - if ([self isConnected]) - NSRunAlertPanel(@"Error", [NSString stringWithFormat:@"An error occured while retrieving max_allowed_packet size:\n\n%@", [self getLastErrorMessage]], @"OK", nil, nil); - return -1; + + if (0 == mysql_query(mConnection, "SELECT @@global.max_allowed_packet")) { + if (mysql_field_count(mConnection) != 0) { + CMMCPResult *r = [[CMMCPResult alloc] initWithMySQLPtr:mConnection encoding:mEncoding timeZone:mTimeZone]; + NSArray *a = [r fetchRowAsArray]; + [r autorelease]; + if([a count]) return [[a objectAtIndex:0] intValue]; + } } - NSArray *a = [r fetchRowAsArray]; - if([a count]) - return [[a objectAtIndex:0] intValue]; - + + NSRunAlertPanel(@"Error", [NSString stringWithFormat:@"An error occured while retrieving max_allowed_packet size:\n\n%@", [self getLastErrorMessage]], @"OK", nil, nil); + return -1; } @@ -1070,14 +1090,9 @@ static void forcePingTimeout(int signalNumber) */ - (int) setMaxAllowedPacketTo:(int)newSize { - - if(![self isMaxAllowedPacketEditable]) return [self getMaxAllowedPacket]; + if(![self isMaxAllowedPacketEditable] || newSize < 1024) return [self getMaxAllowedPacket]; - [self queryString:[NSString stringWithFormat:@"SET GLOBAL max_allowed_packet = %d", newSize] usingEncoding:mEncoding]; - if (![[self getLastErrorMessage] isEqualToString:@""]) { - if ([self isConnected]) - NSRunAlertPanel(@"Error", [NSString stringWithFormat:@"An error occured while setting max_allowed_packet size:\n\n%@", [self getLastErrorMessage]], @"OK", nil, nil); - } + mysql_query(mConnection, [[NSString stringWithFormat:@"SET GLOBAL max_allowed_packet = %d", newSize] UTF8String]); return [self getMaxAllowedPacket]; } @@ -1088,8 +1103,7 @@ static void forcePingTimeout(int signalNumber) */ - (BOOL) isMaxAllowedPacketEditable { - [self queryString:[NSString stringWithFormat:@"SET GLOBAL max_allowed_packet = %d", [self getMaxAllowedPacket]] usingEncoding:mEncoding]; - return ([[self getLastErrorMessage] isEqualToString:@""]); + return(!mysql_query(mConnection, "SET GLOBAL max_allowed_packet = @@global.max_allowed_packet")); } -- cgit v1.2.3