4 Copyright (C) 1999 MDlink online service center GmbH and Helge Hess
6 Author: Helge Hess (helge@mdlink.de)
8 This file is part of the FB Adaptor Library
10 This library is free software; you can redistribute it and/or
11 modify it under the terms of the GNU Library General Public
12 License as published by the Free Software Foundation; either
13 version 2 of the License, or (at your option) any later version.
15 This library is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Library General Public License for more details.
20 You should have received a copy of the GNU Library General Public
21 License along with this library; see the file COPYING.LIB.
22 If not, write to the Free Software Foundation,
23 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 // $Id: EOAttribute+FB.m 1 2004-08-20 10:38:46Z znek $
28 #import "EOAttribute+FB.h"
29 #import <FBCAccess/FBCAccess.h>
31 // Frontbase Date: Oct 21 1997 21:52:26+08:00
32 static NSString *FRONTBASE_DATE_FORMAT = @"%Y-%m-%d %H:%M:%S";
34 @implementation EOAttribute(FBAttributeAdditions)
36 - (void)loadValueClassForExternalFrontBaseType:(NSString *)_type {
37 _type = [_type lowercaseString];
39 if ([_type isEqualToString:@"tinyint"] ||
40 [_type isEqualToString:@"bit"]) {
41 [self setValueClassName:@"NSNumber"];
42 [self setValueType:@"i"];
44 else if ([_type isEqualToString:@"smallint"]) {
45 [self setValueClassName:@"NSNumber"];
46 [self setValueType:@"i"];
48 else if ([_type isEqualToString:@"int"]) {
49 [self setValueClassName:@"NSNumber"];
50 [self setValueType:@"i"];
52 else if ([_type isEqualToString:@"char"] ||
53 [_type isEqualToString:@"varchar"]) {
54 [self setValueClassName:@"NSString"];
56 else if ([_type isEqualToString:@"date"] ||
57 [_type isEqualToString:@"timestamp"] ||
58 [_type isEqualToString:@"timestamp with time zone"]) {
59 [self setValueClassName:@"NSCalendarDate"];
60 [self setCalendarFormat:FRONTBASE_DATE_FORMAT];
62 else if ([_type isEqualToString:@"float"]) {
63 [self setValueClassName:@"NSNumber"];
64 [self setValueType:@"f"];
66 else if ([_type isEqualToString:@"time"] ||
67 [_type isEqualToString:@"time with time zone"]) {
68 [self setValueClassName:@"NSString"];
70 else if ([_type isEqualToString:@"real"] ||
71 [_type isEqualToString:@"money"] ||
72 [_type isEqualToString:@"money4"] ||
73 [_type isEqualToString:@"decimal"] ||
74 [_type isEqualToString:@"numeric"]) {
75 [self setValueClassName:@"NSNumber"];
76 [self setValueType:@"d"];
78 else if ([_type isEqualToString:@"BLOB"]) {
79 [self setValueClassName:@"NSData"];
81 else if ([_type isEqualToString:@"CLOB"]) {
82 [self setValueClassName:@"NSString"];
85 NSLog(@"invalid argument %@", _type);
87 [InvalidArgumentException raise:@"InvalidArgumentException"
89 @"invalid FrontBase type %@ passed to -%@",
90 _type, NSStringFromSelector(_cmd)];
94 - (void)loadValueClassAndTypeFromFrontBaseType:(int)_type {
97 [self setExternalType:@"BOOLEAN"];
98 [self setValueClassName:@"NSNumber"];
99 [self setValueType:@"i"];
103 [self setExternalType:@"INTEGER"];
104 [self setValueClassName:@"NSNumber"];
105 [self setValueType:@"i"];
107 case FB_SmallInteger:
108 [self setExternalType:@"SMALLINT"];
109 [self setValueClassName:@"NSNumber"];
110 [self setValueType:@"i"];
114 [self setExternalType:@"FLOAT"];
115 [self setValueClassName:@"NSNumber"];
116 [self setValueType:@"d"];
119 [self setExternalType:@"REAL"];
120 [self setValueClassName:@"NSNumber"];
121 [self setValueType:@"d"];
124 [self setExternalType:@"DOUBLE"];
125 [self setValueClassName:@"NSNumber"];
126 [self setValueType:@"d"];
129 [self setExternalType:@"NUMERIC"];
130 [self setValueClassName:@"NSNumber"];
131 [self setValueType:@"d"];
134 [self setExternalType:@"DECIMAL"];
135 [self setValueClassName:@"NSNumber"];
136 [self setValueType:@"d"];
140 [self setExternalType:@"CHAR"];
141 [self setValueClassName:@"NSString"];
144 [self setExternalType:@"VARCHAR"];
145 [self setValueClassName:@"NSString"];
149 [self setExternalType:@"BIT"];
150 [self setValueClassName:@"NSData"];
153 [self setExternalType:@"VARBIT"];
154 [self setValueClassName:@"NSData"];
158 [self setExternalType:@"DATE"];
159 [self setValueClassName:@"NSCalendarDate"];
163 [self setExternalType:@"TIME"];
164 [self setValueClassName:@"NSString"];
167 [self setExternalType:@"TIME WITH TIME ZONE"];
168 [self setValueClassName:@"NSString"];
172 [self setExternalType:@"TIMESTAMP"];
173 [self setValueClassName:@"NSCalendarDate"];
176 [self setExternalType:@"TIMESTAMP WITH TIME ZONE"];
177 [self setValueClassName:@"NSCalendarDate"];
181 [self setExternalType:@"INTERVAL YEAR TO MONTH"];
182 [self setValueClassName:@"NSNumber"];
184 case FB_DayTime: /* NSDecimalNumber */
185 [self setExternalType:@"INTERVAL DAY TO SECOND"];
186 [self setValueClassName:@"NSNumber"];
190 [self setExternalType:@"CLOB"];
191 [self setValueClassName:@"NSString"];
194 [self setExternalType:@"BLOB"];
195 [self setValueClassName:@"NSData"];
199 [InvalidArgumentException raise:@"InvalidArgumentException"
201 @"invalid frontbase type %d passed to -%s",
202 _type, NSStringFromSelector(_cmd)];
209 void __link_EOAttributeFB() {
210 // used to force linking of object file
211 __link_EOAttributeFB();