PL/Scheme

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

PL/Scheme[1] - это процедурный обработчик языка PostgreSQL для языка программирования Scheme, выпущенного под лицензией BSD. PL/Scheme использует Guile в качестве своего интерпретатора Scheme. При наличии множества встроенных SRFI, структуры GOOPS и полного соответствия R5RS Guile. Вы можете найти некоторые из поддерживаемых функций PL/Scheme в приведенном ниже списке.

Работа с языком[править | править вики-текст]

Список поддерживаемых функций[править | править вики-текст]

  1. Расширяемая поддержка нативного типа даже для еще не созданных типов данных SQL. Поддерживаются также домен, комплекс (т. е. Таблица) и псевдо (запись) типы.
  2. [Вложенные] записи и типы строк поддерживаются как при возвращении типа записи, так и в качестве аргумента процедуры.
  3. SPI функциональность и поддержка триггеров.
  4. Кэширование для энергонезависимых (и не-SRF) процедур для каждой [top] транзакции.
  5. Глобальная поддержка общих переменных.
  6. Поддержка как надежных, так и ненадежных режимов PL.
  7. И любая доступная функция, поддерживаемая Guile (полностью совместимость с R5RS, расширение системной системы, полный доступ к системным вызовам POSIX, поддержка сетей, несколько потоков, динамическая компоновка, интерфейс вызова внешних функций, мощная обработка строк, структура GOOPS, множество встроенных SRFI и могут Другие), естественно, также поставляются с PL/Scheme.

Пример написания функции на PL/Scheme[править | править вики-текст]

CREATE FUNCTION scm_pow(u int, v int)
RETURNS int AS '
(let loop ((v v))
   (if (< v 1) 1 
      (* u (loop (- v 1)))))' 
LANGUAGE plscheme;
test=# SELECT * FROM scm_pow(2, 5);
scm_pow 

Некоторые функции и символы[править | править вики-текст]

spi-execute command [count]

Выполняет указанную команду SQL. Если count равно нулю (или не указан как опция), то команда выполняется для всех строк, к которым она применяется. Если count больше 0, тогда количество строк, для которых будет выполнена команда, ограничено (так же, как в предложении LIMIT). Функция возвращает ассоциативный массив с ключами status, affected-tuples и returns-tuples. При успешном завершении статус будет указывать на один из следующих символов:

  • spi-ok-select
  • spi-ok-select-into
  • spi-ok-delete
  • spi-ok-delete-returning
  • spi-ok-insert
  • spi-ok-insert-returning
  • spi-ok-update
  • spi-ok-update-returning
  • spi-ok-utility

spi-prepare command type

Возвращает план выполнения команды в типе spi-plan (который может быть передан в подготовленный по команде spi-execute позже) по указанным аргументам. Type - это тип указывающих вектор-типов (в строковом формате), используемых в команде.

spi-execute-prepared plan args [count]

Выполняет указанный план (в типе spi-plan, который возвращается из функции spi-prepare) с заданным вектором args. Функция возвращает ассоциативный массив, как и в spi-execute, и работает так же.

report level message [hint]

Функция сообщает об ошибке/исключении с указанным сообщением (и, возможно, подсказкой). Уровень отчета может быть одной из следующих переменных:

  • debug-level
  • log-level
  • info-level
  • notice-level
  • warning-level
  • exception-level

Источник[править | править вики-текст]

Примечания[править | править вики-текст]