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 MySQL4 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.
27 #import "EOAttribute+MySQL4.h"
29 static NSString *SQLITE3_DATETIME_FORMAT = @"%b %d %Y %I:%M:%S:000%p";
30 static NSString *SQLITE3_TIMESTAMP_FORMAT = @"%Y-%m-%d %H:%M:%S%z";
32 @implementation EOAttribute(MySQL4AttributeAdditions)
34 - (void)loadValueClassAndTypeUsingMySQL4Type:(int)_type
36 modification:(int)_modification
37 binary:(BOOL)_isBinary
39 /* This method makes no sense with MySQL4? */
42 [self setValueClassName:@"NSData"];
47 [self setExternalType:@"bool"];
48 [self setValueClassName:@"NSNumber"];
49 [self setValueType:@"i"];
52 [self setExternalType:@"name"];
53 [self setValueClassName:@"NSString"];
56 [self setExternalType:@"textoid"];
57 [self setValueClassName:@"NSString"];
60 [self setExternalType:@"int2"];
61 [self setValueClassName:@"NSNumber"];
62 [self setValueType:@"d"];
65 [self setExternalType:@"int4"];
66 [self setValueClassName:@"NSNumber"];
67 [self setValueType:@"d"];
70 [self setExternalType:@"int8"];
71 [self setValueClassName:@"NSNumber"];
72 [self setValueType:@"d"];
76 [self setExternalType:@"char"];
77 [self setValueClassName:@"NSString"];
80 [self setExternalType:@"varchar"];
81 [self setValueClassName:@"NSString"];
84 [self setExternalType:@"numeric"];
85 [self setValueClassName:@"NSNumber"];
86 [self setValueType:@"d"];
89 [self setExternalType:@"float4"];
90 [self setValueClassName:@"NSNumber"];
91 [self setValueType:@"f"];
94 [self setExternalType:@"float8"];
95 [self setValueClassName:@"NSNumber"];
96 [self setValueType:@"f"];
100 [self setExternalType:@"datetime"];
101 [self setValueClassName:@"NSCalendarDate"];
102 [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
105 [self setExternalType:@"time"];
106 [self setValueClassName:@"NSCalendarDate"];
107 [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
110 [self setExternalType:@"timestamp"];
111 [self setValueClassName:@"NSCalendarDate"];
112 [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
115 [self setExternalType:@"timestamptz"];
116 [self setValueClassName:@"NSCalendarDate"];
117 [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
120 [self setExternalType:@"bit"];
123 NSLog(@"What is SQLITE3 Oid %i ???", _type);
129 - (void)loadValueClassForExternalMySQL4Type:(NSString *)_type {
130 if ([_type isEqualToString:@"bool"]) {
131 [self setValueClassName:@"NSNumber"];
132 [self setValueType:@"i"];
134 else if ([_type isEqualToString:@"int2"]) {
135 [self setValueClassName:@"NSNumber"];
136 [self setValueType:@"i"];
138 else if ([_type isEqualToString:@"int4"]) {
139 [self setValueClassName:@"NSNumber"];
140 [self setValueType:@"i"];
142 else if ([_type isEqualToString:@"float4"]) {
143 [self setValueClassName:@"NSNumber"];
144 [self setValueType:@"f"];
146 else if ([_type isEqualToString:@"float8"]) {
147 [self setValueClassName:@"NSNumber"];
148 [self setValueType:@"d"];
150 else if ([_type isEqualToString:@"decimal"]) {
151 [self setValueClassName:@"NSNumber"];
152 [self setValueType:@"d"];
154 else if ([_type isEqualToString:@"numeric"]) {
155 [self setValueClassName:@"NSNumber"];
156 [self setValueType:@"d"];
158 else if ([_type isEqualToString:@"name"]) {
159 [self setExternalType:@"name"];
160 [self setValueClassName:@"NSString"];
162 else if ([_type isEqualToString:@"varchar"]) {
163 [self setExternalType:@"varchar"];
164 [self setValueClassName:@"NSString"];
166 else if ([_type isEqualToString:@"char"]) {
167 [self setExternalType:@"char"];
168 [self setValueClassName:@"NSString"];
170 else if ([_type isEqualToString:@"timestamp"]) {
171 [self setValueClassName:@"NSCalendarDate"];
172 [self setCalendarFormat:SQLITE3_TIMESTAMP_FORMAT];
174 else if ([_type isEqualToString:@"timestamptz"]) {
175 [self setValueClassName:@"NSCalendarDate"];
176 [self setCalendarFormat:SQLITE3_TIMESTAMP_FORMAT];
178 else if ([_type isEqualToString:@"datetime"]) {
179 [self setValueClassName:@"NSCalendarDate"];
180 [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
182 else if ([_type isEqualToString:@"date"]) {
183 [self setValueClassName:@"NSString"];
185 else if ([_type isEqualToString:@"time"]) {
186 [self setValueClassName:@"NSString"];
188 else if ([_type isEqualToString:@"text"]) {
189 [self setValueClassName:@"NSString"];
192 NSLog(@"invalid argument %@", _type);
194 [NSException raise:@"InvalidArgumentException"
195 format:@"invalid MySQL4 type %@ passed to %s",
196 _type, __PRETTY_FUNCTION__];
200 @end /* EOAttribute(MySQL4) */
202 void __link_EOAttributeMySQL4() {
203 // used to force linking of object file
204 __link_EOAttributeMySQL4();