yql_data_provider_impl.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. #include "yql_data_provider_impl.h"
  2. #include <yql/essentials/core/yql_expr_constraint.h>
  3. #include <yql/essentials/core/yql_expr_optimize.h>
  4. #include <yql/essentials/core/expr_nodes/yql_expr_nodes.h>
  5. #include <util/system/compiler.h>
  6. namespace NYql {
  7. using namespace NNodes;
  8. void TPlanFormatterBase::WriteDetails(const TExprNode& node, NYson::TYsonWriter& writer) {
  9. Y_UNUSED(node);
  10. Y_UNUSED(writer);
  11. }
  12. bool TPlanFormatterBase::GetDependencies(const TExprNode& node, TExprNode::TListType& children, bool compact) {
  13. Y_UNUSED(node);
  14. Y_UNUSED(children);
  15. Y_UNUSED(compact);
  16. return false;
  17. }
  18. void TPlanFormatterBase::GetResultDependencies(const TExprNode::TPtr& node, TExprNode::TListType& children, bool compact) {
  19. Y_UNUSED(node);
  20. Y_UNUSED(children);
  21. Y_UNUSED(compact);
  22. }
  23. ui32 TPlanFormatterBase::GetInputs(const TExprNode& node, TVector<TPinInfo>& inputs, bool withLimits) {
  24. Y_UNUSED(node);
  25. Y_UNUSED(inputs);
  26. Y_UNUSED(withLimits);
  27. return 0;
  28. }
  29. ui32 TPlanFormatterBase::GetOutputs(const TExprNode& node, TVector<TPinInfo>& outputs, bool withLimits) {
  30. Y_UNUSED(node);
  31. Y_UNUSED(outputs);
  32. Y_UNUSED(withLimits);
  33. return 0;
  34. }
  35. TString TPlanFormatterBase::GetProviderPath(const TExprNode& node) {
  36. Y_UNUSED(node);
  37. return TString();
  38. }
  39. void TPlanFormatterBase::WritePlanDetails(const TExprNode& node, NYson::TYsonWriter& writer, bool withLimits) {
  40. Y_UNUSED(node);
  41. Y_UNUSED(writer);
  42. Y_UNUSED(withLimits);
  43. }
  44. void TPlanFormatterBase::WritePullDetails(const TExprNode& node, NYson::TYsonWriter& writer) {
  45. Y_UNUSED(node);
  46. Y_UNUSED(writer);
  47. }
  48. void TPlanFormatterBase::WritePinDetails(const TExprNode& node, NYson::TYsonWriter& writer) {
  49. Y_UNUSED(node);
  50. Y_UNUSED(writer);
  51. }
  52. TString TPlanFormatterBase::GetOperationDisplayName(const TExprNode& node) {
  53. return TString(node.Content());
  54. }
  55. bool TPlanFormatterBase::WriteSchemaHeader(NYson::TYsonWriter& writer) {
  56. Y_UNUSED(writer);
  57. return false;
  58. }
  59. void TPlanFormatterBase::WriteTypeDetails(NYson::TYsonWriter& writer, const TTypeAnnotationNode& type) {
  60. Y_UNUSED(writer);
  61. Y_UNUSED(type);
  62. }
  63. void TTrackableNodeProcessorBase::GetUsedNodes(const TExprNode& node, TVector<TString>& usedNodeIds) {
  64. Y_UNUSED(node);
  65. usedNodeIds.clear();
  66. }
  67. void TTrackableNodeProcessorBase::GetCreatedNodes(const TExprNode& node, TVector<TExprNodeAndId>& createdNodes, TExprContext& ctx) {
  68. Y_UNUSED(node);
  69. Y_UNUSED(ctx);
  70. createdNodes.clear();
  71. }
  72. IGraphTransformer& TTrackableNodeProcessorBase::GetCleanupTransformer() {
  73. return NullTransformer_;
  74. }
  75. bool TDataProviderBase::Initialize(TExprContext& ctx) {
  76. Y_UNUSED(ctx);
  77. return true;
  78. }
  79. IGraphTransformer& TDataProviderBase::GetConfigurationTransformer() {
  80. return NullTransformer_;
  81. }
  82. TExprNode::TPtr TDataProviderBase::GetClusterInfo(const TString& cluster, TExprContext& ctx) {
  83. Y_UNUSED(cluster);
  84. Y_UNUSED(ctx);
  85. return {};
  86. }
  87. void TDataProviderBase::AddCluster(const TString& name, const THashMap<TString, TString>& properties) {
  88. Y_UNUSED(name, properties);
  89. }
  90. const THashMap<TString, TString>* TDataProviderBase::GetClusterTokens() {
  91. return nullptr;
  92. }
  93. IGraphTransformer& TDataProviderBase::GetIODiscoveryTransformer() {
  94. return NullTransformer_;
  95. }
  96. IGraphTransformer& TDataProviderBase::GetEpochsTransformer() {
  97. return NullTransformer_;
  98. }
  99. IGraphTransformer& TDataProviderBase::GetIntentDeterminationTransformer() {
  100. return NullTransformer_;
  101. }
  102. bool TDataProviderBase::ValidateParameters(TExprNode& node, TExprContext& ctx, TMaybe<TString>& cluster) {
  103. Y_UNUSED(node);
  104. Y_UNUSED(ctx);
  105. cluster = Nothing();
  106. return true;
  107. }
  108. bool TDataProviderBase::CanParse(const TExprNode& node) {
  109. Y_UNUSED(node);
  110. return false;
  111. }
  112. void TDataProviderBase::FillModifyCallables(THashSet<TStringBuf>& callables) {
  113. Y_UNUSED(callables);
  114. }
  115. IGraphTransformer& TDataProviderBase::GetTypeAnnotationTransformer(bool instantOnly) {
  116. Y_UNUSED(instantOnly);
  117. return NullTransformer_;
  118. }
  119. IGraphTransformer& TDataProviderBase::GetConstraintTransformer(bool instantOnly, bool subGraph) {
  120. Y_UNUSED(instantOnly);
  121. Y_UNUSED(subGraph);
  122. if (!DefConstraintTransformer_) {
  123. DefConstraintTransformer_ = CreateDefCallableConstraintTransformer();
  124. }
  125. return *DefConstraintTransformer_;
  126. }
  127. TExprNode::TPtr TDataProviderBase::RewriteIO(const TExprNode::TPtr& node, TExprContext& ctx) {
  128. Y_UNUSED(ctx);
  129. return node;
  130. }
  131. void TDataProviderBase::PostRewriteIO() {
  132. }
  133. void TDataProviderBase::Reset() {
  134. GetConfigurationTransformer().Rewind();
  135. GetIODiscoveryTransformer().Rewind();
  136. GetEpochsTransformer().Rewind();
  137. GetIntentDeterminationTransformer().Rewind();
  138. for (auto flag : {true, false}) {
  139. GetTypeAnnotationTransformer(flag).Rewind();
  140. }
  141. for (auto flag1 : {true, false}) {
  142. for (auto flag2 : {true, false}) {
  143. GetConstraintTransformer(flag1, flag2).Rewind();
  144. }
  145. }
  146. GetRecaptureOptProposalTransformer().Rewind();
  147. GetStatisticsProposalTransformer().Rewind();
  148. GetLogicalOptProposalTransformer().Rewind();
  149. GetPhysicalOptProposalTransformer().Rewind();
  150. GetPhysicalFinalizingTransformer().Rewind();
  151. GetLoadTableMetadataTransformer().Rewind();
  152. GetCallableExecutionTransformer().Rewind();
  153. GetFinalizingTransformer().Rewind();
  154. GetPlanInfoTransformer().Rewind();
  155. GetTrackableNodeProcessor().GetCleanupTransformer().Rewind();
  156. }
  157. IGraphTransformer& TDataProviderBase::GetRecaptureOptProposalTransformer() {
  158. return NullTransformer_;
  159. }
  160. IGraphTransformer& TDataProviderBase::GetStatisticsProposalTransformer() {
  161. return NullTransformer_;
  162. }
  163. IGraphTransformer& TDataProviderBase::GetLogicalOptProposalTransformer() {
  164. return NullTransformer_;
  165. }
  166. IGraphTransformer& TDataProviderBase::GetPhysicalOptProposalTransformer() {
  167. return NullTransformer_;
  168. }
  169. IGraphTransformer& TDataProviderBase::GetPhysicalFinalizingTransformer() {
  170. return NullTransformer_;
  171. }
  172. IGraphTransformer& TDataProviderBase::GetLoadTableMetadataTransformer() {
  173. return NullTransformer_;
  174. }
  175. bool TDataProviderBase::IsPersistent(const TExprNode& node) {
  176. Y_UNUSED(node);
  177. return false;
  178. }
  179. bool TDataProviderBase::IsRead(const TExprNode& node) {
  180. Y_UNUSED(node);
  181. return false;
  182. }
  183. bool TDataProviderBase::IsWrite(const TExprNode& node) {
  184. Y_UNUSED(node);
  185. return false;
  186. }
  187. bool TDataProviderBase::CanBuildResult(const TExprNode& node, TSyncMap& syncList) {
  188. Y_UNUSED(node);
  189. Y_UNUSED(syncList);
  190. return false;
  191. }
  192. bool TDataProviderBase::CanPullResult(const TExprNode& node, TSyncMap& syncList, bool& canRef) {
  193. Y_UNUSED(node);
  194. Y_UNUSED(syncList);
  195. Y_UNUSED(canRef);
  196. return false;
  197. }
  198. bool TDataProviderBase::GetExecWorld(const TExprNode::TPtr& node, TExprNode::TPtr& root) {
  199. root = nullptr;
  200. Y_UNUSED(node);
  201. return false;
  202. }
  203. bool TDataProviderBase::CanEvaluate(const TExprNode& node) {
  204. Y_UNUSED(node);
  205. return false;
  206. }
  207. void TDataProviderBase::EnterEvaluation(ui64 id) {
  208. Y_UNUSED(id);
  209. }
  210. void TDataProviderBase::LeaveEvaluation(ui64 id) {
  211. Y_UNUSED(id);
  212. }
  213. TExprNode::TPtr TDataProviderBase::CleanupWorld(const TExprNode::TPtr& node, TExprContext& ctx) {
  214. return DefaultCleanupWorld(node, ctx);
  215. }
  216. TExprNode::TPtr TDataProviderBase::OptimizePull(const TExprNode::TPtr& source, const TFillSettings& fillSettings,
  217. TExprContext& ctx, IOptimizationContext& optCtx)
  218. {
  219. Y_UNUSED(fillSettings);
  220. Y_UNUSED(ctx);
  221. Y_UNUSED(optCtx);
  222. return source;
  223. }
  224. bool TDataProviderBase::CanExecute(const TExprNode& node) {
  225. Y_UNUSED(node);
  226. return false;
  227. }
  228. bool TDataProviderBase::ValidateExecution(const TExprNode& node, TExprContext& ctx) {
  229. Y_UNUSED(node);
  230. Y_UNUSED(ctx);
  231. return true;
  232. }
  233. void TDataProviderBase::GetRequiredChildren(const TExprNode& node, TExprNode::TListType& children) {
  234. GetDependencies(node, children, false);
  235. }
  236. IGraphTransformer& TDataProviderBase::GetCallableExecutionTransformer() {
  237. return NullTransformer_;
  238. }
  239. IGraphTransformer& TDataProviderBase::GetFinalizingTransformer() {
  240. return NullTransformer_;
  241. }
  242. bool TDataProviderBase::CollectDiagnostics(NYson::TYsonWriter& writer) {
  243. Y_UNUSED(writer);
  244. return false;
  245. }
  246. bool TDataProviderBase::GetTasksInfo(NYson::TYsonWriter& writer) {
  247. Y_UNUSED(writer);
  248. return false;
  249. }
  250. bool TDataProviderBase::CollectStatistics(NYson::TYsonWriter& writer, bool totalOnly) {
  251. Y_UNUSED(writer);
  252. Y_UNUSED(totalOnly);
  253. return false;
  254. }
  255. bool TDataProviderBase::CollectDiscoveredData(NYson::TYsonWriter& writer) {
  256. Y_UNUSED(writer);
  257. return false;
  258. }
  259. IPlanFormatter& TDataProviderBase::GetPlanFormatter() {
  260. return *this;
  261. }
  262. ITrackableNodeProcessor& TDataProviderBase::GetTrackableNodeProcessor() {
  263. return NullTrackableNodeProcessor_;
  264. }
  265. IGraphTransformer& TDataProviderBase::GetPlanInfoTransformer() {
  266. return NullTransformer_;
  267. }
  268. IDqIntegration* TDataProviderBase::GetDqIntegration() {
  269. return nullptr;
  270. }
  271. IDqOptimization* TDataProviderBase::GetDqOptimization() {
  272. return nullptr;
  273. }
  274. TExprNode::TPtr DefaultCleanupWorld(const TExprNode::TPtr& node, TExprContext& ctx) {
  275. auto root = node;
  276. auto status = OptimizeExpr(root, root, [&](const TExprNode::TPtr& node, TExprContext& ctx) -> TExprNode::TPtr {
  277. Y_UNUSED(ctx);
  278. if (auto right = TMaybeNode<TCoRight>(node)) {
  279. auto cons = right.Cast().Input().Maybe<TCoCons>();
  280. if (cons) {
  281. return cons.Cast().Input().Ptr();
  282. }
  283. if (right.Cast().Input().Ref().IsCallable("PgReadTable!")) {
  284. const auto& read = right.Cast().Input().Ref();
  285. return ctx.Builder(node->Pos())
  286. .Callable("PgTableContent")
  287. .Add(0, read.Child(1)->TailPtr())
  288. .Add(1, read.ChildPtr(2))
  289. .Add(2, read.ChildPtr(3))
  290. .Add(3, read.ChildPtr(4))
  291. .Seal()
  292. .Build();
  293. }
  294. }
  295. return node;
  296. }, ctx, TOptimizeExprSettings(nullptr));
  297. YQL_ENSURE(status.Level != IGraphTransformer::TStatus::Error);
  298. return root;
  299. }
  300. } // namespace NYql