mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
neqjoinsel must now pass through collation to eqjoinsel.
Since commit 044c99bc5
, eqjoinsel passes the passed-in collation
to any operators it invokes. However, neqjoinsel failed to pass
on whatever collation it got, so that if we invoked a
collation-dependent operator via that code path, we'd get "could not
determine which collation to use for string comparison" or the like.
Per report from Justin Pryzby. Back-patch to v12, like the previous
commit.
Discussion: https://postgr.es/m/20200721191606.GL5748@telsasoft.com
This commit is contained in:
parent
4a70f829d8
commit
bd0d893aa7
@ -2775,6 +2775,7 @@ neqjoinsel(PG_FUNCTION_ARGS)
|
||||
List *args = (List *) PG_GETARG_POINTER(2);
|
||||
JoinType jointype = (JoinType) PG_GETARG_INT16(3);
|
||||
SpecialJoinInfo *sjinfo = (SpecialJoinInfo *) PG_GETARG_POINTER(4);
|
||||
Oid collation = PG_GET_COLLATION();
|
||||
float8 result;
|
||||
|
||||
if (jointype == JOIN_SEMI || jointype == JOIN_ANTI)
|
||||
@ -2821,12 +2822,14 @@ neqjoinsel(PG_FUNCTION_ARGS)
|
||||
|
||||
if (eqop)
|
||||
{
|
||||
result = DatumGetFloat8(DirectFunctionCall5(eqjoinsel,
|
||||
PointerGetDatum(root),
|
||||
ObjectIdGetDatum(eqop),
|
||||
PointerGetDatum(args),
|
||||
Int16GetDatum(jointype),
|
||||
PointerGetDatum(sjinfo)));
|
||||
result =
|
||||
DatumGetFloat8(DirectFunctionCall5Coll(eqjoinsel,
|
||||
collation,
|
||||
PointerGetDatum(root),
|
||||
ObjectIdGetDatum(eqop),
|
||||
PointerGetDatum(args),
|
||||
Int16GetDatum(jointype),
|
||||
PointerGetDatum(sjinfo)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user