Skip to content

Commit 89627eb

Browse files
Vadim Averinblinkov
andauthored
Update docs for Variant builtins (#11296)
Co-authored-by: Ivan Blinkov <ivan@ydb.tech>
1 parent 1a467b1 commit 89627eb

File tree

2 files changed

+122
-0
lines changed
  • ydb/docs
    • en/core/yql/reference/yql-core/builtins/_includes/basic
    • ru/core/yql/reference/yql-core/builtins/_includes/basic

2 files changed

+122
-0
lines changed

ydb/docs/en/core/yql/reference/yql-core/builtins/_includes/basic/variant.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,64 @@ SELECT
3434
AsVariant(6, "foo") as VariantValue
3535
```
3636

37+
## Visit, VisitOrDefault {#visit}
38+
39+
Processes the possible values of a variant over a structure or tuple using the provided handler functions for each field/element of the variant.
40+
41+
### Signature
42+
43+
```yql
44+
Visit(Variant<key1: K1, key2: K2, ...>, K1->R AS key1, K2->R AS key2, ...)->R
45+
Visit(Variant<K1, K2, ...>, K1->R, K2->R, ...)->R
46+
47+
VisitOrDefault(Variant<K1, K2, ...>{Flags:AutoMap}, [K1->R, [K2->R, ...]], R)->R
48+
VisitOrDefault(Variant<key1: K1, key2: K2, ...>{Flags:AutoMap}, [K1->R AS key1, [K2->R AS key2, ...]], R)->R
49+
```
50+
51+
### Arguments
52+
53+
* For a variant over structure: accepts the variant as the positional argument and named arguments (handlers) corresponding to each field of the variant.
54+
* For a variant over tuple: accepts the variant and handlers for each element of the variant as positional arguments.
55+
* `VisitOrDefault` includes an additional positional argument for the default value, enabling the omission of certain handlers.
56+
57+
### Example
58+
59+
```yql
60+
$vartype = Variant<num: Int32, flag: Bool, str: String>;
61+
$handle_num = ($x) -> { return 2 * $x; };
62+
$handle_flag = ($x) -> { return If($x, 200, 10); };
63+
$handle_str = ($x) -> { return Unwrap(CAST(LENGTH($x) AS Int32)); };
64+
65+
$visitor = ($var) -> { return Visit($var, $handle_num AS num, $handle_flag AS flag, $handle_str AS str); };
66+
SELECT
67+
$visitor(Variant(5, "num", $vartype)), -- 10
68+
$visitor(Just(Variant(True, "flag", $vartype))), -- Just(200)
69+
$visitor(Just(Variant("somestr", "str", $vartype))), -- Just(7)
70+
$visitor(Nothing(OptionalType($vartype))), -- Nothing(Optional<Int32>)
71+
$visitor(NULL) -- NULL
72+
;
73+
```
74+
75+
## VariantItem {#variantitem}
76+
77+
Returns the value of a homogeneous variant (i.e., a variant containing fields/elements of the same type).
78+
79+
### Signature
80+
81+
```yql
82+
VariantItem(Variant<key1: K, key2: K, ...>{Flags:AutoMap})->K
83+
VariantItem(Variant<K, K, ...>{Flags:AutoMap})->K
84+
```
85+
86+
### Example
87+
88+
```yql
89+
$vartype1 = Variant<num1: Int32, num2: Int32, num3: Int32>;
90+
SELECT
91+
VariantItem(Variant(7, "num2", $vartype1)), -- 7
92+
VariantItem(Just(Variant(5, "num1", $vartype1))), -- Just(5)
93+
VariantItem(Nothing(OptionalType($vartype1))), -- Nothing(Optional<Int32>)
94+
VariantItem(NULL) -- NULL
95+
;
96+
```
97+

ydb/docs/ru/core/yql/reference/yql-core/builtins/_includes/basic/variant.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,64 @@ SELECT
4646
AsVariant(6, "foo") as VariantValue
4747
```
4848

49+
## Visit, VisitOrDefault {#visit}
50+
51+
Обрабатывает возможные значения варианта, представленного структурой или кортежем, с использованием предоставленных функций-обработчиков для каждого из его полей/элементов.
52+
53+
### Сигнатура
54+
55+
```yql
56+
Visit(Variant<key1: K1, key2: K2, ...>, K1->R AS key1, K2->R AS key2, ...)->R
57+
Visit(Variant<K1, K2, ...>, K1->R, K2->R, ...)->R
58+
59+
VisitOrDefault(Variant<K1, K2, ...>{Flags:AutoMap}, [K1->R, [K2->R, ...]], R)->R
60+
VisitOrDefault(Variant<key1: K1, key2: K2, ...>{Flags:AutoMap}, [K1->R AS key1, [K2->R AS key2, ...]], R)->R
61+
```
62+
63+
### Аргументы
64+
65+
* Для варианта над структурой функция принимает сам вариант в качестве позиционного аргумента и по одному именованному аргументу-обработчику для каждого поля этой структуры.
66+
* Для варианта над кортежем функция принимает сам вариант и по одному обработчику на каждый элемент кортежа в качестве позиционных аргументов.
67+
* Модификация `VisitOrDefault` принимает дополнительный последний позиционный аргумент, представляющий значение по умолчанию, и позволяет не указывать некоторые обработчики.
68+
69+
### Пример
70+
71+
```yql
72+
$vartype = Variant<num: Int32, flag: Bool, str: String>;
73+
$handle_num = ($x) -> { return 2 * $x; };
74+
$handle_flag = ($x) -> { return If($x, 200, 10); };
75+
$handle_str = ($x) -> { return Unwrap(CAST(LENGTH($x) AS Int32)); };
76+
77+
$visitor = ($var) -> { return Visit($var, $handle_num AS num, $handle_flag AS flag, $handle_str AS str); };
78+
SELECT
79+
$visitor(Variant(5, "num", $vartype)), -- 10
80+
$visitor(Just(Variant(True, "flag", $vartype))), -- Just(200)
81+
$visitor(Just(Variant("somestr", "str", $vartype))), -- Just(7)
82+
$visitor(Nothing(OptionalType($vartype))), -- Nothing(Optional<Int32>)
83+
$visitor(NULL) -- NULL
84+
;
85+
```
86+
87+
## VariantItem {#variantitem}
88+
89+
Возвращает значение гомогенного варианта (т.е. содержащего поля/элементы одного типа).
90+
91+
### Сигнатура
92+
93+
```yql
94+
VariantItem(Variant<key1: K, key2: K, ...>{Flags:AutoMap})->K
95+
VariantItem(Variant<K, K, ...>{Flags:AutoMap})->K
96+
```
97+
98+
### Пример
99+
100+
```yql
101+
$vartype1 = Variant<num1: Int32, num2: Int32, num3: Int32>;
102+
SELECT
103+
VariantItem(Variant(7, "num2", $vartype1)), -- 7
104+
VariantItem(Just(Variant(5, "num1", $vartype1))), -- Just(5)
105+
VariantItem(Nothing(OptionalType($vartype1))), -- Nothing(Optional<Int32>)
106+
VariantItem(NULL) -- NULL
107+
;
108+
```
109+

0 commit comments

Comments
 (0)