diff --git a/ChangeLog b/ChangeLog index 976d0bb..075a3df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-03-16 Matt Rice + + * EOAdaptors/PostgreSQLAdaptor/PostgreSQLExpression.m + (-formatValue:forAttribute:): Use unichars, and getCharacter:. + in case insertString: modifies the string buffer. + * EOAdaptors/SQLiteAdaptor/SQLiteExpression.m (escapeString): Ditto. + Rename to escapeValue, since it works on values other than strings. + 2008-03-16 Tim McIntosh * EOControl/EOKeyValueCoding.m diff --git a/EOAdaptors/PostgreSQLAdaptor/PostgreSQLExpression.m b/EOAdaptors/PostgreSQLAdaptor/PostgreSQLExpression.m index a714d13..594c025 100644 --- a/EOAdaptors/PostgreSQLAdaptor/PostgreSQLExpression.m +++ b/EOAdaptors/PostgreSQLAdaptor/PostgreSQLExpression.m @@ -97,9 +97,6 @@ RCS_ID("$Id$") { NSString *formatted = nil; NSString *externalType; - NSMutableString *string; - const char *tempString; - int i, dif; EOFLOGObjectFnStart(); @@ -332,46 +329,36 @@ RCS_ID("$Id$") } else // String... { - int length = 0; + NSMutableString *string = [NSMutableString stringWithFormat:@"%@", value]; + unsigned i, dif; + unsigned length = [string length]; - EOFLOGObjectLevelArgs(@"EOSQLExpression", - @"other case - value=%@ class=%@", - value, [value class]); - - string = [NSMutableString stringWithFormat: @"%@", value]; - - EOFLOGObjectLevelArgs(@"EOSQLExpression", @"string %p='%@'", - string, string); - - length=[string cStringLength]; - tempString = [string cString]; - EOFLOGObjectLevelArgs(@"EOSQLExpression", @"string '%@' tempString=%s", - string, tempString); - - for (i = 0, dif = 0; i < length; i++) + if (length > 0) { - switch (tempString[i]) + unichar tempString[length]; + + [string getCharacters:tempString]; + + for (i = 0, dif = 0; i < length; i++) { - case '\\': - case '\'': - [string insertString: @"\\" atIndex: dif + i]; - dif++; - break; - case '_': - [string insertString: @"\\" atIndex: dif + i]; - dif++; - break; - default: - break; + switch (tempString[i]) + { + case '\\': + case '\'': + [string insertString: @"\\" atIndex: dif + i]; + dif++; + break; + case '_': + [string insertString: @"\\" atIndex: dif + i]; + dif++; + break; + default: + break; + } } } - EOFLOGObjectLevelArgs(@"EOSQLExpression", @"string '%@' tempString=%s", - string, tempString); formatted = [NSString stringWithFormat: @"'%@'", string]; - - EOFLOGObjectLevelArgs(@"EOSQLExpression", @"formatted %p=%@", - formatted, formatted); } EOFLOGObjectLevelArgs(@"EOSQLExpression", @"formatted=%@", formatted); diff --git a/EOAdaptors/SQLiteAdaptor/SQLite3Expression.m b/EOAdaptors/SQLiteAdaptor/SQLite3Expression.m index 44c362e..5ba348f 100644 --- a/EOAdaptors/SQLiteAdaptor/SQLite3Expression.m +++ b/EOAdaptors/SQLiteAdaptor/SQLite3Expression.m @@ -37,27 +37,31 @@ #include @implementation SQLite3Expression -static NSString *escapeString(NSString *value) +static NSString *escapeValue(id value) { - int length = 0, dif, i; NSMutableString *string = [NSMutableString stringWithFormat: @"%@", value]; - const char *tempString; - - length=[string cStringLength]; - tempString = [string cString]; + unsigned length = [string length]; + unsigned dif, i; - for (i = 0, dif = 0; i < length; i++) + if (length) { - switch (tempString[i]) + unichar tempString[length]; + + [string getCharacters:tempString]; + + for (i = 0, dif = 0; i < length; i++) { - case '\'': - [string insertString: @"'" atIndex: dif + i]; - dif++; - break; - default: - break; - } - } + switch (tempString[i]) + { + case '\'': + [string insertString: @"'" atIndex: dif + i]; + dif++; + break; + default: + break; + } + } + } return string; } @@ -76,7 +80,7 @@ static NSString *escapeString(NSString *value) } else if ([externalType isEqual:@"TEXT"]) { - return [NSString stringWithFormat:@"'%@'", escapeString(value)]; + return [NSString stringWithFormat:@"'%@'", escapeValue(value)]; } else if ([externalType isEqual:@"BLOB"]) { @@ -84,7 +88,7 @@ static NSString *escapeString(NSString *value) } else { - return [NSString stringWithFormat:@"'%@'", escapeString(value)]; + return [NSString stringWithFormat:@"'%@'", escapeValue(value)]; } } - (NSString *)lockClause