diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-11-12 21:15:59 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-11-12 21:15:59 +0000 |
commit | fa5c8a055a02e44f446e4593e397c33a572c4d67 (patch) | |
tree | 9c0a7ded5a88c082c28dbe2b431660813abd72b8 /src/backend/access/common/scankey.c | |
parent | 49f98fa833407b4e4252e42522e640ec8a0d08b2 (diff) | |
download | postgresql-fa5c8a055a02e44f446e4593e397c33a572c4d67.tar.gz postgresql-fa5c8a055a02e44f446e4593e397c33a572c4d67.zip |
Cross-data-type comparisons are now indexable by btrees, pursuant to my
pghackers proposal of 8-Nov. All the existing cross-type comparison
operators (int2/int4/int8 and float4/float8) have appropriate support.
The original proposal of storing the right-hand-side datatype as part of
the primary key for pg_amop and pg_amproc got modified a bit in the event;
it is easier to store zero as the 'default' case and only store a nonzero
when the operator is actually cross-type. Along the way, remove the
long-since-defunct bigbox_ops operator class.
Diffstat (limited to 'src/backend/access/common/scankey.c')
-rw-r--r-- | src/backend/access/common/scankey.c | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/src/backend/access/common/scankey.c b/src/backend/access/common/scankey.c index 93741cbb849..2fa02b7d91f 100644 --- a/src/backend/access/common/scankey.c +++ b/src/backend/access/common/scankey.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/scankey.c,v 1.23 2003/11/09 21:30:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/scankey.c,v 1.24 2003/11/12 21:15:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -31,15 +31,43 @@ ScanKeyEntryInitialize(ScanKey entry, int flags, AttrNumber attributeNumber, StrategyNumber strategy, + Oid subtype, RegProcedure procedure, - Datum argument, - Oid argtype) + Datum argument) { entry->sk_flags = flags; entry->sk_attno = attributeNumber; entry->sk_strategy = strategy; + entry->sk_subtype = subtype; + entry->sk_argument = argument; + fmgr_info(procedure, &entry->sk_func); +} + +/* + * ScanKeyInit + * Shorthand version of ScanKeyEntryInitialize: flags and subtype + * are assumed to be zero (the usual value). + * + * This is the recommended version for hardwired lookups in system catalogs. + * It cannot handle NULL arguments, unary operators, or nondefault operators, + * but we need none of those features for most hardwired lookups. + * + * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey + * itself, because that's what will be used for any subsidiary info attached + * to the ScanKey's FmgrInfo record. + */ +void +ScanKeyInit(ScanKey entry, + AttrNumber attributeNumber, + StrategyNumber strategy, + RegProcedure procedure, + Datum argument) +{ + entry->sk_flags = 0; + entry->sk_attno = attributeNumber; + entry->sk_strategy = strategy; + entry->sk_subtype = InvalidOid; entry->sk_argument = argument; - entry->sk_argtype = argtype; fmgr_info(procedure, &entry->sk_func); } @@ -57,14 +85,14 @@ ScanKeyEntryInitializeWithInfo(ScanKey entry, int flags, AttrNumber attributeNumber, StrategyNumber strategy, + Oid subtype, FmgrInfo *finfo, - Datum argument, - Oid argtype) + Datum argument) { entry->sk_flags = flags; entry->sk_attno = attributeNumber; entry->sk_strategy = strategy; + entry->sk_subtype = subtype; entry->sk_argument = argument; - entry->sk_argtype = argtype; fmgr_info_copy(&entry->sk_func, finfo, CurrentMemoryContext); } |