aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/public/purecalc/ut/fake_spec.cpp
blob: 8acdbcfb3474c9505475e16629a34a9e5e903fd5 (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
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
#include "fake_spec.h"

namespace NYql {
    namespace NPureCalc {
        NYT::TNode MakeFakeSchema(bool pg) {
            auto itemType = NYT::TNode::CreateList();
            itemType.Add(pg ? "PgType" : "DataType");
            itemType.Add(pg ? "int4" : "Int32");

            auto itemNode = NYT::TNode::CreateList();
            itemNode.Add("Name");
            itemNode.Add(std::move(itemType));

            auto items = NYT::TNode::CreateList();
            items.Add(std::move(itemNode));

            auto schema = NYT::TNode::CreateList();
            schema.Add("StructType");
            schema.Add(std::move(items));

            return schema;
        }

        TFakeInputSpec FakeIS(ui32 inputsNumber, bool pg) {
            auto spec = TFakeInputSpec();
            spec.Schemas = TVector<NYT::TNode>(inputsNumber, MakeFakeSchema(pg));
            return spec;
        }

        TFakeOutputSpec FakeOS(bool pg) {
            auto spec = TFakeOutputSpec();
            spec.Schema = MakeFakeSchema(pg);
            return spec;
        }

        NYT::TNode CreateTypeNode(const TString& fieldType) {
            return NYT::TNode::CreateList()
                .Add("DataType")
                .Add(fieldType);
        }

        NYT::TNode CreateOptionalTypeNode(const TString& fieldType) {
            return NYT::TNode::CreateList()
                .Add("OptionalType")
                .Add(CreateTypeNode(fieldType));
        }

        void AddField(NYT::TNode& node, const TString& fieldName, const TString& fieldType) {
            node.Add(
                NYT::TNode::CreateList()
                    .Add(fieldName)
                    .Add(CreateOptionalTypeNode(fieldType))
            );
        }

        NYT::TNode MakeFakeStructSchema() {
            auto structMembers = NYT::TNode::CreateList();
            AddField(structMembers, "Id", "Uint32");
            AddField(structMembers, "Name", "Utf8");
            AddField(structMembers, "Body", "String");

            auto rootMembers = NYT::TNode::CreateList();
            rootMembers.Add(
                NYT::TNode::CreateList()
                    .Add("_r")
                    .Add(NYT::TNode::CreateList()
                        .Add("StructType")
                        .Add(std::move(structMembers)))
            );

            return NYT::TNode::CreateList()
                .Add("StructType")
                .Add(std::move(rootMembers));
        }

        TFakeOutputSpec FakeStructOS() {
            auto spec = TFakeOutputSpec();
            spec.Schema = MakeFakeStructSchema();
            return spec;
        }
    }
}