A few more bugfixes. Test cases pass now. (CVS 1472)

FossilOrigin-Name: c9e3015faffb650d8dbf1f7f95a7057a36361bac
diff --git a/src/func.c b/src/func.c
index 31dd1f2..c1b9863 100644
--- a/src/func.c
+++ b/src/func.c
@@ -16,7 +16,7 @@
 ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
 ** All other code has file scope.
 **
-** $Id: func.c,v 1.60 2004/05/27 09:28:42 danielk1977 Exp $
+** $Id: func.c,v 1.61 2004/05/27 10:30:53 danielk1977 Exp $
 */
 #include <ctype.h>
 #include <math.h>
@@ -42,7 +42,9 @@
   mask = (int)sqlite3_user_data(context);
   assert( mask==-1 || mask==0 );
   iBest = 0;
+  if( sqlite3_value_type(argv[0])==SQLITE3_NULL ) return;
   for(i=1; i<argc; i++){
+    if( sqlite3_value_type(argv[i])==SQLITE3_NULL ) return;
     if( (sqlite3MemCompare(argv[iBest], argv[i], 0)^mask)>=0 ){
       iBest = i;
     }
@@ -107,7 +109,9 @@
   assert( argc==1 );
   switch( sqlite3_value_type(argv[0]) ){
     case SQLITE3_INTEGER: {
-      sqlite3_result_int64(context, -sqlite3_value_int64(argv[0]));
+      i64 iVal = sqlite3_value_int64(argv[0]);
+      if( iVal<0 ) iVal = iVal * -1;
+      sqlite3_result_int64(context, iVal);
       break;
     }
     case SQLITE3_NULL: {
@@ -115,7 +119,9 @@
       break;
     }
     default: {
-      sqlite3_result_double(context, -sqlite3_value_double(argv[0]));
+      double rVal = sqlite3_value_double(argv[0]);
+      if( rVal<0 ) rVal = rVal * -1.0;
+      sqlite3_result_double(context, rVal);
       break;
     }
   }