how correctly detoast a Datum value?

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема how correctly detoast a Datum value?
Дата
Msg-id AANLkTimb5uNhtL_-nOE-xFWOrceXgrGdF1sJ1OapsTKx@mail.gmail.com
обсуждение исходный текст
Список pgsql-hackers
Hello

I try to explicitly detoast a plpgsql var, but I this code breaks a content.

what is wrong?
       switch (datum->dtype)       {               case PLPGSQL_DTYPE_VAR:                       {
        PLpgSQL_var *var = (PLpgSQL_var *) datum;
 
                               *typeid = var->datatype->typoid;                               *typetypmod =
var->datatype->atttypmod;                              *isnull = var->isnull;
 
                               /*.                                * explicitly detoasting a possible
toasted values,                                * should to protect us under repeated
detoasting.                                * and decomprimiting                                */
       if (!*isnull &&
 
!var->datatype->typbyval && var->datatype->typlen == -1)                               {
      struct varlena *datum =
 
PG_DETOAST_DATUM(var->value);
                                       if ((Pointer) datum !=
DatumGetPointer(var->value))                                       {
free_var(var);                                              var->value =
 
PointerGetDatum(datum);                                       }                                       *value =
var->value;                              }                               else
*value= var->value;
 
                               break;                       }

Regards

Pavel Stehule


В списке pgsql-hackers по дате отправления:

Предыдущее
От: David Fetter
Дата:
Сообщение: Re: UNNEST ... WITH ORDINALITY (AND POSSIBLY OTHER STUFF)
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: UNNEST ... WITH ORDINALITY (AND POSSIBLY OTHER STUFF)