typedefstruct array_iter
{ /* datumptr being NULL or not tells if we have flat or expanded array */
/* Fields used when we have an expanded array */
Datum *datumptr; /* Pointer to Datum array */ bool *isnullptr; /* Pointer to isnull array */
/* Fields used when we have a flat array */ char *dataptr; /* Current spot in the data area */
bits8 *bitmapptr; /* Current byte of the nulls bitmap, or NULL */ int bitmask; /* mask for current bit in nulls bitmap */
} array_iter;
staticinlinevoid
array_iter_setup(array_iter *it, AnyArrayType *a)
{ if (VARATT_IS_EXPANDED_HEADER(a))
{ if (a->xpn.dvalues)
{
it->datumptr = a->xpn.dvalues;
it->isnullptr = a->xpn.dnulls; /* we must fill all fields to prevent compiler warnings */
it->dataptr = NULL;
it->bitmapptr = NULL;
} else
{ /* Work with flat array embedded in the expanded datum */
it->datumptr = NULL;
it->isnullptr = NULL;
it->dataptr = ARR_DATA_PTR(a->xpn.fvalue);
it->bitmapptr = ARR_NULLBITMAP(a->xpn.fvalue);
}
} else
{
it->datumptr = NULL;
it->isnullptr = NULL;
it->dataptr = ARR_DATA_PTR((ArrayType *) a);
it->bitmapptr = ARR_NULLBITMAP((ArrayType *) a);
}
it->bitmask = 1;
}
staticinline Datum
array_iter_next(array_iter *it, bool *isnull, int i, int elmlen, bool elmbyval, char elmalign)
{
Datum ret;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.