diff options
author | Bibiko <bibiko@eva.mpg.de> | 2010-10-01 12:20:30 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2010-10-01 12:20:30 +0000 |
commit | 294af53678cda18e5f6e5f2007daa0893c1250d0 (patch) | |
tree | 1ba6643637001b2d4852094551e7deb2f22c929b /Source/SPTableContent.m | |
parent | d7efae3ff6e5cf9407af16dbba09a55be092ce45 (diff) | |
download | sequelpro-294af53678cda18e5f6e5f2007daa0893c1250d0.tar.gz sequelpro-294af53678cda18e5f6e5f2007daa0893c1250d0.tar.bz2 sequelpro-294af53678cda18e5f6e5f2007daa0893c1250d0.zip |
• added basic support for spatial data
- while querying and writing back make usage of AsText() and GeomFromText() to allow to edit each GEOMETRY field as text simple string
- works only in Content Tab so far
- the spatial data are not yet editable inside views
Diffstat (limited to 'Source/SPTableContent.m')
-rw-r--r-- | Source/SPTableContent.m | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/Source/SPTableContent.m b/Source/SPTableContent.m index 71173f96..b620cf0b 100644 --- a/Source/SPTableContent.m +++ b/Source/SPTableContent.m @@ -2387,6 +2387,8 @@ { [rowValue setString:@"CURRENT_TIMESTAMP"]; + } else if ( [[NSArrayObjectAtIndex(dataColumns, i) objectForKey:@"typegrouping"] isEqualToString:@"geometry"] ) { + [rowValue setString:[NSString stringWithFormat:@"GeomFromText('%@')", rowObject]]; // Convert the object to a string (here we can add special treatment for date-, number- and data-fields) } else if ( [rowObject isNSNull] || ([rowObject isMemberOfClass:[NSString class]] && [[rowObject description] isEqualToString:@""]) ) { @@ -2672,8 +2674,12 @@ [value setString:[NSString stringWithFormat:@"b'%@'", [mySQLConnection prepareString:tempValue]]]; } // BLOB/TEXT data - else if ([tempValue isKindOfClass:[NSData class]]) - [value setString:[NSString stringWithFormat:@"X'%@'", [mySQLConnection prepareBinaryData:tempValue]]]; + else if ([tempValue isKindOfClass:[NSData class]]) { + if([tableDataInstance columnIsGeometry:NSArrayObjectAtIndex(keys, i)]) + [value setString:[NSString stringWithFormat:@"GeomFromText('%@')", [[[NSString alloc] initWithData:tempValue encoding:NSASCIIStringEncoding] autorelease]]]; + else + [value setString:[NSString stringWithFormat:@"X'%@'", [mySQLConnection prepareBinaryData:tempValue]]]; + } else [value setString:[NSString stringWithFormat:@"'%@'", [mySQLConnection prepareString:tempValue]]]; @@ -2712,15 +2718,18 @@ { NSInteger i; NSMutableArray *fields = [NSMutableArray array]; + NSArray *columnNames = [tableDataInstance columnNames]; + BOOL hasGeometryFields = NO; if (([prefs boolForKey:SPLoadBlobsAsNeeded]) && ([dataColumns count] > 0)) { - NSArray *columnNames = [tableDataInstance columnNames]; - for (i = 0 ; i < [columnNames count]; i++) { if (![tableDataInstance columnIsBlobOrText:[NSArrayObjectAtIndex(dataColumns, i) objectForKey:@"name"]] ) { - [fields addObject:[NSArrayObjectAtIndex(columnNames, i) backtickQuotedString]]; + if([tableDataInstance columnIsGeometry:[NSArrayObjectAtIndex(dataColumns, i) objectForKey:@"name"]]) + [fields addObject:[NSString stringWithFormat:@"AsText(%@)", [NSArrayObjectAtIndex(columnNames, i) backtickQuotedString]]]; + else + [fields addObject:[NSArrayObjectAtIndex(columnNames, i) backtickQuotedString]]; } else { // For blob/text fields, select a null placeholder so the column count is still correct @@ -2729,9 +2738,22 @@ } return [fields componentsJoinedByString:@","]; - } - else { - return @"*"; + } else { + + for (i = 0 ; i < [columnNames count]; i++) + { + if([tableDataInstance columnIsGeometry:[NSArrayObjectAtIndex(dataColumns, i) objectForKey:@"name"]]) { + [fields addObject:[NSString stringWithFormat:@"AsText(%@)", [NSArrayObjectAtIndex(columnNames, i) backtickQuotedString]]]; + hasGeometryFields = YES; + } + else + [fields addObject:[NSArrayObjectAtIndex(columnNames, i) backtickQuotedString]]; + } + if(hasGeometryFields) + return [fields componentsJoinedByString:@","]; + else + return @"*"; + } } |