Вынос части запроса в отдельный файл

Механизм для выноса части запроса в отдельный приложенный файл:

  • PRAGMA Library помечает приложенный файл как доступный для импорта.

Export

  • В EXPORT $my_symbol1, $my_symbol2, ...; перечисляется список именованных выражений в библиотеке, доступных для импорта.

Import

  • IMPORT my_library SYMBOLS $my_symbol1, $my_symbol2, ...; делает перечисленные именованные выражения доступными для использования ниже.

Примечание

В библиотеку могут быть вынесены лямбды, действия, именованные подзапросы, константы и выражения, но не подзапросы и не агрегатные функции.

Предупреждение

Файл, на который ссылается PRAGMA Library должен быть приложен к запросу. Использовать для этой цели PRAGMA File нельзя.

Примеры:

my_lib.sql:

$Square = ($x) -> { RETURN $x * $x; };
$Sqrt = ($x) -> { RETURN Math::Sqrt($x); };

-- Агрегационные функции, создаваемые с помощью
-- AggregationFactory, удобно выносить в библиотеку
$Agg_sum = AggregationFactory("SUM");
$Agg_max = AggregationFactory("MAX");

EXPORT $Square, $Sqrt, $Agg_sum, $Agg_max;

Запрос:

PRAGMA Library("my_lib.sql");
IMPORT my_lib SYMBOLS $Square, $Sqrt, $Agg_sum, $Agg_max;
SELECT
  $Square(2), -- 4
  $Sqrt(4);   -- 2

SELECT
  AGGREGATE_BY(x, $Agg_sum), -- 5
  AGGREGATE_BY(x, $Agg_max)  -- 3
FROM (
  SELECT 2 AS x
  UNION ALL
  SELECT 3 AS x
)
Предыдущая
Следующая