diff options
author | Bibiko <bibiko@eva.mpg.de> | 2011-05-05 16:33:16 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2011-05-05 16:33:16 +0000 |
commit | de27c6e8f75c00cf5f28fdd5d6f8f1acc740320d (patch) | |
tree | 770e10a7ce59496e367a3c983afaa1d205c488dd | |
parent | 27102ed2925b18be9e55ba529937f6f0a4d23eaf (diff) | |
download | sequelpro-de27c6e8f75c00cf5f28fdd5d6f8f1acc740320d.tar.gz sequelpro-de27c6e8f75c00cf5f28fdd5d6f8f1acc740320d.tar.bz2 sequelpro-de27c6e8f75c00cf5f28fdd5d6f8f1acc740320d.zip |
• improve BIT field type support
- caught some more exceptional cases
- re-factored byte to bit conversion (really do not know why the old code wasn't working anymore); this should fix i1042
- disabled unisgned/zerofill check boxes in Structure for BIT
- insert correct default BIT field default value if any after adding a new row
-- this works for 5.5 but for MySQL 5.0.x it seems that providing a default value is a MySQL bug (further checks are needed)
-rw-r--r-- | Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m | 16 | ||||
-rw-r--r-- | Source/SPFieldEditorController.m | 4 | ||||
-rw-r--r-- | Source/SPTableContent.m | 6 | ||||
-rw-r--r-- | Source/SPTableStructureDelegate.m | 2 |
4 files changed, 21 insertions, 7 deletions
diff --git a/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m b/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m index ec4aa44b..bdb271fe 100644 --- a/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m +++ b/Frameworks/MCPKit/MCPFoundationKit/MCPStreamingResult.m @@ -430,12 +430,22 @@ void _bytes2bin(Byte *n, NSUInteger nbytes, NSUInteger len, char *buf); void _bytes2bin(Byte *n, NSUInteger nbytes, NSUInteger len, char *buf) { + // NSUInteger i = 0; + // nbytes--; + // while (++i <= len) + // buf[len - i] = ( (n[nbytes - (i >> 3)] >> (i & 0x7)) & 1 ) ? '1' : '0'; + // + // buf[len] = '\0'; + // ↑ why does this code not working anymore? + NSUInteger i = 0; nbytes--; - while (++i <= len) - buf[len - i] = ( (n[nbytes - (i >> 3)] >> (i & 0x7)) & 1 ) ? '1' : '0'; + len--; + while (i <= len) + buf[len - i++] = ( (n[nbytes - (i >> 3)] >> (i & 0x7)) & 1 ) ? '1' : '0'; + + buf[len+1] = '\0'; - buf[len] = '\0'; } /** diff --git a/Source/SPFieldEditorController.m b/Source/SPFieldEditorController.m index bf48ec80..7bdd2eb9 100644 --- a/Source/SPFieldEditorController.m +++ b/Source/SPFieldEditorController.m @@ -225,10 +225,10 @@ // Init according bit check boxes NSUInteger i = 0; NSUInteger maxBit = (NSUInteger)((maxTextLength > 64) ? 64 : maxTextLength); - if([bitSheetNULLButton state] == NSOffState) + if([bitSheetNULLButton state] == NSOffState && maxBit <= [(NSString*)sheetEditData length]) for( i = 0; i<maxBit; i++ ) [[self valueForKeyPath:[NSString stringWithFormat:@"bitSheetBitButton%ld", i]] - setState:([sheetEditData characterAtIndex:(maxBit-i-1)] == '1') ? NSOnState : NSOffState]; + setState:([(NSString*)sheetEditData characterAtIndex:(maxBit-i-1)] == '1') ? NSOnState : NSOffState]; for( i = maxBit; i<64; i++ ) [[self valueForKeyPath:[NSString stringWithFormat:@"bitSheetBitButton%ld", i]] setEnabled:NO]; diff --git a/Source/SPTableContent.m b/Source/SPTableContent.m index e4fe9dc2..dcc56525 100644 --- a/Source/SPTableContent.m +++ b/Source/SPTableContent.m @@ -1669,9 +1669,13 @@ } else if ([[column objectForKey:@"default"] isEqualToString:@""] && ![[column objectForKey:@"null"] boolValue] && ([[column objectForKey:@"typegrouping"] isEqualToString:@"float"] - || [[column objectForKey:@"typegrouping"] isEqualToString:@"integer"])) + || [[column objectForKey:@"typegrouping"] isEqualToString:@"integer"] + || [[column objectForKey:@"typegrouping"] isEqualToString:@"bit"])) { [newRow addObject:@"0"]; + } else if ([[column objectForKey:@"typegrouping"] isEqualToString:@"bit"] && [[column objectForKey:@"default"] hasPrefix:@"b'"] && [(NSString*)[column objectForKey:@"default"] length] > 3) { + // remove leading b' and final ' + [newRow addObject:[[[column objectForKey:@"default"] substringFromIndex:2] substringToIndex:[(NSString*)[column objectForKey:@"default"] length]-3]]; } else { [newRow addObject:[column objectForKey:@"default"]]; } diff --git a/Source/SPTableStructureDelegate.m b/Source/SPTableStructureDelegate.m index ad061b62..4e04ca05 100644 --- a/Source/SPTableStructureDelegate.m +++ b/Source/SPTableStructureDelegate.m @@ -516,7 +516,7 @@ } // Check if UNSIGNED and ZEROFILL is allowed else if([[aTableColumn identifier] isEqualToString:@"zerofill"] || [[aTableColumn identifier] isEqualToString:@"unsigned"]) { - [aCell setEnabled:([fieldValidation isFieldTypeNumeric:theRowType])]; + [aCell setEnabled:([fieldValidation isFieldTypeNumeric:theRowType] && ![theRowType isEqualToString:@"BIT"])]; } // Check if BINARY is allowed else if([[aTableColumn identifier] isEqualToString:@"binary"]) { |