]> err.no Git - sope/blob - sope-gdl1/FrontBase2/EOAttribute+FB.m
added missing inline pathes
[sope] / sope-gdl1 / FrontBase2 / EOAttribute+FB.m
1 /* 
2    EOAttribute+FB.m
3
4    Copyright (C) 1999 MDlink online service center GmbH and Helge Hess
5
6    Author: Helge Hess (helge@mdlink.de)
7
8    This file is part of the FB Adaptor Library
9
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.
14
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.
19
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.
24 */
25 // $Id: EOAttribute+FB.m 1 2004-08-20 10:38:46Z znek $
26
27 #import "common.h"
28 #import "EOAttribute+FB.h"
29 #import <FBCAccess/FBCAccess.h>
30
31 // Frontbase Date: Oct 21 1997  21:52:26+08:00
32 static NSString *FRONTBASE_DATE_FORMAT = @"%Y-%m-%d %H:%M:%S";
33
34 @implementation EOAttribute(FBAttributeAdditions)
35
36 - (void)loadValueClassForExternalFrontBaseType:(NSString *)_type {
37   _type = [_type lowercaseString];
38   
39   if ([_type isEqualToString:@"tinyint"] ||
40       [_type isEqualToString:@"bit"]) {
41     [self setValueClassName:@"NSNumber"];
42     [self setValueType:@"i"];
43   }
44   else if ([_type isEqualToString:@"smallint"]) {
45     [self setValueClassName:@"NSNumber"];
46     [self setValueType:@"i"];
47   }
48   else if ([_type isEqualToString:@"int"]) {
49     [self setValueClassName:@"NSNumber"];
50     [self setValueType:@"i"];
51   }
52   else if ([_type isEqualToString:@"char"] ||
53            [_type isEqualToString:@"varchar"]) {
54     [self setValueClassName:@"NSString"];
55   }
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];
61   }
62   else if ([_type isEqualToString:@"float"]) {
63     [self setValueClassName:@"NSNumber"];
64     [self setValueType:@"f"];
65   }
66   else if ([_type isEqualToString:@"time"] ||
67            [_type isEqualToString:@"time with time zone"]) {
68     [self setValueClassName:@"NSString"];
69   }
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"];
77   }
78   else if ([_type isEqualToString:@"BLOB"]) {
79     [self setValueClassName:@"NSData"];
80   }
81   else if ([_type isEqualToString:@"CLOB"]) {
82     [self setValueClassName:@"NSString"];
83   }
84   else {
85     NSLog(@"invalid argument %@", _type);
86     
87     [InvalidArgumentException raise:@"InvalidArgumentException"
88                               format:
89                                 @"invalid FrontBase type %@ passed to -%@",
90                                 _type, NSStringFromSelector(_cmd)];
91   }
92 }
93
94 - (void)loadValueClassAndTypeFromFrontBaseType:(int)_type {
95   switch (_type) {
96     case FB_Boolean:
97       [self setExternalType:@"BOOLEAN"];
98       [self setValueClassName:@"NSNumber"];
99       [self setValueType:@"i"];
100       break;
101
102     case FB_Integer:
103       [self setExternalType:@"INTEGER"];
104       [self setValueClassName:@"NSNumber"];
105       [self setValueType:@"i"];
106       break;
107     case FB_SmallInteger:
108       [self setExternalType:@"SMALLINT"];
109       [self setValueClassName:@"NSNumber"];
110       [self setValueType:@"i"];
111       break;
112       
113     case FB_Float:
114       [self setExternalType:@"FLOAT"];
115       [self setValueClassName:@"NSNumber"];
116       [self setValueType:@"d"];
117       break;
118     case FB_Real:
119       [self setExternalType:@"REAL"];
120       [self setValueClassName:@"NSNumber"];
121       [self setValueType:@"d"];
122       break;
123     case FB_Double:
124       [self setExternalType:@"DOUBLE"];
125       [self setValueClassName:@"NSNumber"];
126       [self setValueType:@"d"];
127       break;
128     case FB_Numeric:
129       [self setExternalType:@"NUMERIC"];
130       [self setValueClassName:@"NSNumber"];
131       [self setValueType:@"d"];
132       break;
133     case FB_Decimal:
134       [self setExternalType:@"DECIMAL"];
135       [self setValueClassName:@"NSNumber"];
136       [self setValueType:@"d"];
137       break;
138       
139     case FB_Character:
140       [self setExternalType:@"CHAR"];
141       [self setValueClassName:@"NSString"];
142       break;
143     case FB_VCharacter:
144       [self setExternalType:@"VARCHAR"];
145       [self setValueClassName:@"NSString"];
146       break;
147       
148     case FB_Bit:
149       [self setExternalType:@"BIT"];
150       [self setValueClassName:@"NSData"];
151       break;
152     case FB_VBit:
153       [self setExternalType:@"VARBIT"];
154       [self setValueClassName:@"NSData"];
155       break;
156       
157     case FB_Date:
158       [self setExternalType:@"DATE"];
159       [self setValueClassName:@"NSCalendarDate"];
160       break;
161       
162     case FB_Time:
163       [self setExternalType:@"TIME"];
164       [self setValueClassName:@"NSString"];
165       break;
166     case FB_TimeTZ:
167       [self setExternalType:@"TIME WITH TIME ZONE"];
168       [self setValueClassName:@"NSString"];
169       break;
170       
171     case FB_Timestamp:
172       [self setExternalType:@"TIMESTAMP"];
173       [self setValueClassName:@"NSCalendarDate"];
174       break;
175     case FB_TimestampTZ:
176       [self setExternalType:@"TIMESTAMP WITH TIME ZONE"];
177       [self setValueClassName:@"NSCalendarDate"];
178       break;
179       
180     case FB_YearMonth:
181       [self setExternalType:@"INTERVAL YEAR TO MONTH"];
182       [self setValueClassName:@"NSNumber"];
183       break;
184     case FB_DayTime: /* NSDecimalNumber */
185       [self setExternalType:@"INTERVAL DAY TO SECOND"];
186       [self setValueClassName:@"NSNumber"];
187       break;
188       
189     case FB_CLOB:
190       [self setExternalType:@"CLOB"];
191       [self setValueClassName:@"NSString"];
192       break;
193     case FB_BLOB:
194       [self setExternalType:@"BLOB"];
195       [self setValueClassName:@"NSData"];
196       break;
197
198     default:
199       [InvalidArgumentException raise:@"InvalidArgumentException"
200                                 format:
201                                   @"invalid frontbase type %d passed to -%s",
202                                   _type, NSStringFromSelector(_cmd)];
203       break;
204   }
205 }
206
207 @end
208
209 void __link_EOAttributeFB() {
210   // used to force linking of object file
211   __link_EOAttributeFB();
212 }