]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@125 d1b88da0-ebda-0310-925b-ed51d...
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 30 Jun 2004 15:08:32 +0000 (15:08 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 30 Jun 2004 15:08:32 +0000 (15:08 +0000)
OGoContentStore/ChangeLog
OGoContentStore/GNUmakefile.preamble
OGoContentStore/OCSFolder.h
OGoContentStore/OCSFolder.m

index e1fd12d875db0041fa22b8f3d91073f6e7992d57..d23be32946bc7383fa6f1f90c15618be22866c4c 100644 (file)
@@ -1,5 +1,7 @@
 2004-06-30  Helge Hess  <helge.hess@opengroupware.org>
 
+       * OCSFolder.m: added quick fetches
+
        * GNUmakefile.preamble: fix link path
 
        * GNUmakefile (libOGoContentStore_HEADER_FILES_INSTALL_DIR): install
index e99d298a71f950cc3b6fd98eaa96383ec7dbc4f0..27075f2c342e69742d377d89e613bc1acc464219 100644 (file)
@@ -2,7 +2,8 @@
 
 libOGoContentStore_LIBRARIES_DEPEND_UPON += \
        -lGDLAccess     \
-       -lEOControl
+       -lEOControl     \
+       -lSaxObjC
 
 OCS_TOOL_LIBS += \
        -lOGoContentStore       \
index f47000dcd503ae3c7f1913e8fe09b4d146ef94f8..c19bec9af2db6a5aba465bb110c9785d7e00a0b4 100644 (file)
@@ -26,6 +26,7 @@
 #import <Foundation/NSObject.h>
 
 @class NSString, NSURL, NSNumber, NSArray, NSException;
+@class EOQualifier;
 @class EOAdaptorChannel;
 @class OCSFolderManager, OCSFolderType, OCSChannelManager;
 
@@ -79,6 +80,8 @@
 - (NSString *)fetchContentWithName:(NSString *)_name;
 - (NSException *)writeContent:(NSString *)_content toName:(NSString *)_name;
 
+- (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q;
+
 @end
 
 #endif /* __OGoContentStore_OCSFolder_H__ */
index d906925bbc51ec3717fd6aeb29f621423790ffd7..d8f5939ce1290cf502f561baf2fee001ce6a7e76 100644 (file)
@@ -224,6 +224,71 @@ static BOOL debugOn = YES;
                      userInfo:nil];
 }
 
+- (NSString *)columnNameForFieldName:(NSString *)_fieldName {
+  return _fieldName;
+}
+
+- (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q {
+  EOAdaptorChannel *channel;
+  NSException      *error;
+  NSMutableString  *sql;
+  NSArray          *attrs;
+  NSMutableArray   *results;
+  NSDictionary     *row;
+  
+#if 0
+  [self logWithFormat:@"FETCH: %@", _flds];
+  [self logWithFormat:@"  MATCH: %@", _q];
+#endif
+  
+  /* generate SQL */
+
+  sql = [NSMutableString stringWithCapacity:256];
+  [sql appendString:@"SELECT "];
+  if (_flds == nil)
+    [sql appendString:@"*"];
+  else {
+    unsigned i, count;
+    
+    count = [_flds count];
+    for (i = 0; i < count; i++) {
+      if (i > 0) [sql appendString:@", "];
+      [sql appendString:[self columnNameForFieldName:[_flds objectAtIndex:i]]];
+    }
+  }
+  [sql appendString:@" FROM "];
+  [sql appendString:[self quickTableName]];
+
+  /* open channel */
+
+  if ((channel = [self acquireStoreChannel]) == nil) {
+    [self logWithFormat:@"ERROR(%s): could not open storage channel!"];
+    return nil;
+  }
+  
+  /* run SQL */
+
+  if ((error = [channel evaluateExpressionX:sql]) != nil) {
+    [self logWithFormat:@"ERROR(%s): cannot execute quick-fetch SQL '%@': %@", 
+           __PRETTY_FUNCTION__, sql, error];
+    [self releaseChannel:channel];
+    return nil;
+  }
+
+  /* fetch results */
+  
+  results = [NSMutableArray arrayWithCapacity:64];
+  attrs   = [channel describeResults];
+  while ((row = [channel fetchAttributes:attrs withZone:NULL]) != nil)
+    [results addObject:row];
+  
+  /* release channels */
+  
+  [self releaseChannel:channel];
+  
+  return results;
+}
+
 /* description */
 
 - (NSString *)description {