aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/tests/s-expressions/suites/Optimizers/VisitOverVisit.yql
blob: 8a0197dd5eb3a00d07d66d1091b94fff9200e586 (plain) (blame)
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
(
#comment
(let config (DataSource 'config))
(let world (Configure! world config 'PureDataSource 'yt))

(let res_sink (DataSink 'result))
(let vt3 (VariantType (TupleType (DataType 'String) (DataType 'String) (DataType 'String))))
(let vt2 (VariantType (TupleType (DataType 'String) (DataType 'String))))
(let v0 (Variant (String 'aaa) '0 vt3))
(let v1 (Variant (String 'bbb) '1 vt3))
(let v2 (Variant (String 'ccc) '2 vt3))
(let list (AsList v0 v1 v2))

(let handler0 (lambda '(x) (Concat (String '0-) x)))
(let handler1 (lambda '(x) (Concat (String '1-) x)))
(let handler2 (lambda '(x) (Concat (String '2-) x)))

(let remap (lambda '(x) (Visit x '0 (lambda '(x) (Variant x '1 vt3)) '1 (lambda '(x) (Variant x '2 vt3)) '2 (lambda '(x) (Variant x '0 vt3)))))
(let def (lambda '(x) (Visit x '0 (lambda '(x) (Variant (Apply handler0 x) '0 vt3)) v1)))
(let reduce (lambda '(x) (Visit x '0 (lambda '(x) (Variant x '0 vt2)) '1 (lambda '(x) (Variant x '0 vt2)) '2 (lambda '(x) (Variant x '1 vt2)))))

(let world (Write! world res_sink (Key) (Map list (lambda '(x) (Visit (Apply remap x) '0 handler0 '1 handler1 '2 handler2))) '('('type))))
(let world (Write! world res_sink (Key) (Map list (lambda '(x) (Visit (Apply def x) '0 handler0 '1 handler1 (String 'def)))) '('('type))))
(let world (Write! world res_sink (Key) (Map list (lambda '(x) (Visit (Apply def x) '0 handler0 (String 'def)))) '('('type))))
(let world (Write! world res_sink (Key) (Map list (lambda '(x) (Visit (Apply reduce x) '0 handler0 '1 handler1))) '('('type))))

(let world (Commit! world res_sink))
(return world)
)