1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
# name: test/sql/function/list/lambdas/rhs_parameters.test
# description: Test nested lambda parameters in the rhs of lambda expressions
# group: [lambdas]
statement ok
SET lambda_syntax='DISABLE_SINGLE_ARROW'
# Issue 5795.
query I
SELECT list_apply([1,2], lambda x: list_apply([3,4], lambda y: {'x': x, 'y': y})) AS bug;
----
[[{'x': 1, 'y': 3}, {'x': 1, 'y': 4}], [{'x': 2, 'y': 3}, {'x': 2, 'y': 4}]]
# Test arbitrary other nested lambdas.
query I
SELECT list_transform([1,2], lambda x: list_transform([3,4], lambda y: x + y));
----
[[4, 5], [5, 6]]
query I
SELECT list_transform([1,2], lambda x:
list_transform([3,4], lambda y:
list_transform([5,6], lambda z: z + y + x)));
----
[[[9, 10], [10, 11]], [[10, 11], [11, 12]]]
query I
SELECT list_transform([1,2,3,4], lambda x: list_filter([4,5,1,2,3,3,3,5,1,4], lambda y: y != x))
----
[[4, 5, 2, 3, 3, 3, 5, 4], [4, 5, 1, 3, 3, 3, 5, 1, 4], [4, 5, 1, 2, 5, 1, 4], [5, 1, 2, 3, 3, 3, 5, 1]]
query I
SELECT list_transform([[2, 4, 6]], lambda x: list_transform(x, lambda y: list_sum([y] || x)))
----
[[14, 16, 18]]
query I
SELECT list_apply(range(5), lambda x: {x:x, w:list_filter(range(5), lambda y: abs(y-x) < 2)});
----
[{'x': 0, 'w': [0, 1]}, {'x': 1, 'w': [0, 1, 2]}, {'x': 2, 'w': [1, 2, 3]}, {'x': 3, 'w': [2, 3, 4]}, {'x': 4, 'w': [3, 4]}]
query I
SELECT list_apply(range(8), lambda x: list_aggr(list_apply(range(8),
lambda y: list_element('▁▂▃▄▅▆▇█', 1+abs(y-x))), 'string_agg', ''));
----
[▁▂▃▄▅▆▇█, ▂▁▂▃▄▅▆▇, ▃▂▁▂▃▄▅▆, ▄▃▂▁▂▃▄▅, ▅▄▃▂▁▂▃▄, ▆▅▄▃▂▁▂▃, ▇▆▅▄▃▂▁▂, █▇▆▅▄▃▂▁]
statement ok
CREATE TABLE lists (i integer, v varchar[])
statement ok
INSERT INTO lists VALUES (1, ['a', 'b', 'c']), (8, NULL), (3, ['duck', 'db', 'tests']), (NULL, NULL), (NULL, ['lambdas!'])
query I
SELECT list_transform(v, lambda x: list_transform(v, lambda y: x || y)) FROM lists
----
[[aa, ab, ac], [ba, bb, bc], [ca, cb, cc]]
NULL
[[duckduck, duckdb, ducktests], [dbduck, dbdb, dbtests], [testsduck, testsdb, teststests]]
NULL
[[lambdas!lambdas!]]
query I
SELECT list_transform(v, lambda x: list_transform(v, lambda y: list_transform(v, lambda z: x || y || z))) FROM lists
----
[[[aaa, aab, aac], [aba, abb, abc], [aca, acb, acc]], [[baa, bab, bac], [bba, bbb, bbc], [bca, bcb, bcc]], [[caa, cab, cac], [cba, cbb, cbc], [cca, ccb, ccc]]]
NULL
[[[duckduckduck, duckduckdb, duckducktests], [duckdbduck, duckdbdb, duckdbtests], [ducktestsduck, ducktestsdb, duckteststests]], [[dbduckduck, dbduckdb, dbducktests], [dbdbduck, dbdbdb, dbdbtests], [dbtestsduck, dbtestsdb, dbteststests]], [[testsduckduck, testsduckdb, testsducktests], [testsdbduck, testsdbdb, testsdbtests], [teststestsduck, teststestsdb, teststeststests]]]
NULL
[[[lambdas!lambdas!lambdas!]]]
query I
SELECT list_transform(v, lambda x: [list_transform([':-)'], lambda y: x || y || '-#lambdaLove')]
|| list_filter(list_transform(['B-)'], lambda k: [k] || [x]), lambda j: list_contains(j, 'a') or list_contains(j, 'duck')))
FROM lists
----
[[['a:-)-#lambdaLove'], ['B-)', a]], [['b:-)-#lambdaLove']], [['c:-)-#lambdaLove']]]
NULL
[[['duck:-)-#lambdaLove'], ['B-)', duck]], [['db:-)-#lambdaLove']], [['tests:-)-#lambdaLove']]]
NULL
[[['lambdas!:-)-#lambdaLove']]]
statement ok
CREATE TABLE no_overwrite AS SELECT [range, range + 1] l FROM range(3);
query II
SELECT l, [[{'x+y': x + y, 'x': x, 'y': y, 'l': l} for y in [42, 43]] for x in l] FROM no_overwrite;
----
[0, 1] [[{'x+y': 42, 'x': 0, 'y': 42, 'l': [0, 1]}, {'x+y': 43, 'x': 0, 'y': 43, 'l': [0, 1]}], [{'x+y': 43, 'x': 1, 'y': 42, 'l': [0, 1]}, {'x+y': 44, 'x': 1, 'y': 43, 'l': [0, 1]}]]
[1, 2] [[{'x+y': 43, 'x': 1, 'y': 42, 'l': [1, 2]}, {'x+y': 44, 'x': 1, 'y': 43, 'l': [1, 2]}], [{'x+y': 44, 'x': 2, 'y': 42, 'l': [1, 2]}, {'x+y': 45, 'x': 2, 'y': 43, 'l': [1, 2]}]]
[2, 3] [[{'x+y': 44, 'x': 2, 'y': 42, 'l': [2, 3]}, {'x+y': 45, 'x': 2, 'y': 43, 'l': [2, 3]}], [{'x+y': 45, 'x': 3, 'y': 42, 'l': [2, 3]}, {'x+y': 46, 'x': 3, 'y': 43, 'l': [2, 3]}]]
|