* EOAccess/EOAttribute.m:

o introducing new number types:
	  ('u' for long long / int8 and 'U' for unsigned long long)
	* EOAdaptors/Postgres95/Postgres95Adaptor.m:
	  o added int8, bigint
	* EOAdaptors/Postgres95/Postgres95Channel.m:
	  o handling bigint
	  o fixed types for int2 and int8
	* EOAdaptors/Postgres95/Postgres95Values.m:
	  o added missing number types
	  o introducing new number types:
	  ('u' for long long / int8 and 'U' for unsigned long long)
	* EOControl/EONSAddOns.h/m
	  o added number accessors for NSString
	  o added NSObject
	  -performSelector:withObject:withObject:withObject:


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@18221 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
David Ayers 2003-11-28 22:30:57 +00:00
parent b536cbb410
commit 1035b7a2ed
7 changed files with 193 additions and 6 deletions

View file

@ -1,3 +1,22 @@
2003-11-28 Manuel Guesdon <mguesdon@orange-concept.com>
* EOAccess/EOAttribute.m:
o introducing new number types:
('u' for long long / int8 and 'U' for unsigned long long)
* EOAdaptors/Postgres95/Postgres95Adaptor.m:
o added int8, bigint
* EOAdaptors/Postgres95/Postgres95Channel.m:
o handling bigint
o fixed types for int2 and int8
* EOAdaptors/Postgres95/Postgres95Values.m:
o added missing number types
o introducing new number types:
('u' for long long / int8 and 'U' for unsigned long long)
* EOControl/EONSAddOns.h/m
o added number accessors for NSString
o added NSObject
-performSelector:withObject:withObject:withObject:
2003-10-24 David Ayers <d.ayers@inode.at>
* EOControl/EONSAddOns.h (GDL2_BUFFER): Added experimental macro.

View file

@ -1317,6 +1317,36 @@ return nexexp
if ([[self valueType] isEqualToString: @"i"] == YES)
*valueP = [NSNumber numberWithInt:
[*valueP intValue]];
else if ([_valueType isEqualToString: @"I"] == YES)
*valueP = [NSNumber numberWithUnsignedInt:
[*valueP unsignedIntValue]];
else if ([_valueType isEqualToString: @"c"] == YES)
*valueP = [NSNumber numberWithChar:
[*valueP intValue]];
else if ([_valueType isEqualToString: @"C"] == YES)
*valueP = [NSNumber numberWithUnsignedChar:
[*valueP unsignedIntValue]];
else if ([_valueType isEqualToString: @"s"] == YES)
*valueP = [NSNumber numberWithShort:
[*valueP shortValue]];
else if ([_valueType isEqualToString: @"S"] == YES)
*valueP = [NSNumber numberWithUnsignedShort:
[*valueP unsignedShortValue]];
else if ([_valueType isEqualToString: @"l"] == YES)
*valueP = [NSNumber numberWithLong:
[*valueP longValue]];
else if ([_valueType isEqualToString: @"L"] == YES)
*valueP = [NSNumber numberWithUnsignedLong:
[*valueP unsignedLongValue]];
else if ([_valueType isEqualToString: @"u"] == YES)
*valueP = [NSNumber numberWithLongLong:
[*valueP longLongValue]];
else if ([_valueType isEqualToString: @"U"] == YES)
*valueP = [NSNumber numberWithUnsignedLongLong:
[*valueP unsignedLongLongValue]];
else if ([_valueType isEqualToString: @"f"] == YES)
*valueP = [NSNumber numberWithFloat:
[*valueP floatValue]];
else
*valueP = [NSNumber numberWithDouble:
[*valueP doubleValue]];

View file

@ -175,7 +175,7 @@ static NSString *externalTypeNames[] = {
@"char", @"char2", @"char4", @"char8", @"char16", @"filename",
@"date", @"reltime", @"time", @"tinterval", @"abstime", @"timestamp",
@"real", @"double precision", @"float4", @"float8",
@"int4", @"int2",
@"bigint", @"int8", @"int4", @"int2",
@"oid", @"oid8", @"oidint2", @"oidint4", @"oidchar16",
@"varchar", @"bpchar",
@"numeric", @"decimal", @"cid", @"tid", @"xid",
@ -187,7 +187,7 @@ static NSString *internalTypeNames[] = {
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
@"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate", @"NSCalendarDate",
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
@"NSNumber", @"NSNumber",
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
@"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber", @"NSNumber",
@"NSString", @"NSString",
@"NSDecimalNumber", @"NSDecimalNumber", @"NSDecimalNumber", @"NSDecimalNumber", @"NSDecimalNumber",

View file

@ -1385,11 +1385,11 @@ each key
else if ([externalName isEqual: @"float8"])
valueClass = @"NSNumber", valueType = @"d";
else if ([externalName isEqual: @"int2"])
valueClass = @"NSNumber", valueType = @"i";
valueClass = @"NSNumber", valueType = @"s";
else if ([externalName isEqual: @"int4"])
valueClass = @"NSNumber", valueType = @"i";
else if ([externalName isEqual: @"int8"])
valueClass = @"NSNumber", valueType = @"l";
else if ([externalName isEqual: @"int8"] || [externalName isEqual: @"bigint"])
valueClass = @"NSNumber", valueType = @"u";
else if ([externalName isEqual: @"oid"])
valueClass = @"NSNumber", valueType = @"l";
else if ([externalName isEqual: @"varchar"])

View file

@ -1,7 +1,7 @@
/**
Postgres95Values.m
Copyright (C) 2000-2002 Free Software Foundation, Inc.
Copyright (C) 2000-2003 Free Software Foundation, Inc.
Author: Mirko Viviani <mirko.viviani@rccr.cremona.it
Date: February 2000
@ -54,6 +54,7 @@ RCS_ID("$Id$")
#include <EOAccess/EOAttribute.h>
#include <EOControl/EONSAddOns.h>
#include <Postgres95EOAdaptor/Postgres95Adaptor.h>
#include <Postgres95EOAdaptor/Postgres95Channel.h>
@ -121,6 +122,26 @@ For efficiency reasons, the returned value is NOT autoreleased !
value = [[NSDecimalNumber alloc] initWithString: str];
else if ([[attribute valueType] isEqualToString: @"i"])
value = [[NSNumber alloc] initWithInt: [str intValue]];
else if ([[attribute valueType] isEqualToString: @"I"])
value = [[NSNumber alloc] initWithUnsignedInt: [str unsignedIntValue]];
else if ([[attribute valueType] isEqualToString: @"c"])
value = [[NSNumber alloc] initWithChar: [str intValue]];
else if ([[attribute valueType] isEqualToString: @"C"])
value = [[NSNumber alloc] numberWithUnsignedChar: [str unsignedIntValue]];
else if ([[attribute valueType] isEqualToString: @"s"])
value = [[NSNumber alloc] initWithShort: [str shortValue]];
else if ([[attribute valueType] isEqualToString: @"S"])
value = [[NSNumber alloc] initWithUnsignedShort: [str unsignedShortValue]];
else if ([[attribute valueType] isEqualToString: @"l"])
value = [[NSNumber alloc] initWithLong: [str longValue]];
else if ([[attribute valueType] isEqualToString: @"L"])
value = [[NSNumber alloc] initWithUnsignedLong: [str unsignedLongValue]];
else if ([[attribute valueType] isEqualToString: @"u"])
value = [[NSNumber alloc] initWithLongLong: [str longLongValue]];
else if ([[attribute valueType] isEqualToString: @"U"])
value = [[NSNumber alloc] initWithUnsignedLongLong: [str unsignedLongLongValue]];
else if ([[attribute valueType] isEqualToString: @"f"])
value = [[NSNumber alloc] initWithFloat: [str floatValue]];
else
value = [[NSNumber alloc] initWithDouble: [str doubleValue]];

View file

@ -103,4 +103,29 @@ GDL2GlobalRecursiveLock();
- (int)parsedFirstVersionSubstring;
@end
//Ayers: Review
/* Do not rely on these. */
@interface NSString (StringToNumber)
-(unsigned int)unsignedIntValue;
-(short)shortValue;
-(unsigned short)unsignedShortValue;
-(long)longValue;
-(unsigned long)unsignedLongValue;
-(long long)longLongValue;
-(unsigned long long)unsignedLongLongValue;
@end
@interface NSObject (PerformSelect3)
/**
* Causes the receiver to execute the method implementation corresponding
* to aSelector and returns the result.<br />
* The method must be one which takes three arguments and returns an object.
* <br />Raises NSInvalidArgumentException if given a null selector.
*/
- (id) performSelector: (SEL)aSelector
withObject: (id) object1
withObject: (id) object2
withObject: (id) object3;
@end
#endif /* __EONSAddOns_h__ */

View file

@ -623,3 +623,95 @@ static NSRecursiveLock *rlock = nil;
@end
@implementation NSString (StringToNumber)
-(unsigned int)unsignedIntValue
{
long v=atol([self lossyCString]);
if (v<0 || v >UINT_MAX)
{
[NSException raise: NSInvalidArgumentException
format: @"%ld is not an unsigned int",v];
};
return (unsigned int)v;
};
-(short)shortValue
{
int v=atoi([self lossyCString]);
if (v<SHRT_MIN || v>SHRT_MAX)
{
[NSException raise: NSInvalidArgumentException
format: @"%d is not a short",v];
};
return (short)v;
};
-(unsigned short)unsignedShortValue;
{
int v=atoi([self lossyCString]);
if (v<0 || v>USHRT_MAX)
{
[NSException raise: NSInvalidArgumentException
format: @"%d is not an unsigned short",v];
};
return (unsigned short)v;
};
-(long)longValue
{
return atol([self lossyCString]);
};
-(unsigned long)unsignedLongValue;
{
long long v=atoll([self lossyCString]);
if (v<0 || v>ULONG_MAX)
{
[NSException raise: NSInvalidArgumentException
format: @"%lld is not an unsigned long",v];
};
return (unsigned long)v;
};
-(long long)longLongValue
{
long long v=atoll([self lossyCString]);
return v;
};
-(unsigned long long)unsignedLongLongValue
{
return strtoull([self lossyCString],NULL,10);
};
@end
@implementation NSObject (PerformSelect3)
//Ayers: Review (Do we really need this?)
/**
* Causes the receiver to execute the method implementation corresponding
* to aSelector and returns the result.<br />
* The method must be one which takes three arguments and returns an object.
* <br />Raises NSInvalidArgumentException if given a null selector.
*/
- (id) performSelector: (SEL)aSelector
withObject: (id) object1
withObject: (id) object2
withObject: (id) object3
{
IMP msg;
if (aSelector == 0)
[NSException raise: NSInvalidArgumentException
format: @"%@ null selector given", NSStringFromSelector(_cmd)];
msg = get_imp(GSObjCClass(self), aSelector);
if (!msg)
{
[NSException raise: NSGenericException
format: @"invalid selector passed to %s", sel_get_name(_cmd)];
return nil;
}
return (*msg)(self, aSelector, object1, object2, object3);
}
@end