yql_servlet.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "yql_servlet.h"
  2. #include <yql/essentials/public/issue/yql_issue.h>
  3. #include <util/string/builder.h>
  4. namespace NYql {
  5. namespace NHttp {
  6. void TYqlAction::WriteStatus(bool success, const TIssues& errors) const {
  7. Writer.Write("succeeded", success);
  8. static const TVector<TString> issueQueue = {"errors", "warnings", "infos"};
  9. static const THashMap<NYql::TSeverityIds::ESeverityId, TStringBuf> severityMap = {
  10. {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_FATAL, "errors"},
  11. {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_ERROR, "errors"},
  12. {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_WARNING, "warnings"},
  13. {TSeverityIds::ESeverityId::TSeverityIds_ESeverityId_S_INFO, "infos"}
  14. };
  15. auto writeIssues = [this](const TString& severity, const TIssues& errors) {
  16. Writer.Write(severity);
  17. Writer.OpenArray();
  18. for (const auto& topIssue: errors) {
  19. if (severity != severityMap.at(topIssue.Severity)) {
  20. continue;
  21. }
  22. WalkThroughIssues(topIssue, false, [this, severity](const TIssue& issue, ui16 level) {
  23. TStringBuilder sb;
  24. sb << TString(level, '>') << issue;
  25. Cerr << sb << Endl;
  26. Writer.Write(sb);
  27. });
  28. }
  29. Writer.CloseArray();
  30. };
  31. for (auto severety: issueQueue) {
  32. writeIssues(severety, errors);
  33. }
  34. }
  35. void TYqlAction::WriteAstTree(const TAstNode* node) {
  36. if (node == nullptr) return;
  37. Writer.OpenMap();
  38. if (node->IsAtom()) {
  39. Writer.Write(TStringBuf("type"), TStringBuf("atom"));
  40. Writer.Write(TStringBuf("content"), node->GetContent());
  41. Writer.Write(TStringBuf("flags"), node->GetFlags());
  42. } else if (node->IsList()) {
  43. Writer.Write(TStringBuf("type"), TStringBuf("list"));
  44. Writer.Write(TStringBuf("content"), TStringBuf("( )"));
  45. if (node->GetChildrenCount() > 0) {
  46. Writer.Write(TStringBuf("children"));
  47. Writer.OpenArray();
  48. for (ui32 index = 0; index < node->GetChildrenCount(); ++index) {
  49. WriteAstTree(node->GetChild(index));
  50. }
  51. Writer.CloseArray();
  52. }
  53. }
  54. Writer.CloseMap();
  55. }
  56. } // namspace NNttp
  57. } // namspace NYql