/* * The GiST consistent method */ bool gbt_var_consistent(GBT_VARKEY_R *key, const void *query, StrategyNumber strategy, Oid collation, bool is_leaf, const gbtree_vinfo *tinfo) { bool retval = FALSE; switch (strategy) { case BTLessEqualStrategyNumber: if (is_leaf) retval = (*tinfo->f_ge) (query, key->lower, collation); else retval = (*tinfo->f_cmp) (query, key->lower, collation) >= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BTLessStrategyNumber: if (is_leaf) retval = (*tinfo->f_gt) (query, key->lower, collation); else retval = (*tinfo->f_cmp) (query, key->lower, collation) >= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BTEqualStrategyNumber: if (is_leaf) retval = (*tinfo->f_eq) (query, key->lower, collation); else retval = ((*tinfo->f_cmp) (key->lower, query, collation) <= 0 && (*tinfo->f_cmp) (query, key->upper, collation) <= 0) || gbt_var_node_pf_match(key, query, tinfo); break; case BTGreaterStrategyNumber: if (is_leaf) retval = (*tinfo->f_lt) (query, key->upper, collation); else retval = (*tinfo->f_cmp) (query, key->upper, collation) <= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BTGreaterEqualStrategyNumber: if (is_leaf) retval = (*tinfo->f_le) (query, key->upper, collation); else retval = (*tinfo->f_cmp) (query, key->upper, collation) <= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BtreeGistNotEqualStrategyNumber: retval = !((*tinfo->f_eq) (query, key->lower, collation) && (*tinfo->f_eq) (query, key->upper, collation)); break; default: retval = FALSE; } return retval; }
/* * The GiST consistent method */ bool gbt_var_consistent( GBT_VARKEY_R *key, const void *query, const StrategyNumber *strategy, bool is_leaf, const gbtree_vinfo *tinfo ) { bool retval = FALSE; switch (*strategy) { case BTLessEqualStrategyNumber: if (is_leaf) retval = (*tinfo->f_ge) (query, (void *) key->lower); else retval = (*tinfo->f_cmp) ((bytea *) query, key->lower) >= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BTLessStrategyNumber: if (is_leaf) retval = (*tinfo->f_gt) (query, (void *) key->lower); else retval = (*tinfo->f_cmp) ((bytea *) query, key->lower) >= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BTEqualStrategyNumber: if (is_leaf) retval = (*tinfo->f_eq) (query, (void *) key->lower); else retval = ( ( (*tinfo->f_cmp) (key->lower, (bytea *) query) <= 0 && (*tinfo->f_cmp) ((bytea *) query, (void *) key->upper) <= 0 ) || gbt_var_node_pf_match(key, query, tinfo) ); break; case BTGreaterStrategyNumber: if (is_leaf) retval = (*tinfo->f_lt) (query, (void *) key->upper); else retval = (*tinfo->f_cmp) ((bytea *) query, key->upper) <= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BTGreaterEqualStrategyNumber: if (is_leaf) retval = (*tinfo->f_le) (query, (void *) key->upper); else retval = (*tinfo->f_cmp) ((bytea *) query, key->upper) <= 0 || gbt_var_node_pf_match(key, query, tinfo); break; case BtreeGistNotEqualStrategyNumber: retval = ! ((*tinfo->f_eq) (query, key->lower) && (*tinfo->f_eq) (query, key->upper)); break; default: retval = FALSE; } return (retval); }