mirror of
https://github.com/postgres/postgres.git
synced 2025-11-01 21:31:19 +03:00
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.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.107 2003/11/09 21:30:35 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.108 2003/11/12 21:15:46 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1577,26 +1577,27 @@ _bt_isequal(TupleDesc itupdesc, Page page, OffsetNumber offnum,
|
||||
|
||||
for (i = 1; i <= keysz; i++)
|
||||
{
|
||||
ScanKey entry = &scankey[i - 1];
|
||||
AttrNumber attno;
|
||||
Datum datum;
|
||||
bool isNull;
|
||||
int32 result;
|
||||
|
||||
attno = entry->sk_attno;
|
||||
attno = scankey->sk_attno;
|
||||
Assert(attno == i);
|
||||
datum = index_getattr(itup, attno, itupdesc, &isNull);
|
||||
|
||||
/* NULLs are never equal to anything */
|
||||
if ((entry->sk_flags & SK_ISNULL) || isNull)
|
||||
if (isNull || (scankey->sk_flags & SK_ISNULL))
|
||||
return false;
|
||||
|
||||
result = DatumGetInt32(FunctionCall2(&entry->sk_func,
|
||||
entry->sk_argument,
|
||||
datum));
|
||||
result = DatumGetInt32(FunctionCall2(&scankey->sk_func,
|
||||
datum,
|
||||
scankey->sk_argument));
|
||||
|
||||
if (result != 0)
|
||||
return false;
|
||||
|
||||
scankey++;
|
||||
}
|
||||
|
||||
/* if we get here, the keys are equal */
|
||||
|
||||
Reference in New Issue
Block a user