yql_data_provider_impl.cpp 10 KB

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