]> err.no Git - sope/blob - sope-gdl1/SQLite3/EOAttribute+SQLite.m
fixed fetch issue
[sope] / sope-gdl1 / SQLite3 / EOAttribute+SQLite.m
1 /* 
2    EOAttribute+SQLite.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 SQLite 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
26 #include "common.h"
27 #import "EOAttribute+SQLite.h"
28
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";
31
32 @implementation EOAttribute(SQLiteAttributeAdditions)
33
34 - (void)loadValueClassAndTypeUsingSQLiteType:(int)_type
35   size:(int)_size
36   modification:(int)_modification
37   binary:(BOOL)_isBinary
38 {
39   /* This method makes no sense with SQLite? */
40   
41   if (_isBinary)
42     [self setValueClassName:@"NSData"];
43
44 #if 0
45   switch (_type) {
46   case BOOLOID:
47       [self setExternalType:@"bool"];
48       [self setValueClassName:@"NSNumber"];
49       [self setValueType:@"i"];
50       return;
51   case NAMEOID:
52       [self setExternalType:@"name"];
53       [self setValueClassName:@"NSString"];
54       return;
55   case TEXTOID:
56       [self setExternalType:@"textoid"];
57       [self setValueClassName:@"NSString"];
58       return;
59   case INT2OID:
60       [self setExternalType:@"int2"];
61       [self setValueClassName:@"NSNumber"];
62       [self setValueType:@"d"];
63       return;
64   case INT4OID:
65       [self setExternalType:@"int4"];
66       [self setValueClassName:@"NSNumber"];
67       [self setValueType:@"d"];
68       return;
69   case INT8OID:
70       [self setExternalType:@"int8"];
71       [self setValueClassName:@"NSNumber"];
72       [self setValueType:@"d"];
73       return;
74       
75     case CHAROID:
76       [self setExternalType:@"char"];
77       [self setValueClassName:@"NSString"];
78       break;
79     case VARCHAROID:
80       [self setExternalType:@"varchar"];
81       [self setValueClassName:@"NSString"];
82       break;
83     case NUMERICOID:
84       [self setExternalType:@"numeric"];
85       [self setValueClassName:@"NSNumber"];
86       [self setValueType:@"d"];
87       break;
88     case FLOAT4OID:
89       [self setExternalType:@"float4"];
90       [self setValueClassName:@"NSNumber"];
91       [self setValueType:@"f"];
92       break;
93     case FLOAT8OID:
94       [self setExternalType:@"float8"];
95       [self setValueClassName:@"NSNumber"];
96       [self setValueType:@"f"];
97       break;
98
99     case DATEOID:
100       [self setExternalType:@"datetime"];
101       [self setValueClassName:@"NSCalendarDate"];
102       [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
103       break;
104     case TIMEOID:
105       [self setExternalType:@"time"];
106       [self setValueClassName:@"NSCalendarDate"];
107       [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
108       break;
109     case TIMESTAMPOID:
110       [self setExternalType:@"timestamp"];
111       [self setValueClassName:@"NSCalendarDate"];
112       [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
113       break;
114     case TIMESTAMPTZOID:
115       [self setExternalType:@"timestamptz"];
116       [self setValueClassName:@"NSCalendarDate"];
117       [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
118       break;
119     case BITOID:
120       [self setExternalType:@"bit"];
121       break;
122     default:
123     NSLog(@"What is SQLITE3 Oid %i ???", _type);
124     break;
125   }
126 #endif
127 }
128
129 - (void)loadValueClassForExternalSQLiteType:(NSString *)_type {
130   if ([_type isEqualToString:@"bool"]) {
131     [self setValueClassName:@"NSNumber"];
132     [self setValueType:@"i"];
133   }
134   else if ([_type isEqualToString:@"int2"]) {
135     [self setValueClassName:@"NSNumber"];
136     [self setValueType:@"i"];
137   }
138   else if ([_type isEqualToString:@"int4"]) {
139     [self setValueClassName:@"NSNumber"];
140     [self setValueType:@"i"];
141   }
142   else if ([_type isEqualToString:@"float4"]) {
143     [self setValueClassName:@"NSNumber"];
144     [self setValueType:@"f"];
145   }
146   else if ([_type isEqualToString:@"float8"]) {
147     [self setValueClassName:@"NSNumber"];
148     [self setValueType:@"d"];
149   }
150   else if ([_type isEqualToString:@"decimal"]) {
151     [self setValueClassName:@"NSNumber"];
152     [self setValueType:@"d"];
153   }
154   else if ([_type isEqualToString:@"numeric"]) {
155     [self setValueClassName:@"NSNumber"];
156     [self setValueType:@"d"];
157   }
158   else if ([_type isEqualToString:@"name"]) {
159     [self setExternalType:@"name"];
160     [self setValueClassName:@"NSString"];
161   }
162   else if ([_type isEqualToString:@"varchar"]) {
163     [self setExternalType:@"varchar"];
164     [self setValueClassName:@"NSString"];
165   }
166   else if ([_type isEqualToString:@"char"]) {
167     [self setExternalType:@"char"];
168     [self setValueClassName:@"NSString"];
169   }
170   else if ([_type isEqualToString:@"timestamp"]) {
171     [self setValueClassName:@"NSCalendarDate"];
172     [self setCalendarFormat:SQLITE3_TIMESTAMP_FORMAT];
173   }
174   else if ([_type isEqualToString:@"timestamptz"]) {
175     [self setValueClassName:@"NSCalendarDate"];
176     [self setCalendarFormat:SQLITE3_TIMESTAMP_FORMAT];
177   }
178   else if ([_type isEqualToString:@"datetime"]) {
179     [self setValueClassName:@"NSCalendarDate"];
180     [self setCalendarFormat:SQLITE3_DATETIME_FORMAT];
181   }
182   else if ([_type isEqualToString:@"date"]) {
183     [self setValueClassName:@"NSString"];
184   }
185   else if ([_type isEqualToString:@"time"]) {
186     [self setValueClassName:@"NSString"];
187   }
188   else if ([_type isEqualToString:@"text"]) {
189     [self setValueClassName:@"NSString"];
190   }
191   else {
192     NSLog(@"invalid argument %@", _type);
193     
194     [NSException raise:@"InvalidArgumentException"
195                  format:@"invalid SQLite type %@ passed to %s",
196                    _type, __PRETTY_FUNCTION__];
197   }
198 }
199
200 @end /* EOAttribute(SQLite) */
201
202 void __link_EOAttributeSQLite() {
203   // used to force linking of object file
204   __link_EOAttributeSQLite();
205 }