list_builtin.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #pragma once
  2. #include "node.h"
  3. #include "context.h"
  4. #include <yql/essentials/ast/yql_type_string.h>
  5. #include <library/cpp/charset/ci_string.h>
  6. #include <util/string/builder.h>
  7. #include <util/string/cast.h>
  8. #include <util/string/util.h>
  9. using namespace NYql;
  10. namespace NSQLTranslationV1 {
  11. class TListBuiltin: public TCallNode {
  12. public:
  13. TListBuiltin(TPosition pos,
  14. const TString& opName,
  15. const TVector<TNodePtr>& args)
  16. : TCallNode(pos, opName, args.size(), args.size(), args)
  17. , OpName(opName)
  18. , Args(args)
  19. {}
  20. bool DoInit(TContext& ctx, ISource* src) override = 0;
  21. TAstNode* Translate(TContext& ctx) const override;
  22. protected:
  23. const TString OpName;
  24. TVector<TNodePtr> Args;
  25. TNodePtr Node;
  26. inline TNodePtr GetIdentityLambda();
  27. };
  28. class TListSortBuiltin final: public TListBuiltin {
  29. public:
  30. TListSortBuiltin(TPosition pos, const TVector<TNodePtr>& args, bool asc)
  31. : TListBuiltin(pos, "ListSort", args)
  32. , Asc(asc)
  33. {}
  34. bool DoInit(TContext& ctx, ISource* src) override;
  35. TNodePtr DoClone() const final {
  36. return new TListSortBuiltin(Pos, CloneContainer(Args), Asc);
  37. }
  38. private:
  39. const bool Asc;
  40. };
  41. class TListExtractBuiltin final: public TListBuiltin {
  42. public:
  43. TListExtractBuiltin(TPosition pos, const TVector<TNodePtr>& args)
  44. : TListBuiltin(pos, "ListExtract", args)
  45. {}
  46. bool DoInit(TContext& ctx, ISource* src) override;
  47. TNodePtr DoClone() const final {
  48. return new TListExtractBuiltin(Pos, CloneContainer(Args));
  49. }
  50. };
  51. class TListProcessBuiltin: public TListBuiltin {
  52. protected:
  53. TListProcessBuiltin(TPosition pos,
  54. const TString& opName,
  55. const TVector<TNodePtr>& args)
  56. : TListBuiltin(pos, opName, args)
  57. {}
  58. bool CheckArgs(TContext& ctx, ISource* src);
  59. };
  60. class TListMapBuiltin final: public TListProcessBuiltin {
  61. public:
  62. TListMapBuiltin(TPosition pos,
  63. const TVector<TNodePtr>& args,
  64. bool flat)
  65. : TListProcessBuiltin(pos, flat ? "ListFlatMap" : "ListMap", args)
  66. , Flat(flat)
  67. {}
  68. bool DoInit(TContext& ctx, ISource* src) override;
  69. TNodePtr DoClone() const final {
  70. return new TListMapBuiltin(Pos, CloneContainer(Args), Flat);
  71. }
  72. private:
  73. bool Flat;
  74. };
  75. class TListFilterBuiltin final: public TListProcessBuiltin {
  76. public:
  77. TListFilterBuiltin(TPosition pos, const TString& opName,
  78. const TVector<TNodePtr>& args)
  79. : TListProcessBuiltin(pos, opName, args)
  80. {}
  81. bool DoInit(TContext& ctx, ISource* src) override;
  82. TNodePtr DoClone() const final {
  83. return new TListFilterBuiltin(Pos, OpName, CloneContainer(Args));
  84. }
  85. protected:
  86. virtual TNodePtr GetFilterLambda();
  87. };
  88. class TListCreateBuiltin final: public TListBuiltin {
  89. public:
  90. TListCreateBuiltin(TPosition pos,
  91. const TVector<TNodePtr>& args)
  92. : TListBuiltin(pos, "ListCreate", args)
  93. {}
  94. bool DoInit(TContext& ctx, ISource* src) override;
  95. void DoUpdateState() const override;
  96. TNodePtr DoClone() const final {
  97. return new TListCreateBuiltin(Pos, CloneContainer(Args));
  98. }
  99. };
  100. class TDictCreateBuiltin final: public TListBuiltin {
  101. public:
  102. TDictCreateBuiltin(TPosition pos,
  103. const TVector<TNodePtr>& args)
  104. : TListBuiltin(pos, "DictCreate", args)
  105. {}
  106. bool DoInit(TContext& ctx, ISource* src) override;
  107. void DoUpdateState() const override;
  108. TNodePtr DoClone() const final {
  109. return new TDictCreateBuiltin(Pos, CloneContainer(Args));
  110. }
  111. };
  112. class TSetCreateBuiltin final: public TListBuiltin {
  113. public:
  114. TSetCreateBuiltin(TPosition pos,
  115. const TVector<TNodePtr>& args)
  116. : TListBuiltin(pos, "SetCreate", args)
  117. {}
  118. bool DoInit(TContext& ctx, ISource* src) override;
  119. void DoUpdateState() const override;
  120. TNodePtr DoClone() const final {
  121. return new TSetCreateBuiltin(Pos, CloneContainer(Args));
  122. }
  123. };
  124. } // namespace NSQLTranslationV1