> On Mar 5, 2019, at 3:26 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> 
> Paul Ramsey <pram...@cleverelephant.ca> writes:
>> Thanks for the patch, I’ve applied and smoothed and taken your advice on 
>> schema-qualified lookups as well.
> 
> Hm, I think your addition of this bit is wrong:
> 
> +                    /*
> +                    * Arguments were swapped to put the index value on the
> +                    * left, so we need the commutated operator for
> +                    * the OpExpr
> +                    */
> +                    if (swapped)
> +                    {
> +                        oproid = get_commutator(oproid);
> +                        if (!OidIsValid(oproid))
>                         PG_RETURN_POINTER((Node *)NULL);
> +                    }
> 
> We already did the operator lookup with the argument types in the desired
> order, so this is introducing an extra swap.  The only reason it appears
> to work, I suspect, is that all your index operators are self-commutators.

I was getting regression failures until I re-swapped the operator… 

  SELEcT * FROM foobar WHERE ST_Within(ConstA, VarB)

Place the indexed operator in the Left, now:

  Left == VarB
  Right == ConstA
  Strategy == Within
  get_opfamily_member(opfamilyoid, Left, Right, Within)

Unless we change the strategy number when we assign the left/right we’re 
looking up an operator for “B within A”, so we’re backwards.

I feel OK about it, if for no other reason than it passes all the tests :)

P

Reply via email to