]> granicus.if.org Git - postgresql/commitdiff
Fixes:
authorMarc G. Fournier <scrappy@hub.org>
Tue, 10 Sep 1996 06:41:38 +0000 (06:41 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Tue, 10 Sep 1996 06:41:38 +0000 (06:41 +0000)
The comparison routines for text and char data type give incorrect results
if the input data contains characters greater than 127.  As these routines
perform the comparison using signed char variables all character codes
greater than 127 are interpreted as less than 0.  These codes are used to
encode the iso8859 char sets.
The other text-like data types seem to work as expected as they use unsigned
chars in comparisons.

Submitted by: Massimo Dal Zotto <dz@cs.unitn.it>

src/backend/utils/adt/char.c
src/backend/utils/adt/varlena.c

index 0d9c8f4fb585b971d838e6c4b2c183c26be9a892..04508129cfdab893af0e7ca1649ef07b842744fe 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.1.1.1 1996/07/09 06:22:03 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.2 1996/09/10 06:41:34 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -129,10 +129,17 @@ char *char16out(char *s)
 
 int32 chareq(int8 arg1, int8 arg2)     { return(arg1 == arg2); }
 int32 charne(int8 arg1, int8 arg2)     { return(arg1 != arg2); }
+#ifdef UNSIGNED_CHAR_TEXT
+int32 charlt(int8 arg1, int8 arg2)    { return((uint8)arg1 <  (uint8)arg2); }
+int32 charle(int8 arg1, int8 arg2)    { return((uint8)arg1 <= (uint8)arg2); }
+int32 chargt(int8 arg1, int8 arg2)    { return((uint8)arg1 >  (uint8)arg2); }
+int32 charge(int8 arg1, int8 arg2)    { return((uint8)arg1 >= (uint8)arg2); }
+#else
 int32 charlt(int8 arg1, int8 arg2)     { return(arg1 < arg2); }
 int32 charle(int8 arg1, int8 arg2)     { return(arg1 <= arg2); }
 int32 chargt(int8 arg1, int8 arg2)     { return(arg1 > arg2); }
 int32 charge(int8 arg1, int8 arg2)     { return(arg1 >= arg2); }
+#endif
 int8 charpl(int8 arg1, int8 arg2)       { return(arg1 + arg2); }
 int8 charmi(int8 arg1, int8 arg2)      { return(arg1 - arg2); }
 int8 charmul(int8 arg1, int8 arg2)     { return(arg1 * arg2); }
index a00528eff194a30dc5ed6b418708807e7fac9fd6..3f95681293c8c41d57758f091ba77f8b4ace2322 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.4 1996/07/22 21:56:04 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.5 1996/09/10 06:41:38 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -290,6 +290,9 @@ int32
 text_lt(struct varlena *arg1, struct varlena *arg2) 
 {
     int len;
+#ifdef UNSIGNED_CHAR_TEXT
+    unsigned
+#endif
     char *a1p, *a2p;
     
     if (arg1 == NULL || arg2 == NULL)
@@ -318,6 +321,9 @@ int32
 text_le(struct varlena *arg1, struct varlena *arg2) 
 {
     int len;
+#ifdef UNSIGNED_CHAR_TEXT
+    unsigned
+#endif
     char *a1p, *a2p;
     
     if (arg1 == NULL || arg2 == NULL)