]> err.no Git - sope/commitdiff
fixed fetch issue
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Mon, 21 Feb 2005 00:29:22 +0000 (00:29 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Mon, 21 Feb 2005 00:29:22 +0000 (00:29 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@580 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-gdl1/PostgreSQL/GNUmakefile
sope-gdl1/PostgreSQL/GNUmakefile.preamble
sope-gdl1/SQLite3/ChangeLog
sope-gdl1/SQLite3/SQLiteAdaptor.m
sope-gdl1/SQLite3/SQLiteChannel.h
sope-gdl1/SQLite3/SQLiteChannel.m
sope-gdl1/SQLite3/Version

index 7796736c7ab2794648497d036d66d84b676ce550..719d026b87eeb023f0c1a783e33057594d0dc10a 100644 (file)
@@ -65,4 +65,4 @@ gdltest_OBJC_FILES = gdltest.m
 include $(GNUSTEP_MAKEFILES)/bundle.make
 #include $(GNUSTEP_MAKEFILES)/tool.make
 -include GNUmakefile.postamble
--include fhs.make
+include fhs.make
index 3794dd8d77ad192783425c9af6a129daa0ab0745..5a9c572958d5aeb244cba33ee8f483d285a642e0 100644 (file)
@@ -22,8 +22,6 @@
 # If not, write to the Free Software Foundation,
 # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-# $Id: GNUmakefile.preamble 1 2004-08-20 10:38:46Z znek $
-
 PostgreSQL_BUNDLE_LIBS += -lpq
 PostgreSQL_BUNDLE_LIBS += -lGDLAccess -lEOControl
 
index 636294bf4b5514dd9305202a60f04ff390d96ad1..d8136958b29434f637ef37143a84b82e4a904efc 100644 (file)
@@ -1,3 +1,15 @@
+2005-02-21  Helge Hess  <helge.hess@opengroupware.org>
+
+       * v4.5.11
+
+       * SQLiteChannel.m: fixed an issue with fetching empty tables
+
+       * SQLiteChannel.m: properly generate the trailing ';' for SQL
+         expressions
+
+       * SQLiteAdaptor.m: added special url=>condict handling (the whole URL
+         path is taken as the database name)
+
 2005-02-20  Helge Hess  <helge.hess@opengroupware.org>
 
        * SQLiteChannel.m: implemented -describeResults (v4.5.10)
index 8dc8bcc2d72b78835073b823dd014dea39b7e2e9..fee187dd685dcc64447bfc12571541412c7ece0c 100644 (file)
@@ -1,7 +1,7 @@
 /* 
    SQLiteAdaptor.m
 
-   Copyright (C) 2003 SKYRIX Software AG
+   Copyright (C) 2003-2005 SKYRIX Software AG
 
    Author: Helge Hess (helge.hess@skyrix.com)
 
@@ -22,7 +22,6 @@
    If not, write to the Free Software Foundation,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
-// $Id: SQLiteAdaptor.m,v 1.1 2004/06/14 14:27:44 helge Exp $
 
 #import "common.h"
 #import "SQLiteAdaptor.h"
 
 @implementation SQLiteAdaptor
 
+- (NSDictionary *)connectionDictionaryForNSURL:(NSURL *)_url {
+  /*
+    "Database URLs"
+    
+    We use the schema:
+      SQLite3://localhost/dbpath/foldername
+  */
+  NSMutableDictionary *md;
+  NSString *p;
+  
+  if ((p = [_url path]) == nil)
+    return nil;
+  
+  p = [p stringByDeletingLastPathComponent];
+  if ([p length] == 0) p = [_url path];
+  
+  md = [NSMutableDictionary dictionaryWithCapacity:8];
+  [md setObject:p forKey:@"databaseName"];
+  return md;
+}
+
 - (id)initWithName:(NSString *)_name {
   if ((self = [super initWithName:_name])) {
   }
index 29323b220f6cd7906155c37a21f7649710f31865..030956fc5aec591b307506e9666ebf0c4ab55a5a 100644 (file)
@@ -39,6 +39,7 @@
   // valid during -evaluateExpression:
   void     *statement;
   BOOL     hasPendingRow;
+  BOOL     isDone;
   
   void     *results;
 #if 0
index 3f056008c4c6ffdf5aa950e21038bcf66ac04a50..5f45964766ecd3b9d3ba5aa45a963d3c77090268 100644 (file)
@@ -114,6 +114,7 @@ static int openConnectionCount = 0;
 }
 
 - (BOOL)openChannel {
+  const unsigned char *cDBName;
   SQLiteAdaptor *adaptor;
   int rc;
   
@@ -123,7 +124,7 @@ static int openConnectionCount = 0;
   }
   
   adaptor = (SQLiteAdaptor *)[adaptorContext adaptor];
-
+  
   if (![super openChannel])
     return NO;
 
@@ -133,9 +134,10 @@ static int openConnectionCount = 0;
        format:@"cannot open a additional connection !"];
     return NO;
   }
+
+  cDBName = [[adaptor databaseName] UTF8String];
   
-  rc = sqlite3_open([[adaptor databaseName] UTF8String],
-                   (void *)&(self->_connection));
+  rc = sqlite3_open(cDBName, (void *)&(self->_connection));
   if (rc != SQLITE_OK) {
     // could not login ..
     // Note: connection *is* set! (might be required to deallocate)
@@ -161,8 +163,8 @@ static int openConnectionCount = 0;
 #endif
 
   if (isDebuggingEnabled) {
-    NSLog(@"SQLite channel 0x%08X opened (connection=0x%08X)",
-          (unsigned)self, self->_connection);
+    NSLog(@"SQLite channel 0x%08X opened (connection=0x%08X,%s)",
+          (unsigned)self, self->_connection, cDBName);
   }
   return YES;
 }
@@ -199,27 +201,37 @@ static int openConnectionCount = 0;
 
 - (NSException *)_makeSQLiteStep {
   NSString *r;
+  const char *em;
   int rc;
   
   rc = sqlite3_step(self->statement);
+#if 0
+  NSLog(@"STEP: %i (row=%i, done=%i, mis=%i)", rc,
+       SQLITE_ROW, SQLITE_DONE, SQLITE_MISUSE);
+#endif
   
   if (rc == SQLITE_ROW) {
     self->hasPendingRow = YES;
+    self->isDone        = NO;
     return nil /* no error */;
   }
   if (rc == SQLITE_DONE) {
     self->hasPendingRow = NO;
+    self->isDone        = YES;
     return nil /* no error */;
   }
 
   if (rc == SQLITE_ERROR)
     r = [NSString stringWithUTF8String:sqlite3_errmsg(self->_connection)];
   else if (rc == SQLITE_MISUSE)
-    r = @"Somehow the SQLite method was called in an incorrect way.";
+    r = @"The SQLite step function was called in an incorrect way";
   else if (rc == SQLITE_BUSY)
     r = @"The SQLite is busy.";
   else
     r = [NSString stringWithFormat:@"Unexpected SQLite error: %i", rc];
+
+  if ((em = sqlite3_errmsg(self->_connection)) != NULL)
+    r = [r stringByAppendingFormat:@": %s", em];
   
   return [SQLiteException exceptionWithName:@"FetchFailed"
                          reason:r userInfo:nil];
@@ -230,6 +242,8 @@ static int openConnectionCount = 0;
     sqlite3_finalize(self->statement);
     self->statement = NULL;
   }
+  self->isDone        = NO;
+  self->hasPendingRow = NO;
   [super cancelFetch];
 }
 
@@ -380,14 +394,14 @@ static int openConnectionCount = 0;
     return nil;
   }
   
-  if (!self->hasPendingRow) {
+  if (!self->hasPendingRow && !self->isDone) {
     if ((error = [self _makeSQLiteStep]) != nil) {
       [self cancelFetch];
       [error raise]; // raise error, TODO: make exception-less method
       return nil;
     }
   }
-  if (!self->hasPendingRow) { /* step was fine, but we are at the end */
+  if (self->isDone) { /* step was fine, but we are at the end */
     [self cancelFetch];
     return nil;
   }
@@ -476,7 +490,6 @@ static int openConnectionCount = 0;
 - (NSException *)evaluateExpressionX:(NSString *)_expression {
   NSMutableString *sql;
   NSException *error;
-  char       *zErrMsg = NULL;
   BOOL       result;
   const char *s;
   const char *tails = NULL;
@@ -491,6 +504,7 @@ static int openConnectionCount = 0;
   }
   
   sql = [[_expression mutableCopy] autorelease];
+  [sql appendString:@";"];
 
   /* ask delegate */
   
@@ -533,17 +547,23 @@ static int openConnectionCount = 0;
   /* reset environment */
   
   self->isFetchInProgress = NO;
+  self->isDone        = NO;
+  self->hasPendingRow = NO;
   
   s  = [sql UTF8String];
   rc = sqlite3_prepare(self->_connection, s, strlen(s), 
                       (void *)&(self->statement), &tails);
   
   if (rc != SQLITE_OK) {
+    NSString *r;
+    
     [self cancelFetch];
     // TODO: improve error
+
+    r = [NSString stringWithFormat:@"could not parse SQL statement: %s",
+                 sqlite3_errmsg(self->_connection)];
     return [SQLiteException exceptionWithName:@"ExecutionFailed" 
-                           reason:@"could not parse SQL statement" 
-                           userInfo:nil];
+                           reason:r userInfo:nil];
   }
   
   /* step to first row */
@@ -565,14 +585,6 @@ static int openConnectionCount = 0;
     }
   }
   
-  /* check whether there are pending errors */
-  
-  if (zErrMsg != NULL) {
-    NSLog(@"WARNING(%s): %@ pending error message: '%s'", 
-         __PRETTY_FUNCTION__, self, zErrMsg);
-    free(zErrMsg);
-  }
-  
   /* only on empty results? */
   if (delegateRespondsTo.didEvaluateExpression)
     [delegate adaptorChannel:self didEvaluateExpression:sql];
index c7825e078ab1a600cba9b22cbe0e1d7cdea587b8..6f0aa7829c88bd09724d4e1ece6c718b2532e219 100644 (file)
@@ -1,3 +1,3 @@
 # Version file
 
-SUBMINOR_VERSION:=10
+SUBMINOR_VERSION:=11