]> err.no Git - sope/commitdiff
some improvs on value handling
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Fri, 1 Jun 2007 10:37:47 +0000 (10:37 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Fri, 1 Jun 2007 10:37:47 +0000 (10:37 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1495 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-gdl1/GDLAccess/ChangeLog
sope-gdl1/GDLAccess/EOAttribute.m
sope-gdl1/GDLAccess/EOEntity.m
sope-gdl1/GDLAccess/Version

index 5014df42523d8dcc28b9d3459a7b00d62b7ca993..8eee3a432ae4008269b706fec11933c03c240a4f 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-01  Helge Hess  <helge.hess@opengroupware.org>
+
+       * EOEntity.m, EOAttribute.m: minor improvements/comments on value
+         encoding (v4.7.60)
+
 2007-04-17  Helge Hess  <helge.hess@opengroupware.org>
 
        * EOSQLExpression.m: fixed a gcc4 warning (v4.7.59)
index 8f7b867d3d30d2fec1eb2f7f863857fca3a6206a..f5147b6e0ff51240639cb21f08b1bb39f0a70154 100644 (file)
@@ -257,34 +257,48 @@ static EONull   *null = nil;
     return nil;
   if (aValue == null)
     return aValue;
-    
-    // Check if we need conversion; we use is kind of because 
-    // a string is not a NSString but some concrete class, so is NSData,
-    // NSNumber and may be other classes
+  
+  // Check if we need conversion; we use is kind of because 
+  // a string is not a NSString but some concrete class, so is NSData,
+  // NSNumber and may be other classes
   if ([aValue isKindOfClass:aClass])
     return aValue;
     
-    // We have to convert the aValue
-    
-    // Try EOCustomValues
+  // We have to convert the aValue
+  
+  // Try EOCustomValues
   if ([aValue respondsToSelector:@selector(stringForType:)]) {
     // Special case if aClass is NSNumber
     if (aClass == [NSNumber class]) {
-      return [NSNumber
-                      numberWithString:[aValue stringForType:_type]
-                      type:_type];
+      return [NSNumber numberWithString:[aValue stringForType:_type]
+                      type:_type];
     }
         
     // Even more Special case if aClass is NSCalendar date
     if (aClass == [NSCalendarDate class]) {
-      id format, date;
-            
+      /* we enter this section even if the value is a NSDate object, or
+        NSCFDate on Cocoa */
+      NSCalendarDate *date;
+      NSString       *format;
+      
       format = [self calendarFormat];
       if (format == nil)
         format = [EOAttribute defaultCalendarFormat];
-      date = [NSCalendarDate 
-                             dateWithString:[aValue stringForType:_type]
-                             calendarFormat:format];
+      
+      if ([aValue isKindOfClass:[NSDate class]]) {
+       // TBD: this does not catch NSCFDate?!
+       date = [NSCalendarDate dateWithTimeIntervalSince1970:
+                                [(NSDate *)aValue timeIntervalSince1970]];
+      }
+      else {
+       date = [NSCalendarDate dateWithString:[aValue stringForType:_type]
+                              calendarFormat:format];
+       if (date == nil) {
+         NSLog(@"WARN: could not create NSCalendarDate using format %@ "
+               @"from value: %@", format, aValue);
+       }
+      }
+      
       [date setCalendarFormat:format];
       return date;
     }
@@ -320,7 +334,7 @@ static EONull   *null = nil;
 - (id)convertValueToModel:(id)aValue {
   id aValueClassName;
   Class aValueClass;
-    
+  
   // Check value class from attribute
   aValueClassName = [self valueClassName];
   aValueClass     = NSClassFromString(aValueClassName);
index b15a1f9a35e4d91a5e364622ea7ce85626526de2..8c1a6b71fa0dc2ffcc18795b85ca6aac80722018 100644 (file)
@@ -888,15 +888,15 @@ static inline BOOL _containsObject(NSArray *a, id obj) {
   NSEnumerator        *enumerator;
   NSString            *key;
     
-  dict = [NSMutableDictionary dictionary];
+  dict = [NSMutableDictionary dictionaryWithCapacity:[aRow count]];
   enumerator = [aRow keyEnumerator];
   while ((key = [enumerator nextObject]) != nil) {
     id old = [aRow objectForKey:key];
     id new = [[self attributeNamed:key] convertValueToModel:old];
-        
+    
     if (new != nil) [dict setObject:new forKey:key];
   }
-    
+  
   return [dict count] > 0 ? dict : (NSMutableDictionary *)nil;
 }
 
index de3d3ecd1a652cb6df956911af35bddf3a29e7d0..7fbe8ee140e3623022ccc65103109611c7a3231a 100644 (file)
@@ -1,3 +1,3 @@
 # version file
 
-SUBMINOR_VERSION:=59
+SUBMINOR_VERSION:=60