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


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to