helpers.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "helpers.h"
  2. #include <library/cpp/yson/writer.h>
  3. #include <library/cpp/yson/node/node_visitor.h>
  4. #include <util/string/ascii.h>
  5. #include <util/generic/hash_set.h>
  6. namespace NYql {
  7. namespace NPureCalc {
  8. namespace NPrivate {
  9. NYT::TNode GetSchema(
  10. const TVector<TString>& fields,
  11. const TVector<TString>& optionalFields
  12. ) {
  13. THashSet<TString> optionalFilter {
  14. optionalFields.begin(), optionalFields.end()
  15. };
  16. NYT::TNode members {NYT::TNode::CreateList()};
  17. auto addField = [&] (const TString& name, const TString& type) {
  18. auto typeNode = NYT::TNode::CreateList()
  19. .Add("DataType")
  20. .Add(type);
  21. if (optionalFilter.contains(name)) {
  22. typeNode = NYT::TNode::CreateList()
  23. .Add("OptionalType")
  24. .Add(typeNode);
  25. }
  26. members.Add(NYT::TNode::CreateList()
  27. .Add(name)
  28. .Add(typeNode)
  29. );
  30. };
  31. for (const auto& field: fields) {
  32. TString type {field};
  33. type[0] = AsciiToUpper(type[0]);
  34. addField(field, type);
  35. }
  36. NYT::TNode schema = NYT::TNode::CreateList()
  37. .Add("StructType")
  38. .Add(members);
  39. return schema;
  40. }
  41. }
  42. }
  43. }