Re: Does Type Have = Operator? - Mailing list pgsql-hackers

From Fabrízio de Royes Mello
Subject Re: Does Type Have = Operator?
Date
Msg-id CAFcNs+rPE27Lzrtpd_ZVOWNX0NzYYwDcTaHQ2YKqTagETubKnQ@mail.gmail.com
Whole thread Raw
In response to Does Type Have = Operator?  ("David E. Wheeler" <david@justatheory.com>)
Responses Re: Does Type Have = Operator?  ("David E. Wheeler" <david@justatheory.com>)
List pgsql-hackers


Em terça-feira, 10 de maio de 2016, David E. Wheeler <david@justatheory.com> escreveu:
Hackers,

pgTAP has a function that compares two values of a given type, which it uses for comparing column defaults. It looks like this:

    CREATE OR REPLACE FUNCTION _def_is( TEXT, TEXT, anyelement, TEXT )
    RETURNS TEXT AS $$
    DECLARE
        thing text;
    BEGIN
        IF $1 ~ '^[^'']+[(]' THEN
            -- It's a functional default.
            RETURN is( $1, $3, $4 );
        END IF;

        EXECUTE 'SELECT is('
                 || COALESCE($1, 'NULL' || '::' || $2) || '::' || $2 || ', '
                 || COALESCE(quote_literal($3), 'NULL') || '::' || $2 || ', '
                 || COALESCE(quote_literal($4), 'NULL')
        || ')' INTO thing;
        RETURN thing;
    END;
    $$ LANGUAGE plpgsql;

The is() function does an IS DISTINCT FROM to compare the two values passed to it. This has been working pretty well for years, but one place it doesn’t work is with JSON values. I get:

    LINE 1: SELECT NOT $1 IS DISTINCT FROM $2
                          ^
    HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
    QUERY:  SELECT NOT $1 IS DISTINCT FROM $2

This makes sense, of course, and I could fix it by comparing text values instead of json values when the values are JSON. But of course the lack of a = operator is not limited to JSON. So I’m wondering if there’s an interface at the SQL level to tell me whether a type has an = operator? That way I could always use text values in those situations.


Searching for the operator in pg_operator catalog isn't enought?

Regards,



--
Fabrízio de Royes Mello
Consultoria/Coaching PostgreSQL

pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: asynchronous and vectorized execution
Next
From: Andres Freund
Date:
Subject: Re: HeapTupleSatisfiesToast() busted? (was atomic pin/unpin causing errors)