]> err.no Git - scalable-opengroupware.org/commitdiff
added ability to sort fetch results in the database
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 27 Aug 2004 20:17:40 +0000 (20:17 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 27 Aug 2004 20:17:40 +0000 (20:17 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@288 d1b88da0-ebda-0310-925b-ed51d893ca5b

OGoContentStore/ChangeLog
OGoContentStore/OCSChannelManager.m
OGoContentStore/OCSFolder.h
OGoContentStore/OCSFolder.m
OGoContentStore/Version

index 6dde311b3260ccb9e2a75cb5c6d21c702d9ba0b4..19707fc100844dc86c1dc6aed454c10ca5a10de3 100644 (file)
@@ -1,3 +1,11 @@
+2004-08-27  Helge Hess  <helge.hess@skyrix.com>
+
+       * v0.9.7
+       
+       * OCSChannelManager.m: use PostgreSQL as adaptor, not PostgreSQL72
+       
+       * OCSFolder.m: added support for doing folder sorting in SQL
+
 2004-08-26  Helge Hess  <helge.hess@skyrix.com>
 
        * v0.9.6
index f678bd02437322242121f598a4c7a860e688d4c0..0188ad873c44235787910c970ec3288230fa983d 100644 (file)
@@ -75,8 +75,8 @@ static NSTimeInterval ChannelCollectionTimer = 5 * 60;
 }
 
 + (NSString *)adaptorNameForURLScheme:(NSString *)_scheme {
-  // TODO: map scheme to adaptors (eg 'postgresql://' to PostgreSQL72
-  return @"PostgreSQL72";
+  // TODO: map scheme to adaptors (eg 'postgresql://' to PostgreSQL
+  return @"PostgreSQL";
 }
 
 + (id)defaultChannelManager {
index 5e3aad72271645385e0c67799aca28665506313b..267de0ea198eac27a44861c4411e59e2ec8dcc5a 100644 (file)
@@ -26,7 +26,7 @@
 #import <Foundation/NSObject.h>
 
 @class NSString, NSURL, NSNumber, NSArray, NSException, NSMutableString;
-@class EOQualifier;
+@class EOQualifier, EOFetchSpecification;
 @class EOAdaptorChannel;
 @class OCSFolderManager, OCSFolderType, OCSChannelManager;
 
@@ -81,6 +81,8 @@
 - (NSException *)writeContent:(NSString *)_content toName:(NSString *)_name;
 - (NSException *)deleteContentWithName:(NSString *)_name;
 
+- (NSArray *)fetchFields:(NSArray *)_flds 
+  fetchSpecification:(EOFetchSpecification *)_fs;
 - (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q;
 
 @end
index 6fd24ba59ae33ec53f39bfe25559a79b20ba07da..9d38bacbc7654436d253fbb4801869f6952f221a 100644 (file)
@@ -499,6 +499,50 @@ static BOOL doLogStore = NO;
 
 /* SQL generation */
 
+- (NSString *)generateSQLForSortOrderings:(NSArray *)_so {
+  NSMutableString *sql;
+  unsigned i, count;
+
+  if ((count = [_so count]) == 0)
+    return nil;
+  
+  sql = [NSMutableString stringWithCapacity:(count * 16)];
+  for (i = 0; i < count; i++) {
+    EOSortOrdering *so;
+    NSString *column;
+    SEL      sel;
+    
+    so     = [_so objectAtIndex:i];
+    sel    = [so selector];
+    column = [self columnNameForFieldName:[so key]];
+    
+    if (i > 0) [sql appendString:@", "];
+    
+    if (sel_eq(sel, EOCompareAscending)) {
+      [sql appendString:column];
+      [sql appendString:@" ASC"];
+    }
+    else if (sel_eq(sel, EOCompareDescending)) {
+      [sql appendString:column];
+      [sql appendString:@" DESC"];
+    }
+    else if (sel_eq(sel, EOCompareCaseInsensitiveAscending)) {
+      [sql appendString:@"UPPER("];
+      [sql appendString:column];
+      [sql appendString:@") ASC"];
+    }
+    else if (sel_eq(sel, EOCompareCaseInsensitiveDescending)) {
+      [sql appendString:@"UPPER("];
+      [sql appendString:column];
+      [sql appendString:@") DESC"];
+    }
+    else {
+      [self logWithFormat:@"cannot handle sort selector in store: %@",
+             NSStringFromSelector(sel)];
+    }
+  }
+  return sql;
+}
 
 - (NSString *)generateSQLForQualifier:(EOQualifier *)_q {
   NSMutableString *ms;
@@ -511,7 +555,11 @@ static BOOL doLogStore = NO;
 
 /* fetching */
 
-- (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q {
+- (NSArray *)fetchFields:(NSArray *)_flds 
+  fetchSpecification:(EOFetchSpecification *)_fs
+{
+  EOQualifier      *qualifier;
+  NSArray          *sortOrderings;
   EOAdaptorChannel *channel;
   NSException      *error;
   NSMutableString  *sql;
@@ -519,6 +567,9 @@ static BOOL doLogStore = NO;
   NSMutableArray   *results;
   NSDictionary     *row;
   
+  qualifier     = [_fs qualifier];
+  sortOrderings = [_fs sortOrderings];
+  
 #if 0
   [self logWithFormat:@"FETCH: %@", _flds];
   [self logWithFormat:@"  MATCH: %@", _q];
@@ -542,10 +593,19 @@ static BOOL doLogStore = NO;
   [sql appendString:@" FROM "];
   [sql appendString:[self quickTableName]];
   
-  if (_q != nil) {
+  if (qualifier != nil) {
     [sql appendString:@" WHERE "];
-    [sql appendString:[self generateSQLForQualifier:_q]];
+    [sql appendString:[self generateSQLForQualifier:qualifier]];
+  }
+  if ([sortOrderings count] > 0) {
+    [sql appendString:@" ORDER BY "];
+    [sql appendString:[self generateSQLForSortOrderings:sortOrderings]];
   }
+#if 0
+  /* limit */
+  [sql appendString:@" LIMIT "]; // count
+  [sql appendString:@" OFFSET "]; // index from 0
+#endif
   
   /* open channel */
 
@@ -576,6 +636,19 @@ static BOOL doLogStore = NO;
   
   return results;
 }
+- (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q {
+  EOFetchSpecification *fs;
+
+  if (_q == nil)
+    fs = nil;
+  else {
+    fs = [EOFetchSpecification fetchSpecificationWithEntityName:
+                                [self folderName]
+                              qualifier:_q
+                              sortOrderings:nil];
+  }
+  return [self fetchFields:_flds fetchSpecification:fs];
+}
 
 /* description */
 
index 8e956c3402cf01e84bb074bfd0f89e19db0a9fad..1a54931085b6085f7913846667c335f2afaaed70 100644 (file)
@@ -2,4 +2,6 @@
 
 MAJOR_VERSION=0
 MINOR_VERSION=9
-SUBMINOR_VERSION:=6
+SUBMINOR_VERSION:=7
+
+# v0.9.7 requires libGDLAccess v1.1.35