mirror of https://github.com/postgres/postgres
|The patch that is applied at the end of the email makes sure that these
|conditions are always met. The patch can be applied to any version |of Postgres95 from 1.02 to 1.05. After applying the patch, queries |using indices on bpchar and varchar fields should (hopefully ;-) ) |always return the same tuple set regardless to the fact whether |indices are used or not. | Submitted by: Gerhard Reithofer <tbr_laa@AON.AT>
This commit is contained in:
parent
aeb6656433
commit
17c542fb43
|
@ -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.2.2.1 1996/08/26 20:27:46 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);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
|
|
Loading…
Reference in New Issue