diff options
author | Bibiko <bibiko@eva.mpg.de> | 2009-07-17 22:14:23 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2009-07-17 22:14:23 +0000 |
commit | 42d120896d72411afa23a96d09cdb2d3cdbc2986 (patch) | |
tree | 943a0ec0da69cb403cd9b072d00ff7659256d625 | |
parent | 4ae24d7753c5699eea62da16d5b1be251c6aeb4e (diff) | |
download | sequelpro-42d120896d72411afa23a96d09cdb2d3cdbc2986.tar.gz sequelpro-42d120896d72411afa23a96d09cdb2d3cdbc2986.tar.bz2 sequelpro-42d120896d72411afa23a96d09cdb2d3cdbc2986.zip |
• finial preparation to make Custom Query's result table editable
- added editing of blob data
- (editing not yet enabled)
TODO: progress bar while checking if field is editable and writing large blob data
-rw-r--r-- | Source/CustomQuery.m | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/Source/CustomQuery.m b/Source/CustomQuery.m index 1626c6e5..dde53df3 100644 --- a/Source/CustomQuery.m +++ b/Source/CustomQuery.m @@ -1349,24 +1349,40 @@ // [[NSNotificationCenter defaultCenter] postNotificationName:@"SMySQLQueryWillBePerformed" object:self]; NSString *newObject = nil; - if([anObject isEqualToString:[prefs stringForKey:@"NullValue"]]) - newObject = @"NULL"; - else + if ( [anObject isKindOfClass:[NSCalendarDate class]] ) { newObject = [NSString stringWithFormat:@"'%@'", [mySQLConnection prepareString:[anObject description]]]; - + } else if ( [anObject isKindOfClass:[NSNumber class]] ) { + newObject = [anObject stringValue]; + } else if ( [anObject isKindOfClass:[NSData class]] ) { + newObject = [NSString stringWithFormat:@"X'%@'", [mySQLConnection prepareBinaryData:anObject]]; + } else { + if ( [[anObject description] isEqualToString:@"CURRENT_TIMESTAMP"] ) { + newObject = @"CURRENT_TIMESTAMP"; + } else if([anObject isEqualToString:[prefs stringForKey:@"NullValue"]]) { + newObject = @"NULL"; + } else if ([[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"bit"]) { + newObject = ((![[anObject description] length] || [[anObject description] isEqualToString:@"0"])?@"0":@"1"); + } else if ([[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"date"] + && [[anObject description] isEqualToString:@"NOW()"]) { + newObject = @"NOW()"; + } else { + newObject = [NSString stringWithFormat:@"'%@'", [mySQLConnection prepareString:[anObject description]]]; + } + } + [mySQLConnection queryString: [NSString stringWithFormat:@"UPDATE %@ SET %@=%@ %@ LIMIT 1", [tableForColumn backtickQuotedString], [columnName backtickQuotedString], newObject, fieldIDQueryString]]; // [[NSNotificationCenter defaultCenter] postNotificationName:@"SMySQLQueryHasBeenPerformed" object:self]; - // Check for errors while UPDATE - if ( ![[mySQLConnection getLastErrorMessage] isEqualToString:@""] ) { - NSBeginAlertSheet(NSLocalizedString(@"Error", @"error"), NSLocalizedString(@"OK", @"OK button"), NSLocalizedString(@"Cancel", @"cancel button"), nil, tableWindow, self, nil, nil, nil, - [NSString stringWithFormat:NSLocalizedString(@"Couldn't write field.\nMySQL said: %@", @"message of panel when error while updating field to db"), [mySQLConnection getLastErrorMessage]]); + // Check for errors while UPDATE + if ( ![[mySQLConnection getLastErrorMessage] isEqualToString:@""] ) { + NSBeginAlertSheet(NSLocalizedString(@"Error", @"error"), NSLocalizedString(@"OK", @"OK button"), NSLocalizedString(@"Cancel", @"cancel button"), nil, tableWindow, self, nil, nil, nil, + [NSString stringWithFormat:NSLocalizedString(@"Couldn't write field.\nMySQL said: %@", @"message of panel when error while updating field to db"), [mySQLConnection getLastErrorMessage]]); - return; - } + return; + } // This shouldn't happen – for safety reasons @@ -1557,11 +1573,10 @@ // Check if current field is a blob if([[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"textdata"] - || [[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"blobdata"]) { + || [[columnDefinition objectForKey:@"typegrouping"] isEqualToString:@"blobdata"]) isBlob = YES; - } else { + else isBlob = NO; - } // Resolve the original table name for current column if AS was used NSString *tableForColumn = [columnDefinition objectForKey:@"org_table"]; @@ -1578,16 +1593,20 @@ BOOL isFieldEditable = (!noTableName && numberOfPossibleUpdateRows == 1) ? YES : NO; + // maybe?? // if(!isFieldEditable) // [errorText setStringValue:[NSString stringWithFormat:@"Field is not editable. Couldn't identify field origin unambiguously (%d match%@).", numberOfPossibleUpdateRows, (numberOfPossibleUpdateRows>1)?@"es":@""]]; + //to enable editing simply uncomment isEditable and delete 'NO' :) SPFieldEditorController *fieldEditor = [[SPFieldEditorController alloc] init]; id editData = [[fieldEditor editWithObject:[[fullResult objectAtIndex:rowIndex] objectAtIndex:[[aTableColumn identifier] intValue]] - usingEncoding:[mySQLConnection encoding] isObjectBlob:isBlob isEditable:NO withWindow:tableWindow] retain]; - - if ( editData ) { + usingEncoding:[mySQLConnection encoding] + isObjectBlob:isBlob + isEditable:/*isFieldEditable*/NO + withWindow:tableWindow] retain]; - } + if ( editData ) + [self tableView:aTableView setObjectValue:[editData copy] forTableColumn:aTableColumn row:rowIndex]; [fieldEditor release]; |