]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@134 d1b88da0-ebda-0310-925b-ed51d...
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 1 Jul 2004 22:33:30 +0000 (22:33 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 1 Jul 2004 22:33:30 +0000 (22:33 +0000)
OGoContentStore/OCSChannelManager.m
OGoContentStore/OCSFolder.h
OGoContentStore/OCSFolder.m
OGoContentStore/README
OGoContentStore/common.h

index 2b568c99499e9ce12e0a356e13ac644a9e3016c2..e51f9c4e652553ca116fc610ec18e8d284b0dca0 100644 (file)
@@ -59,7 +59,8 @@ static int  ChannelExpireAge = 180;
 + (void)initialize {
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
   
-  debugOn = [ud boolForKey:@"OCSChannelManagerDebugEnabled"];
+  debugOn    = [ud boolForKey:@"OCSChannelManagerDebugEnabled"];
+  debugPools = [ud boolForKey:@"OCSChannelManagerPoolDebugEnabled"];
   ChannelExpireAge = [[ud objectForKey:@"OCSChannelExpireAge"] intValue];
   if (ChannelExpireAge < 1)
     ChannelExpireAge = 180;
index c19bec9af2db6a5aba465bb110c9785d7e00a0b4..7453f399888fcd6593c81eebbd108f1ea7572f5a 100644 (file)
@@ -25,7 +25,7 @@
 
 #import <Foundation/NSObject.h>
 
-@class NSString, NSURL, NSNumber, NSArray, NSException;
+@class NSString, NSURL, NSNumber, NSArray, NSException, NSMutableString;
 @class EOQualifier;
 @class EOAdaptorChannel;
 @class OCSFolderManager, OCSFolderType, OCSChannelManager;
@@ -82,6 +82,8 @@
 
 - (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q;
 
+- (void)_appendQualifier:(EOQualifier *)_q toString:(NSMutableString *)_ms;
+
 @end
 
 #endif /* __OGoContentStore_OCSFolder_H__ */
index 402cd22ec09536c1069762cfbcaca1b3996fe7c4..3fa18634b12567fb06903ac2564c5359057919e8 100644 (file)
@@ -232,6 +232,103 @@ static BOOL debugOn = YES;
   return _fieldName;
 }
 
+/* SQL generation */
+
+- (void)_appendAndQualifier:(EOAndQualifier *)_q 
+  toString:(NSMutableString *)_ms
+{
+  NSArray *qs;
+  unsigned i, count;
+  
+  qs = [_q qualifiers];
+  if ((count = [qs count]) == 0)
+    return;
+  
+  for (i = 0; i < count; i++) {
+    if (i != 0) [_ms appendString:@" AND "];
+    if (count > 1) [_ms appendString:@"("];
+    [self _appendQualifier:[qs objectAtIndex:i] toString:_ms];
+    if (count > 1) [_ms appendString:@")"];
+  }
+}
+- (void)_appendKeyValueQualifier:(EOKeyValueQualifier *)_q 
+  toString:(NSMutableString *)_ms
+{
+  id val;
+  
+  [_ms appendString:[_q key]];
+  
+  if ((val = [_q value])) {
+    SEL op = [_q selector];
+    
+    if ([val isNotNull]) {
+      if (sel_eq(op, EOQualifierOperatorEqual))
+       [_ms appendString:@" = "];
+      else if (sel_eq(op, EOQualifierOperatorNotEqual))
+       [_ms appendString:@" != "];
+      else if (sel_eq(op, EOQualifierOperatorLessThan))
+       [_ms appendString:@" < "];
+      else if (sel_eq(op, EOQualifierOperatorGreaterThan))
+       [_ms appendString:@" > "];
+      else if (sel_eq(op, EOQualifierOperatorLessThanOrEqualTo))
+       [_ms appendString:@" <= "];
+      else if (sel_eq(op, EOQualifierOperatorGreaterThanOrEqualTo))
+       [_ms appendString:@" >= "];
+      else if (sel_eq(op, EOQualifierOperatorLike))
+       [_ms appendString:@" LIKE "];
+      else {
+       [self logWithFormat:@"ERROR(%s): unsupported operation for null: %@",
+             __PRETTY_FUNCTION__, NSStringFromSelector(op)];
+      }
+
+      if ([val isKindOfClass:[NSNumber class]])
+       [_ms appendString:[val stringValue]];
+      else if ([val isKindOfClass:[NSString class]]) {
+       [_ms appendString:@"'"];
+       [_ms appendString:val];
+       [_ms appendString:@"'"];
+      }
+      else {
+       [self logWithFormat:@"ERROR(%s): unsupported value class: %@",
+             __PRETTY_FUNCTION__, NSStringFromClass([val class])];
+      }
+    }
+    else {
+      if (sel_eq(op, EOQualifierOperatorEqual))
+       [_ms appendString:@" IS NULL"];
+      else if (sel_eq(op, EOQualifierOperatorEqual))
+       [_ms appendString:@" IS NOT NULL"];
+      else {
+       [self logWithFormat:@"ERROR(%s): invalid operation for null: %@",
+             __PRETTY_FUNCTION__, NSStringFromSelector(op)];
+      }
+    }
+  }
+  else
+    [_ms appendString:@" IS NULL"];
+}
+
+- (void)_appendQualifier:(EOQualifier *)_q toString:(NSMutableString *)_ms {
+  if (_q == nil) return;
+  
+  if ([_q isKindOfClass:[EOAndQualifier class]])
+    [self _appendAndQualifier:(id)_q toString:_ms];
+  else if ([_q isKindOfClass:[EOKeyValueQualifier class]])
+    [self _appendKeyValueQualifier:(id)_q toString:_ms];
+  else
+    NSLog(@"ERROR: unknown qualifier: %@", _q);
+}
+- (NSString *)generateSQLForQualifier:(EOQualifier *)_q {
+  NSMutableString *ms;
+  
+  if (_q == nil) return nil;
+  ms = [NSMutableString stringWithCapacity:32];
+  [self _appendQualifier:_q toString:ms];
+  return ms;
+}
+
+/* fetching */
+
 - (NSArray *)fetchFields:(NSArray *)_flds matchingQualifier:(EOQualifier *)_q {
   EOAdaptorChannel *channel;
   NSException      *error;
@@ -262,7 +359,12 @@ static BOOL debugOn = YES;
   }
   [sql appendString:@" FROM "];
   [sql appendString:[self quickTableName]];
-
+  
+  if (_q != nil) {
+    [sql appendString:@" WHERE "];
+    [sql appendString:[self generateSQLForQualifier:_q]];
+  }
+  
   /* open channel */
 
   if ((channel = [self acquireStoreChannel]) == nil) {
index 58588bd3c82f34c417fadf1e885fcb9fcec3f541..2fd0d4194ad2ae9b1c80107a8042e26053023010 100644 (file)
@@ -44,10 +44,11 @@ Defaults
   OCSFolderInfoURL - the DB URL where the folder-info table is located
     eg: http://OGo:OGo@localhost/test/folder_info
 
-  OCSFolderManagerDebugEnabled    - enable folder-manager debug logs
-  OCSFolderManagerSQLDebugEnabled - enable folder-manager SQL gen debug logs
+  OCSFolderManagerDebugEnabled      - enable folder-manager debug logs
+  OCSFolderManagerSQLDebugEnabled   - enable folder-manager SQL gen debug logs
 
-  OCSChannelManagerDebugEnabled   - enable channel debug pooling logs
+  OCSChannelManagerDebugEnabled     - enable channel debug pooling logs
+  OCSChannelManagerPoolDebugEnabled - debug pool handle allocation
 
   [PGDebugEnabled] - enable PostgreSQL adaptor debugging
 
index edfa42861b3e74c056affabfa4e42c5ffff43143..8dde8af2b692db525b1d42eeb3609f83998eb7c8 100644 (file)
 #import <Foundation/NSURL.h>
 
 #include <NGExtensions/NGExtensions.h>
+
+#if NeXT_RUNTIME || APPLE_RUNTIME
+#  define objc_free(__mem__)    free(__mem__)
+#  define objc_malloc(__size__) malloc(__size__)
+#  define objc_calloc(__cnt__, __size__) calloc(__cnt__, __size__)
+#  define objc_realloc(__ptr__, __size__) realloc(__ptr__, __size__)
+#  ifndef sel_eq
+#    define sel_eq(sela,selb) (sela==selb?YES:NO)
+#  endif
+#endif