@ -63,7 +63,7 @@ static bool _bt_check_compare(IndexScanDesc scan, ScanDirection dir,
bool * continuescan , int * ikey ) ;
static bool _bt_check_rowcompare ( ScanKey skey ,
IndexTuple tuple , int tupnatts , TupleDesc tupdesc ,
ScanDirection dir , bool forcenonrequired , bool * continuescan ) ;
ScanDirection dir , bool * continuescan ) ;
static void _bt_checkkeys_look_ahead ( IndexScanDesc scan , BTReadPageState * pstate ,
int tupnatts , TupleDesc tupdesc ) ;
static int _bt_keep_natts ( Relation rel , IndexTuple lastleft ,
@ -2902,8 +2902,10 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir,
/* row-comparison keys need special processing */
if ( key - > sk_flags & SK_ROW_HEADER )
{
Assert ( ! forcenonrequired ) ; /* forbidden by _bt_set_startikey */
if ( _bt_check_rowcompare ( key , tuple , tupnatts , tupdesc , dir ,
forcenonrequired , continuescan ) )
continuescan ) )
continue ;
return false ;
}
@ -3060,8 +3062,7 @@ _bt_check_compare(IndexScanDesc scan, ScanDirection dir,
*/
static bool
_bt_check_rowcompare ( ScanKey skey , IndexTuple tuple , int tupnatts ,
TupleDesc tupdesc , ScanDirection dir ,
bool forcenonrequired , bool * continuescan )
TupleDesc tupdesc , ScanDirection dir , bool * continuescan )
{
ScanKey subkey = ( ScanKey ) DatumGetPointer ( skey - > sk_argument ) ;
int32 cmpresult = 0 ;
@ -3101,11 +3102,7 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
if ( isNull )
{
if ( forcenonrequired )
{
/* treating scan's keys as non-required */
}
else if ( subkey - > sk_flags & SK_BT_NULLS_FIRST )
if ( subkey - > sk_flags & SK_BT_NULLS_FIRST )
{
/*
* Since NULLs are sorted before non - NULLs , we know we have
@ -3159,12 +3156,8 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
*/
Assert ( subkey ! = ( ScanKey ) DatumGetPointer ( skey - > sk_argument ) ) ;
subkey - - ;
if ( forcenonrequired )
{
/* treating scan's keys as non-required */
}
else if ( ( subkey - > sk_flags & SK_BT_REQFWD ) & &
ScanDirectionIsForward ( dir ) )
if ( ( subkey - > sk_flags & SK_BT_REQFWD ) & &
ScanDirectionIsForward ( dir ) )
* continuescan = false ;
else if ( ( subkey - > sk_flags & SK_BT_REQBKWD ) & &
ScanDirectionIsBackward ( dir ) )
@ -3216,7 +3209,7 @@ _bt_check_rowcompare(ScanKey skey, IndexTuple tuple, int tupnatts,
break ;
}
if ( ! result & & ! forcenonrequired )
if ( ! result )
{
/*
* Tuple fails this qual . If it ' s a required qual for the current