aboutsummaryrefslogtreecommitdiffstats
path: root/yql/tools/yqlrun/http/yql_servlet.cpp
blob: 8a17122af9a2f8ac6e1c4e25b6c19eb1d76e5009 (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
#include "yql_servlet.h"

#include <yql/essentials/public/issue/yql_issue.h>

#include <util/string/builder.h>


namespace NYql {
namespace NHttp {

void TYqlAction::WriteStatus(bool success, const TIssues& errors) const {
    Writer.Write("succeeded", success);
    static const TVector<TString> issueQueue = {"errors", "warnings", "infos"};
    static const THashMap<NYql::TSeverityIds::ESeverityId, TStringBuf> severityMap = {
        {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_FATAL, "errors"},
        {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_ERROR, "errors"},
        {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_WARNING, "warnings"},
        {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_INFO, "infos"}
    };

    auto writeIssues = [this](const TString& severity, const TIssues& errors) {
        Writer.Write(severity);
        Writer.OpenArray();

        for (const auto& topIssue: errors) {
            if (severity != severityMap.at(topIssue.Severity)) {
                continue;
            }
            WalkThroughIssues(topIssue, false, [this, severity](const TIssue& issue, ui16 level) {
                TStringBuilder sb;
                sb << TString(level, '>') << issue;
                Cerr << sb << Endl;
                Writer.Write(sb);
            });
        }

        Writer.CloseArray();
    };

    for (auto severety: issueQueue) {
        writeIssues(severety, errors);
    }
}

void TYqlAction::WriteAstTree(const TAstNode* node) {
    if (node == nullptr) return;

    Writer.OpenMap();
    if (node->IsAtom()) {
        Writer.Write(TStringBuf("type"), TStringBuf("atom"));
        Writer.Write(TStringBuf("content"), node->GetContent());
        Writer.Write(TStringBuf("flags"), node->GetFlags());
    } else if (node->IsList()) {
        Writer.Write(TStringBuf("type"), TStringBuf("list"));
        Writer.Write(TStringBuf("content"), TStringBuf("( )"));
        if (node->GetChildrenCount() > 0) {
            Writer.Write(TStringBuf("children"));
            Writer.OpenArray();
            for (ui32 index = 0; index < node->GetChildrenCount(); ++index) {
                WriteAstTree(node->GetChild(index));
            }
            Writer.CloseArray();
        }
    }
    Writer.CloseMap();
}

} // namspace NNttp
} // namspace NYql