ah\\, coucou\\; test!

Monotone-Parent: 59d4ff7e6c2fe24e74adbe4891af30ece4f5e858
Monotone-Revision: c05e0091913ed81140571dab045abdaf56a77ef8

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2011-11-14T05:01:26
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau 2011-11-14 05:01:26 +00:00
parent a137e1679e
commit 531ed59298
2 changed files with 72 additions and 50 deletions

View file

@ -1,3 +1,9 @@
2011-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* GCSFolder.m
(_generateUpdateStatementForRow:adaptor:fields:tableName:whereColumn:isEqualTo:andColumn:isEqualTo:):
same as below.
2011-10-21 Francis Lachapelle <flachapelle@inverse.ca>
* GCSFolder.m

View file

@ -602,40 +602,48 @@ static GCSStringFormatter *stringFormatter = nil;
- (NSString *)_formatRowValue:(id)_value {
if (![_value isNotNull])
return @"NULL";
if ([_value isKindOfClass:NSStringClass])
return [stringFormatter stringByFormattingString:_value];
if ([_value isKindOfClass:NSNumberClass]) {
#if GNUSTEP_BASE_LIBRARY
_value = [_value stringValue];
return ([(NSString *)_value hasPrefix:@"Y"] ||
[(NSString *)_value hasPrefix:@"N"])
? (id)([_value boolValue] ? @"1" : @"0")
: _value;
#endif
return [_value stringValue];
}
if ([_value isKindOfClass:NSCalendarDateClass]) {
/* be smart ... convert to timestamp. Note: we loose precision. */
char buf[256];
snprintf(buf, sizeof(buf), "%i", (int)[_value timeIntervalSince1970]);
return [NSString stringWithCString:buf];
}
[self errorWithFormat:@"cannot handle value class: %@", [_value class]];
return nil;
else {
return _value;
}
}
- (NSString *)_generateInsertStatementForRow:(NSDictionary *)_row
tableName:(NSString *)_table
- (NSString *) _sqlTypeForColumn: (NSString *) _field withFieldInfos: (NSArray *) _fields
{
NSString *sqlType;
NSEnumerator *fields;
GCSFieldInfo *fieldInfo;
sqlType = nil;
fields = [_fields objectEnumerator];
while ((fieldInfo = [fields nextObject]))
{
if ([[fieldInfo columnName] caseInsensitiveCompare: _field] == NSOrderedSame)
{
sqlType = [fieldInfo sqlType];
break;
}
}
return sqlType;
}
- (NSString *) _generateInsertStatementForRow:(NSDictionary *)_row
adaptor:(EOAdaptor *)_adaptor
fields:(NSArray *)_fields
tableName:(NSString *)_table
{
// TODO: move to NSDictionary category?
NSMutableString *sql;
NSString *fieldName, *sqlType;
NSArray *keys;
EOAttribute *attribute;
id value;
unsigned i, count;
if (_row == nil || _table == nil)
@ -656,12 +664,25 @@ static GCSStringFormatter *stringFormatter = nil;
[sql appendString:@") VALUES ("];
for (i = 0, count = [keys count]; i < count; i++) {
id value;
fieldName = [keys objectAtIndex:i];
sqlType = [self _sqlTypeForColumn: fieldName withFieldInfos: _fields];
if (i != 0) [sql appendString:@", "];
value = [_row objectForKey:[keys objectAtIndex:i]];
value = [self _formatRowValue:value];
[sql appendString:value];
if (sqlType)
{
value = [self _formatRowValue: [_row objectForKey: fieldName]];
attribute = AUTORELEASE([[EOAttribute alloc] init]);
[attribute setName: fieldName];
[attribute setColumnName: fieldName];
[attribute setExternalType: sqlType];
if (i != 0) [sql appendString:@", "];
[sql appendString:[_adaptor formatValue: value forAttribute: attribute]];
}
else
{
[self errorWithFormat:@"%s: no type found for column name %@",
__PRETTY_FUNCTION__, fieldName];
}
}
[sql appendString:@")"];
@ -699,7 +720,7 @@ static GCSStringFormatter *stringFormatter = nil;
if (sqlType)
{
value = [_row objectForKey: fieldName];
value = [self _formatRowValue: [_row objectForKey: fieldName]];
attribute = AUTORELEASE([[EOAttribute alloc] init]);
[attribute setName: fieldName];
[attribute setColumnName: fieldName];
@ -717,41 +738,32 @@ static GCSStringFormatter *stringFormatter = nil;
}
}
sqlType = [self _sqlTypeForColumn: _colname withFieldInfos: _fields];
attribute = AUTORELEASE([[EOAttribute alloc] init]);
[attribute setName: _colname];
[attribute setColumnName: _colname];
[attribute setExternalType: sqlType];
[sql appendString:@" WHERE "];
[sql appendString:_colname];
[sql appendString:@" = "];
[sql appendString:[self _formatRowValue:_value]];
[sql appendString:[_adaptor formatValue: [self _formatRowValue:_value] forAttribute: attribute]];
if (_colname2 != nil) {
[sql appendString:@" AND "];
sqlType = [self _sqlTypeForColumn: _colname2 withFieldInfos: _fields];
attribute = AUTORELEASE([[EOAttribute alloc] init]);
[attribute setName: _colname2];
[attribute setColumnName: _colname2];
[attribute setExternalType: sqlType];
[sql appendString:_colname2];
[sql appendString:@" = "];
[sql appendString:[self _formatRowValue:_value2]];
[sql appendString:[_adaptor formatValue: [self _formatRowValue:_value2] forAttribute: attribute]];
}
return sql;
}
- (NSString *) _sqlTypeForColumn: (NSString *) _field withFieldInfos: (NSArray *) _fields
{
NSString *sqlType;
NSEnumerator *fields;
GCSFieldInfo *fieldInfo;
sqlType = nil;
fields = [_fields objectEnumerator];
while ((fieldInfo = [fields nextObject]))
{
if ([[fieldInfo columnName] caseInsensitiveCompare: _field] == NSOrderedSame)
{
sqlType = [fieldInfo sqlType];
break;
}
}
return sqlType;
}
- (EOEntity *) _entityWithName: (NSString *) _name
{
EOAttribute *attribute;
@ -976,6 +988,8 @@ static GCSStringFormatter *stringFormatter = nil;
? [quickChannel insertRowX: quickRow forEntity: quickTableEntity]
: [quickChannel
evaluateExpressionX: [self _generateInsertStatementForRow: quickRow
adaptor: [[quickChannel adaptorContext] adaptor]
fields: [folderInfo quickFields]
tableName: [self quickTableName]]]);
if (!error)
@ -983,6 +997,8 @@ static GCSStringFormatter *stringFormatter = nil;
? [storeChannel insertRowX: contentRow forEntity: storeTableEntity]
: [storeChannel
evaluateExpressionX: [self _generateInsertStatementForRow: contentRow
adaptor: [[storeChannel adaptorContext] adaptor]
fields: [folderInfo fields]
tableName: [self storeTableName]]]);
}
else