modify code

This commit is contained in:
zhangwh
2024-07-05 14:55:16 +08:00
parent 4b51be8e3b
commit edeaefd559

View File

@ -442,6 +442,7 @@ int32 _bt_compare(Relation rel, BTScanInsert key, Page page, OffsetNumber offnum
* Check tuple has correct number of attributes.
*/
_bt_check_natts_correct(rel, key->heapkeyspace, page, offnum);
/*
* Force result ">" if target item is first data item on an internal page
* --- see NOTE above.
@ -474,51 +475,30 @@ int32 _bt_compare(Relation rel, BTScanInsert key, Page page, OffsetNumber offnum
datum = index_getattr(itup, scankey->sk_attno, itupdesc, &isNull);
if (likely((!(scankey->sk_flags & SK_ISNULL)) && !isNull)) {
if (scankey->sk_flags & SK_BT_DESC) {
/* btint4cmp */
if (scankey->sk_func.fn_oid == F_BTINT4CMP) {
result = (int32)datum == (int32)scankey->sk_argument
? 0
: ((int32)datum > (int32)scankey->sk_argument ? 1 : -1);
} else if (scankey->sk_func.fn_oid == F_BTINT8CMP) {
result = (int64)datum == (int64)scankey->sk_argument
? 0
: ((int64)datum > (int64)scankey->sk_argument ? 1 : -1);
} else if (scankey->sk_func.fn_oid == F_BTINT84CMP) {
result = (int64)datum == (int64)(int32)scankey->sk_argument
? 0
: ((int64)datum > (int64)(int32)scankey->sk_argument ? 1 : -1);
} else if (scankey->sk_func.fn_oid == F_BTINT48CMP) {
result = (int64)(int32)datum == (int64)scankey->sk_argument
? 0
: ((int64)(int32)datum > (int64)scankey->sk_argument ? 1 : -1);
} else {
result = DatumGetInt32(
FunctionCall2Coll(&scankey->sk_func, scankey->sk_collation, datum, scankey->sk_argument));
}
int8 multiplier = (scankey->sk_flags & SK_BT_DESC) ? 1 : -1;
/* btint4cmp */
if (scankey->sk_func.fn_oid == F_BTINT4CMP) {
result = (int32)datum == (int32)scankey->sk_argument
? 0
: ((int32)datum > (int32)scankey->sk_argument ? 1 : -1);
} else if (scankey->sk_func.fn_oid == F_BTINT8CMP) {
result = (int64)datum == (int64)scankey->sk_argument
? 0
: ((int64)datum > (int64)scankey->sk_argument ? 1 : -1);
} else if (scankey->sk_func.fn_oid == F_BTINT84CMP) {
result = (int64)datum == (int64)(int32)scankey->sk_argument
? 0
: ((int64)datum > (int64)(int32)scankey->sk_argument ? 1 : -1);
} else if (scankey->sk_func.fn_oid == F_BTINT48CMP) {
result = (int64)(int32)datum == (int64)scankey->sk_argument
? 0
: ((int64)(int32)datum > (int64)scankey->sk_argument ? 1 : -1);
} else {
/* btint4cmp */
if (scankey->sk_func.fn_oid == F_BTINT4CMP) {
result = (int32)datum == (int32)scankey->sk_argument
? 0
: ((int32)datum > (int32)scankey->sk_argument ? -1 : 1);
} else if (scankey->sk_func.fn_oid == F_BTINT8CMP) {
result = (int64)datum == (int64)scankey->sk_argument
? 0
: ((int64)datum > (int64)scankey->sk_argument ? -1 : 1);
} else if (scankey->sk_func.fn_oid == F_BTINT84CMP) {
result = (int64)datum == (int64)(int32)scankey->sk_argument
? 0
: ((int64)datum > (int64)(int32)scankey->sk_argument ? -1 : 1);
} else if (scankey->sk_func.fn_oid == F_BTINT48CMP) {
result = (int64)(int32)datum == (int64)scankey->sk_argument
? 0
: ((int64)(int32)datum > (int64)scankey->sk_argument ? -1 : 1);
} else {
result = -(DatumGetInt32(
FunctionCall2Coll(&scankey->sk_func, scankey->sk_collation, datum, scankey->sk_argument)));
}
result = DatumGetInt32(
FunctionCall2Coll(&scankey->sk_func, scankey->sk_collation, datum, scankey->sk_argument));
}
result *= multiplier;
} else {
if (scankey->sk_flags & SK_ISNULL) { /* key is NULL */
if (isNull)