Функции для работы со структурами
ExpandStruct
Добавление одного или нескольких новых полей в структуру.
В случае возникновения дублей в наборе полей будет возвращена ошибка.
Аргументы:
- В первый аргумент передается исходная структура для расширения.
- Все остальные аргументы должны быть именованными, каждый аргумент добавляет новое поле и имя аргумента используется в роли имени поля (по аналогии с AsStruct).
Примеры
$struct = AsStruct(1 AS a);
SELECT
ExpandStruct(
$struct,
2 AS b,
"3" AS c
) AS abc;
AddMember
Добавление одного нового поля в структуру. Если необходимо добавление нескольких полей, предпочтительнее использовать ExpandStruct.
В случае возникновения дублей в наборе полей будет возвращена ошибка.
Аргументы:
- Исходная структура;
- Имя нового поля;
- Значение нового поля.
Примеры
$struct = AsStruct(1 AS a);
SELECT
AddMember(
$struct,
"b",
2
) AS ab;
RemoveMember
Удаление поля из структуры.
Если указанного поля не существовало, будет возвращена ошибка.
Аргументы:
- Исходная структура;
- Имя поля.
Примеры
$struct = AsStruct(1 AS a, 2 AS b);
SELECT
RemoveMember(
$struct,
"b"
) AS a;
ForceRemoveMember
Удаление поля из структуры.
Если указанного поля не существовало, в отличии от RemoveMember ошибка возвращена не будет.
Аргументы:
- Исходная структура;
- Имя поля.
Примеры
$struct = AsStruct(1 AS a, 2 AS b);
SELECT
ForceRemoveMember(
$struct,
"c"
) AS ab;
CombineMembers
Объединение полей нескольких новых структур в новую структуру.
В случае возникновения дублей в результирующем наборе полей будет возвращена ошибка.
Аргументы:
- Две и более структуры.
Примеры
$struct1 = AsStruct(1 AS a, 2 AS b);
$struct2 = AsStruct(3 AS c);
SELECT
CombineMembers(
$struct1,
$struct2
) AS abc;
FlattenMembers
Объединение полей нескольких новых структур в новую структуру с поддержкой префиксов.
В случае возникновения дублей в результирующем наборе полей будет возвращена ошибка.
Аргументы:
- Два и более кортежа из двух элементов: префикс и структура.
Примеры
$struct1 = AsStruct(1 AS a, 2 AS b);
$struct2 = AsStruct(3 AS c);
SELECT
FlattenMembers(
AsTuple("foo", $struct1), -- fooa, foob
AsTuple("bar", $struct2) -- barc
) AS abc;