//
// TableStatus.m
// sequel-pro
//
// Created by Jason Hallford (jason.hallford@byu.edu) on Th July 08 2004.
// sequel-pro Copyright (c) 2002-2003 Lorenz Textor. 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
// Or mail to
#import "TableStatus.h"
#import "SPTableData.h"
#import "SPStringAdditions.h"
@implementation TableStatus
- (void)setConnection:(CMMCPConnection *)theConnection
{
mySQLConnection = theConnection;
[mySQLConnection retain];
}
- (NSString*)formatValueWithKey:(NSString *)aKey inDictionary:(NSDictionary*)statusDict withLabel:(NSString*)label
{
NSString *value = [statusDict objectForKey:aKey];
if ([value isKindOfClass:[NSNull class]]) {
value = @"--";
}
else {
// Format size strings
if ([aKey isEqualToString:@"Data_length"] ||
[aKey isEqualToString:@"Max_data_length"] ||
[aKey isEqualToString:@"Index_length"] ||
[aKey isEqualToString:@"Data_free"]) {
value = [NSString stringForByteSize:[value intValue]];
}
// Format date strings to the user's long date format
else if ([aKey isEqualToString:@"Create_time"] ||
[aKey isEqualToString:@"Update_time"]) {
// Create date formatter
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
value = [dateFormatter stringFromDate:[NSDate dateWithNaturalLanguageString:value]];
}
}
NSString *labelVal = [NSString stringWithFormat:@"%@: %@", label, value];
return labelVal;
}
- (void)loadTable:(NSString *)aTable
{
// Store the table name away for future use...
selectedTable = aTable;
// Retrieve the table status information via the table data cache
statusFields = [tableDataInstance statusValues];
// No table selected or view selected
if([aTable isEqualToString:@""] || !aTable || [[statusFields objectForKey:@"Engine"] isEqualToString:@"View"]) {
if ([[statusFields objectForKey:@"Engine"] isEqualToString:@"View"]) {
[tableName setStringValue:[NSString stringWithFormat:@"Name: %@", selectedTable]];
[tableType setStringValue:@"Type: View"];
} else {
[tableName setStringValue:@"Name: --"];
[tableType setStringValue:@"Type: --"];
}
[tableCreatedAt setStringValue:@"Created At: --"];
[tableUpdatedAt setStringValue:@"Updated At: --"];
// Assign the row values...
[rowsNumber setStringValue:@"Number Of: --"];
[rowsFormat setStringValue:@"Format: --"];
[rowsAvgLength setStringValue:@"Avg. Length: --"];
[rowsAutoIncrement setStringValue:@"Auto Increment: --"];
// Assign the size values...
[sizeData setStringValue:@"Data: --"];
[sizeMaxData setStringValue:@"Max Data: --"];
[sizeIndex setStringValue:@"Index: --"];
[sizeFree setStringValue:@"Free: --"];
// Finally, set the value of the comments box
[commentsBox setStringValue:@"--"];
return;
}
// Assign the table values...
[tableName setStringValue:[NSString stringWithFormat:@"Name: %@",selectedTable]];
[tableType setStringValue:[self formatValueWithKey:@"Engine" inDictionary:statusFields withLabel:@"Type"]];
[tableCreatedAt setStringValue:[self formatValueWithKey:@"Create_time" inDictionary:statusFields withLabel:@"Created At"]];
[tableUpdatedAt setStringValue:[self formatValueWithKey:@"Update_time" inDictionary:statusFields withLabel:@"Updated At"]];
// Assign the row values...
[rowsNumber setStringValue:[self formatValueWithKey:@"Rows" inDictionary:statusFields withLabel:@"Approx. Number"]];
[rowsFormat setStringValue:[self formatValueWithKey:@"Row_format" inDictionary:statusFields withLabel:@"Format"]];
[rowsAvgLength setStringValue:[self formatValueWithKey:@"Avg_row_length" inDictionary:statusFields withLabel:@"Avg. Length"]];
[rowsAutoIncrement setStringValue:[self formatValueWithKey:@"Auto_increment" inDictionary:statusFields withLabel:@"Auto Increment"]];
// Assign the size values...
[sizeData setStringValue:[self formatValueWithKey:@"Data_length" inDictionary:statusFields withLabel:@"Data"]];
[sizeMaxData setStringValue:[self formatValueWithKey:@"Max_data_length" inDictionary:statusFields withLabel:@"Max Data"]];
[sizeIndex setStringValue:[self formatValueWithKey:@"Index_length" inDictionary:statusFields withLabel:@"Index"]];
[sizeFree setStringValue:[self formatValueWithKey:@"Data_free" inDictionary:statusFields withLabel:@"Free"]];
// Finally, assign the comments...
[commentsBox setStringValue:[statusFields objectForKey:@"Comment"]];
return;
}
- (IBAction)reloadTable:(id)sender
{
[tableDataInstance resetStatusData];
[self loadTable:selectedTable];
}
- (id)init
{
self = [super init];
return self;
}
@end