* EOAdaptors/SQLiteAdaptor/SQLite3Adaptor.m

add some more potential table column types
        * EOAdaptors/SQLiteAdaptor/SQLite3Channel.m
          use the table types from the SQLite3Adaptor to
          decide about the valueType, and set the NOT NULL
          correctly


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@36452 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
buzzdee 2013-03-29 15:39:49 +00:00
parent 4a6e972d46
commit 4d273bf435
3 changed files with 58 additions and 30 deletions

View file

@ -1,6 +1,12 @@
2013-03-30: Sebastian Reitenbach <sebastia@l00-bugdead-prods.de>
* Apps/EOModelEditor/SQLGenerator.m
Add NSEmitTODO to showTables:
* EOAdaptors/SQLiteAdaptor/SQLite3Adaptor.m
add some more potential table column types
* EOAdaptors/SQLiteAdaptor/SQLite3Channel.m
use the table types from the SQLite3Adaptor to
decide about the valueType, and set the NOT NULL
correctly
2013-03-25: Sebastian Reitenbach <sebastia@l00-bugdead-prods.de>
* EOAdaptors/SQLiteAdaptor/SQLite3Channel.m

View file

@ -43,14 +43,36 @@ NSString *SQLite3AdaptorExceptionName = @"SQLite3AdaptorException";
static NSString *types[][2] =
{
{@"INTEGER", @"NSDecimalNumber"},
{@"TEXT", @"NSString"},
{@"BLOB", @"NSData"},
{@"DATE", @"NSCalendarDate"},
{@"REAL", @"NSNumber"},
{@"VARCHAR", @"NSString"},
{@"DOUBLE", @"NSNumber"},
{@"NULL", @"EONull"},
{@"INTEGER", @"NSDecimalNumber"},
{@"INT", @"NSDecimalNumber"},
{@"TINYINT", @"NSDecimalNumber"},
{@"SMALLINT", @"NSDecimalNumber"},
{@"MEDIUMINT", @"NSDecimalNumber"},
{@"BIGINT", @"NSDecimalNumber"},
{@"UNSIGNED BIGINT", @"NSDecimalNumber"},
{@"INT2", @"NSDecimalNumber"},
{@"INT8", @"NSDecimalNumber"},
{@"TEXT", @"NSString"},
{@"CLOB", @"NSString"},
{@"CHARACTER", @"NSString"},
{@"VARCHAR", @"NSString"},
{@"VARYING CHARACTER",@"NSString"},
{@"NCHAR", @"NSString"},
{@"CHAR", @"NSString"},
{@"NATIVE CHARACTER", @"NSString"},
{@"NVARCHAR", @"NSString"},
{@"BLOB", @"NSData"},
{@"REAL", @"NSNumber"},
{@"DOUBLE", @"NSNumber"},
{@"DOUBLE PRECISION", @"NSNumber"},
{@"FLOAT", @"NSNumber"},
{@"NUMERIC", @"NSNumber"},
{@"DECIMAL", @"NSNumber"},
{@"BOOLEAN", @"NSNumber"},
{@"BOOL", @"NSNumber"},
{@"DATE", @"NSCalendarDate"},
{@"DATETIME", @"NSCalendarDate"},
{@"NULL", @"EONull"},
};
+ (NSDictionary *)externalToInternalTypeMap

View file

@ -347,6 +347,7 @@ static id newNumberValue(const char *data, EOAttribute *attrib)
{
NSString *columnName;
NSString *externalType;
BOOL allowsNull;
for (col=0;col<nCols;col++)
{
// count keeps track of the current field
@ -360,31 +361,29 @@ static id newNumberValue(const char *data, EOAttribute *attrib)
}
else if ([tmpHeader isEqual:@"type"])
{
externalType = [NSString stringWithFormat:@"%s", results[count]];
if ([externalType hasPrefix:@"CHAR"] == YES)
{
valueClass = @"NSString", valueType = @"c";
}
else if ([externalType hasPrefix:@"BOOL"] == YES)
{
valueClass = @"NSNumber", valueType = @"c";
}
else if ([externalType hasPrefix:@"INTEGER"] == YES)
{
valueClass = @"NSNumber", valueType = @"l";
}
else if ([externalType hasPrefix:@"REAL"] == YES)
{
valueClass = @"NSNumber", valueType = @"d";
}
else if ([externalType hasPrefix:@"BLOB"] == YES)
{
valueClass = @"NSData", valueType = @"x";
}
NSRange range;
range = [[NSString stringWithFormat:@"%s", results[count]] rangeOfString:@"("];
if (range.location != NSNotFound)
{
externalType = [[NSString stringWithFormat:@"%s", results[count]] substringToIndex:range.location];
}
else
{
externalType = [NSString stringWithFormat:@"%s", results[count]];
}
valueClass = [SQLite3Adaptor internalTypeForExternalType: externalType model:nil];
if (valueClass == nil)
{
valueClass = @"NSString";
// TODO: should also set the valueType here???
}
}
else if ([tmpHeader isEqual:@"notnull"])
{
// do nothing yet
if ([[NSString stringWithFormat:@"%s", results[count]] isEqual:@"1"])
allowsNull = NO;
else
allowsNull = YES;
}
else if ([tmpHeader isEqual:@"dflt_value"])
{
@ -400,6 +399,7 @@ static id newNumberValue(const char *data, EOAttribute *attrib)
}
[attribute setName: columnName];
[attribute setColumnName: columnName];
[attribute setAllowsNull: allowsNull];
[attribute setExternalType: externalType];
[attribute setValueType: valueType];
[attribute setValueClassName: valueClass];