You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by to...@apache.org on 2006/10/26 01:14:52 UTC

svn commit: r467805 - in /incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne: CAYObjectContext.h CAYObjectContext.m CAYToManyFault.m CAYToOneFault.m

Author: torehalset
Date: Wed Oct 25 16:14:49 2006
New Revision: 467805

URL: http://svn.apache.org/viewvc?view=rev&rev=467805
Log:
performQuery error handling

Modified:
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h?view=diff&rev=467805&r1=467804&r2=467805
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h Wed Oct 25 16:14:49 2006
@@ -31,7 +31,7 @@
     NSMutableDictionary *objectByObjectId;
 }
 
--(NSArray *)performQuery:(CAYQuery *)q;
+-(NSArray *)performQuery:(CAYQuery *)query error:(NSError **)outError;
 
 -(void)setConnection:(CAYClientConnection *)c;
 -(CAYClientConnection *)connection;

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m?view=diff&rev=467805&r1=467804&r2=467805
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m Wed Oct 25 16:14:49 2006
@@ -34,6 +34,7 @@
 #import "CAYArcCreateOperation.h"
 #import "CAYArcDeleteOperation.h"
 #import "CAYRelationshipQuery.h"
+#import "CAYGenericResponse.h"
 
 @implementation CAYObjectContext
 
@@ -48,12 +49,45 @@
     return self;
 }
 
--(NSArray *)performQuery:(CAYQuery *)query
+-(NSArray *)performQuery:(CAYQuery *)query error:(NSError **)outError
 {
 	CAYQueryMessage *queryMessage = [[CAYQueryMessage alloc] init];
 	[queryMessage setQuery:query];
 	id result = [[self connection] sendMessage:queryMessage];
 	[queryMessage release];
+    
+    if([result isKindOfClass:[CAYGenericResponse class]])
+    {
+        // ok
+    }
+    else if([result isKindOfClass:[NSError class]])
+    {
+        // TODO: wrap or change code to make the NSError the most useful for the
+        // framework user?
+        NSLog(@"ERROR: NSError query result: %@", result);
+        
+        *outError = (NSError *)result;
+        
+        // http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html
+        return nil;
+    }
+    else
+    {
+        NSLog(@"ERROR: unknown query result type %@: %@", [result class], result);
+        
+        NSString *errorMessage = [[NSString alloc] initWithFormat:@"Unexpected server response: %@", result];
+        NSString *errorStr = NSLocalizedStringFromTable(errorMessage, [[self class] description], @"");
+        [errorMessage release];
+        NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
+                                                                 forKey:NSLocalizedDescriptionKey];
+        NSError *error = [[[NSError alloc] initWithDomain:[[self class] description]
+                                                     code:0
+                                                 userInfo:userInfoDict] autorelease];
+        *outError = error;
+        
+        // http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html
+        return nil;
+    }
     
     // a hack to let toOneFaults not refresh. without this hack
     // removing a element in a one-to-many relationship will not

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m?view=diff&rev=467805&r1=467804&r2=467805
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m Wed Oct 25 16:14:49 2006
@@ -33,7 +33,8 @@
     [q setRelationshipName:[self relationshipName]];
     
     CAYObjectContext *ctxt = [[self sourceObject] objectContext];
-    NSArray *rows = (NSArray *)[ctxt performQuery:q];
+    // TODO: use the error for anything?
+    NSArray *rows = (NSArray *)[ctxt performQuery:q error:nil];
     [q release];
     return rows;
 }

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m?view=diff&rev=467805&r1=467804&r2=467805
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m Wed Oct 25 16:14:49 2006
@@ -34,7 +34,8 @@
     [q setRefreshing:NO];
     
     CAYObjectContext *ctxt = [[self sourceObject] objectContext];
-    NSArray *rows = (NSArray *)[ctxt performQuery:q];
+    // TODO: use the error for anything?
+    NSArray *rows = (NSArray *)[ctxt performQuery:q error:nil];
     CAYPersistentObject *row = nil;
     if([rows count] == 1)
     {