Re: How to compare different datums within from a tuple? - Mailing list pgsql-hackers

From Peter Moser
Subject Re: How to compare different datums within from a tuple?
Date
Msg-id 55CB0D8E.4010606@gmail.com
Whole thread Raw
In response to Re: How to compare different datums within from a tuple?  (Anastasia Lubennikova <lubennikovaav@gmail.com>)
List pgsql-hackers

Am 11.08.2015 um 13:41 schrieb Anastasia Lubennikova:
>     Can someone tell me, how I can compare two datum fields, when I do
>     not know the data type in advance inside an executor function?
>
>
> In a nutshell, there is no way to compare Datums.
> Datum is an abstact data type. It's the backend internal representation
> of a single value of any SQL data type.
> The code using Datum has to know which type it is, since the Datum
> itself doesn't contain that information.
>
>     For example, "x less than y" where x and y are of various types that
>     form intervals. I have found the method ExecTuplesMatch, but it is
>     only for equality comparison, I think. Another one is
>     ApplySortComparator... maybe that's the correct way to go?
>
>     Some code to make things clearer...
>
>     Datum x = heap_getattr(out->tts_tuple,
>                      node->xpos,
>                      out->tts_tupleDescriptor,
>                      &isNull1);
>     Datum y = slot_getattr(curr, node->ypos, &isNull2);
>
>     if (compareDatumWithCorrectMethod(x,y) < 0)
>     {
>       /* do something */
>     }
>
>     Thx,
>     Peter
>
>
>     --
>     Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org
>     <mailto:pgsql-hackers@postgresql.org>)
>     To make changes to your subscription:
>     http://www.postgresql.org/mailpref/pgsql-hackers
>
>
> Maybe you can use DatumGetXXX function to extract value. For example,
> DatumGetInt32.
> <http://doxygen.postgresql.org/postgres_8h.html#aacbc8a3ac6d52d85feaf0b7ac1b1160c>
> --
> Best regards,
> Lubennikova Anastasia

I did this with another column, that has always the result of 
row_number() as content, which I think will be fine when I use 
DatumGetInt32.

Thanks,
Peter



pgsql-hackers by date:

Previous
From: Marko Tiikkaja
Date:
Subject: Re: PL/pgSQL, RAISE and error context
Next
From: Pavel Stehule
Date:
Subject: Re: PL/pgSQL, RAISE and error context