diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2011-03-26 18:28:40 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2011-03-26 18:28:40 -0400 |
commit | 7208fae18f1fdb242b4fcced77a3b836e15ac3ec (patch) | |
tree | e857033e3c74a3f73de3e29720290ee721199df3 /src/backend/access/gist/gistscan.c | |
parent | 0c9d9e8dd655fff7bcfc401e82838b8c20c16939 (diff) | |
download | postgresql-7208fae18f1fdb242b4fcced77a3b836e15ac3ec.tar.gz postgresql-7208fae18f1fdb242b4fcced77a3b836e15ac3ec.zip |
Clean up cruft around collation initialization for tupdescs and scankeys.
I found actual bugs in GiST and plpgsql; the rest of this is cosmetic
but meant to decrease the odds of future bugs of omission.
Diffstat (limited to 'src/backend/access/gist/gistscan.c')
-rw-r--r-- | src/backend/access/gist/gistscan.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c index c5d32ef7481..0a125e772d0 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -168,7 +168,8 @@ gistrescan(PG_FUNCTION_ARGS) * all comparisons. The original operator is passed to the Consistent * function in the form of its strategy number, which is available * from the sk_strategy field, and its subtype from the sk_subtype - * field. + * field. Also, preserve sk_func.fn_collation which is the input + * collation for the operator. * * Next, if any of keys is a NULL and that key is not marked with * SK_SEARCHNULL/SK_SEARCHNOTNULL then nothing can be found (ie, we @@ -179,8 +180,10 @@ gistrescan(PG_FUNCTION_ARGS) for (i = 0; i < scan->numberOfKeys; i++) { ScanKey skey = scan->keyData + i; + Oid collation = skey->sk_func.fn_collation; skey->sk_func = so->giststate->consistentFn[skey->sk_attno - 1]; + skey->sk_func.fn_collation = collation; if (skey->sk_flags & SK_ISNULL) { @@ -201,13 +204,16 @@ gistrescan(PG_FUNCTION_ARGS) * all comparisons. The original operator is passed to the Distance * function in the form of its strategy number, which is available * from the sk_strategy field, and its subtype from the sk_subtype - * field. + * field. Also, preserve sk_func.fn_collation which is the input + * collation for the operator. */ for (i = 0; i < scan->numberOfOrderBys; i++) { ScanKey skey = scan->orderByData + i; + Oid collation = skey->sk_func.fn_collation; skey->sk_func = so->giststate->distanceFn[skey->sk_attno - 1]; + skey->sk_func.fn_collation = collation; /* Check we actually have a distance function ... */ if (!OidIsValid(skey->sk_func.fn_oid)) |