aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/char.c
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1996-09-10 06:41:38 +0000
committerMarc G. Fournier <scrappy@hub.org>1996-09-10 06:41:38 +0000
commitf2f53aee0f2810a935e0f86b17f8dedba3647da0 (patch)
treedc0bf697fd1ff373a7b7977d4a95898044e06e4f /src/backend/utils/adt/char.c
parent1ba34d91fcaf58f6e920084f246cae5dfff5468e (diff)
downloadpostgresql-f2f53aee0f2810a935e0f86b17f8dedba3647da0.tar.gz
postgresql-f2f53aee0f2810a935e0f86b17f8dedba3647da0.zip
Fixes:
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>
Diffstat (limited to 'src/backend/utils/adt/char.c')
-rw-r--r--src/backend/utils/adt/char.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c
index 0d9c8f4fb58..04508129cfd 100644
--- a/src/backend/utils/adt/char.c
+++ b/src/backend/utils/adt/char.c
@@ -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); }