Postgres - статьи



              

Интерфейсные функции


Для упрощения описания в объявлениях функций используется псевдосинтаксис, реальные определения должны соответствовать . В последующей секции рассматривается пример реализации R-tree.

GISTENTRY * compress( GISTENTRY * in )
GISTENTRY * decompress( GISTENTRY * in )

Эти функции отвечают за компрессию/декомпрессию ключей. Если функция меняет значение ключа (key), то:

она должна возвращать заново palloc'оченное значение как структуры, так и ключа( если ключ передавался по ссылке, pass-by-reference).

  • скопировать в новую структуру значения rel, page, offset, leafkey.
  • правильно установить bytes.
  • не менять старую структуру (in), и не делать pfree ни in, ни in->key
  • При вызове compress in->leafkey=TRUE, если значение в key взято из таблицы, а не из индекса. В этом случае, если эта функция нетривиальна, даже если не меняется ключ, надо обязательно определить in->bytes и установить in->leafkey=FALSE.

    Всем остальным интерфейсным функциям ключи передаются только после обработки ключа функции decompress.

  • bool equal( Datum a, Datum b)

    Возвращает TRUE только в случае a==b.

  • float * penalty( GISTENTRY *origentry, GISTENTRY *newentry, float *result)

    Вычисляет меру увеличения origentry->key при его объединении с newentry->key. Вычисленное значение должна поместить в *result и вернуть указатель на него.

    Если эта функция не помечена как isstrict, то key может быть NULL. В противном случае, функция не вызывается и считается, что мера увеличения равно 0, если хотя бы один из параметров имеет значение NULL.

  • Datum union(GistEntryVector *entryvec, int *size)

    Выполняет объединение (union) ключей. Возвращает объединенный ключ (не GISTENTRY!). В *size помещает размер результирующего ключа в байтах. Структура GistEntryVector:

    typedef struct { int32 n; /* количество элементов в поле vector*/ GISTENTRY vector[1]; } GistEntryVector;

    Массив никогда не содержит NULL элементов.

  • bool consistent( GISTENTRY *entry, Datum query, StrategyNumber strategy )

    Проверяет ключ (entry->key) на соответствие запросу (query) с помощью операции с номером strategy и возвращает TRUE в случае соответствия, или FALSE в противном.




    Содержание  Назад  Вперед