diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index f33295d27db6f00cf72fdf5eadcdca6190ea493f..025c5a575656f33c90627c45d75c65f85fa7cff8 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.2 1996/07/15 19:11:23 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.3 1996/08/26 20:38:52 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -245,13 +245,18 @@ int32 bpcharle(char *arg1, char *arg2) { int len1, len2; + int cmp; if (arg1 == NULL || arg2 == NULL) return((int32) 0); len1 = bcTruelen(arg1); len2 = bcTruelen(arg2); - return(strncmp(arg1+4, arg2+4, Min(len1,len2)) <= 0); + cmp = strncmp(arg1+4, arg2+4, Min(len1,len2)); + if (0 == cmp) + return (int32)(len1 <= len2 ? 1 : 0); + else + return (int32)(cmp <= 0); } int32 @@ -276,24 +281,34 @@ int32 bpcharge(char *arg1, char *arg2) { int len1, len2; + int cmp; if (arg1 == NULL || arg2 == NULL) return((int32) 0); len1 = bcTruelen(arg1); len2 = bcTruelen(arg2); - return(strncmp(arg1+4, arg2+4, Min(len1,len2)) >= 0); + cmp = strncmp(arg1+4, arg2+4, Min(len1,len2)); + if (0 == cmp) + return (int32)(len1 >= len2 ? 1 : 0); + else + return (int32)(cmp >= 0); } int32 bpcharcmp(char *arg1, char *arg2) { int len1, len2; + int cmp; len1 = bcTruelen(arg1); len2 = bcTruelen(arg2); - return(strncmp(arg1+4, arg2+4, Min(len1,len2))); + cmp = strncmp(arg1+4, arg2+4, Min(len1,len2)); + if ((0 == cmp) && (len1 != len2)) + return (int32)(len1 < len2 ? -1 : 1); + else + return cmp; } /***************************************************************************** @@ -369,13 +384,18 @@ int32 varcharle(char *arg1, char *arg2) { int len1, len2; + int cmp; if (arg1 == NULL || arg2 == NULL) return((int32) 0); len1 = vcTruelen(arg1); len2 = vcTruelen(arg2); - return(strncmp(arg1+4, arg2+4, Min(len1,len2)) <= 0); + cmp = strncmp(arg1+4, arg2+4, Min(len1,len2)); + if (0 == cmp) + return (int32)( len1 <= len2 ? 1 : 0); + else + return (int32)(cmp <= 0); } int32 @@ -400,24 +420,34 @@ int32 varcharge(char *arg1, char *arg2) { int len1, len2; + int cmp; if (arg1 == NULL || arg2 == NULL) return((int32) 0); len1 = vcTruelen(arg1); len2 = vcTruelen(arg2); - return(strncmp(arg1+4, arg2+4, Min(len1,len2)) >= 0); + cmp = strncmp(arg1+4, arg2+4, Min(len1,len2)); + if (0 == cmp) + return (int32)(len1 >= len2 ? 1 : 0); + else + return (int32)(cmp >= 0); + } int32 varcharcmp(char *arg1, char *arg2) { int len1, len2; + int cmp; len1 = vcTruelen(arg1); len2 = vcTruelen(arg2); - - return(strncmp(arg1+4, arg2+4, Min(len1,len2))); + cmp = (strncmp(arg1+4, arg2+4, Min(len1,len2))); + if ((0 == cmp) && (len1 != len2)) + return (int32)(len1 < len2 ? -1 : 1); + else + return (int32)(cmp); } /*****************************************************************************