diff options
9 files changed, 98 insertions, 12 deletions
diff --git a/ydb/library/yql/sql/v1/node.cpp b/ydb/library/yql/sql/v1/node.cpp index 0ace32457c7..5bd8a80cbeb 100644 --- a/ydb/library/yql/sql/v1/node.cpp +++ b/ydb/library/yql/sql/v1/node.cpp @@ -834,7 +834,7 @@ bool TWinRank::DoInit(TContext& ctx, ISource* src) { if (Args.empty()) { for (const auto& spec: orderSpec) { - Args.push_back(spec->OrderExpr); + Args.push_back(spec->Clone()->OrderExpr); } if (Args.size() != 1) { @@ -1032,11 +1032,15 @@ bool TColumns::IsColumnPossible(TContext& ctx, const TString& name) { return false; } +TSortSpecification::TSortSpecification(const TNodePtr& orderExpr, bool ascending) + : OrderExpr(orderExpr->Clone()) + , Ascending(ascending) + , CleanOrderExpr(orderExpr->Clone()) +{ +} + TSortSpecificationPtr TSortSpecification::Clone() const { - auto res = MakeIntrusive<TSortSpecification>(); - res->OrderExpr = OrderExpr->Clone(); - res->Ascending = Ascending; - return res; + return MakeIntrusive<TSortSpecification>(CleanOrderExpr, Ascending); } TFrameBoundPtr TFrameBound::Clone() const { diff --git a/ydb/library/yql/sql/v1/node.h b/ydb/library/yql/sql/v1/node.h index e0245ed911d..1f18cf14cc5 100644 --- a/ydb/library/yql/sql/v1/node.h +++ b/ydb/library/yql/sql/v1/node.h @@ -588,11 +588,15 @@ namespace NSQLTranslationV1 { bool IsColumnPossible(TContext& ctx, const TString& column); }; - struct TSortSpecification: public TSimpleRefCount<TSortSpecification> { - TNodePtr OrderExpr; - bool Ascending; + class TSortSpecification: public TSimpleRefCount<TSortSpecification> { + public: + TSortSpecification(const TNodePtr& orderExpr, bool ascending); + const TNodePtr OrderExpr; + const bool Ascending; TIntrusivePtr<TSortSpecification> Clone() const; ~TSortSpecification() {} + private: + const TNodePtr CleanOrderExpr; }; typedef TIntrusivePtr<TSortSpecification> TSortSpecificationPtr; diff --git a/ydb/library/yql/sql/v1/sql_translation.cpp b/ydb/library/yql/sql/v1/sql_translation.cpp index 43a525e6047..967fcee2388 100644 --- a/ydb/library/yql/sql/v1/sql_translation.cpp +++ b/ydb/library/yql/sql/v1/sql_translation.cpp @@ -3418,10 +3418,7 @@ bool TSqlTranslation::SortSpecification(const TRule_sort_specification& node, TV } else { Ctx.IncrementMonCounter("sql_features", "OrderByDefault"); } - auto sortSpecPtr = MakeIntrusive<TSortSpecification>(); - sortSpecPtr->OrderExpr = exprNode; - sortSpecPtr->Ascending = asc; - sortSpecs.emplace_back(sortSpecPtr); + sortSpecs.emplace_back(MakeIntrusive<TSortSpecification>(exprNode, asc)); return true; } diff --git a/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json index 78e6072c3f9..53c908df3c4 100644 --- a/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json @@ -2920,6 +2920,28 @@ } ], "test.test[window-win_func_rank_by_opt_all--Results]": [], + "test.test[window-win_func_rank_with_order_by_aggr_key--Analyze]": [ + { + "checksum": "74d4e482c5d6e26928e0c809afd77efd", + "size": 5634, + "uri": "https://{canondata_backend}/1937150/752b46c5b03a79553eede6ce218ca961ba7c10c2/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Analyze_/plan.txt" + } + ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Debug]": [ + { + "checksum": "a64118297cbdc81da6a25233d9723ad2", + "size": 2943, + "uri": "https://{canondata_backend}/1937150/752b46c5b03a79553eede6ce218ca961ba7c10c2/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Debug_/opt.yql_patched" + } + ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Plan]": [ + { + "checksum": "74d4e482c5d6e26928e0c809afd77efd", + "size": 5634, + "uri": "https://{canondata_backend}/1937150/752b46c5b03a79553eede6ce218ca961ba7c10c2/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Plan_/plan.txt" + } + ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Results]": [], "test.test[window-win_multiaggr_library--Analyze]": [ { "checksum": "2cc74976ee85f4a968fb1961243e099b", diff --git a/ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json index d18484e1b0f..b39610baf0d 100644 --- a/ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json +++ b/ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json @@ -2645,6 +2645,20 @@ "uri": "https://{canondata_backend}/1931696/cc756dc950b218e9f3589a791267d21773207f44/resource.tar.gz#test.test_window-win_func_over_group_by_list_names_order_prefix--Plan_/plan.txt" } ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Debug]": [ + { + "checksum": "996279a3cae6fe0b80b62e5fd91f672c", + "size": 5852, + "uri": "https://{canondata_backend}/1936997/335b572434427c91a0ca005e493230d435e15e97/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Debug_/opt.yql_patched" + } + ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Plan]": [ + { + "checksum": "02ef9d1f70aa51db91a8c86c95b58b7b", + "size": 9746, + "uri": "https://{canondata_backend}/1936997/335b572434427c91a0ca005e493230d435e15e97/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Plan_/plan.txt" + } + ], "test.test[window-win_func_with_struct_access_full_access-default.txt-Debug]": [ { "checksum": "5fd0123a68e009dbb4abfb0b0e6203a3", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index e67583a3e44..2a7036566fc 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -18017,6 +18017,13 @@ "uri": "https://{canondata_backend}/1871182/6b10ad6d9884e5faf3a77187ffb9b38b59b46458/resource.tar.gz#test_sql2yql.test_window-win_func_rank_by_part_/sql.yql" } ], + "test_sql2yql.test[window-win_func_rank_with_order_by_aggr_key]": [ + { + "checksum": "75281cc34e011f9b4f87cba60c659cef", + "size": 1685, + "uri": "https://{canondata_backend}/1773845/cd3d52c296919794a6890ae7e223f6edbe2dd598/resource.tar.gz#test_sql2yql.test_window-win_func_rank_with_order_by_aggr_key_/sql.yql" + } + ], "test_sql2yql.test[window-win_func_spec_with_part]": [ { "checksum": "57d58757ad37ade004840950c81d534c", @@ -33319,6 +33326,13 @@ "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_window-win_func_rank_by_part_/formatted.sql" } ], + "test_sql_format.test[window-win_func_rank_with_order_by_aggr_key]": [ + { + "checksum": "21164a46e11ebe2fd37b5d0e27103d4d", + "size": 149, + "uri": "https://{canondata_backend}/1773845/cd3d52c296919794a6890ae7e223f6edbe2dd598/resource.tar.gz#test_sql_format.test_window-win_func_rank_with_order_by_aggr_key_/formatted.sql" + } + ], "test_sql_format.test[window-win_func_spec_with_part]": [ { "checksum": "9a613d708f87222e3a7cd8a2c6c15089", diff --git a/ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg b/ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg new file mode 100644 index 00000000000..3df78137907 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql b/ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql new file mode 100644 index 00000000000..5153e2cca78 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql @@ -0,0 +1,9 @@ +use plato; + +select + key, + RANK() over w +from Input +group by key +WINDOW w as (order by key) +order by key; diff --git a/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json index baf6a48a90f..69fa351e3ce 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json @@ -2699,6 +2699,27 @@ "uri": "https://{canondata_backend}/1942173/74408257f99fa053878b4c348dd56d42ab4853e2/resource.tar.gz#test.test_window-win_func_rank_by_opt_all--Results_/results.txt" } ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Debug]": [ + { + "checksum": "eb7c16c09304c4785bc1dcdc71b89c0d", + "size": 4058, + "uri": "https://{canondata_backend}/1937367/76e161568e8a3712b4e2e8c4e1a0567c5a6c2c05/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Debug_/opt.yql" + } + ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Plan]": [ + { + "checksum": "8d9aa9782f17e25fd2a0c58cedb98752", + "size": 6865, + "uri": "https://{canondata_backend}/1937367/76e161568e8a3712b4e2e8c4e1a0567c5a6c2c05/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Plan_/plan.txt" + } + ], + "test.test[window-win_func_rank_with_order_by_aggr_key--Results]": [ + { + "checksum": "db300a38240d044e1eed09beb00e4889", + "size": 1686, + "uri": "https://{canondata_backend}/1937367/76e161568e8a3712b4e2e8c4e1a0567c5a6c2c05/resource.tar.gz#test.test_window-win_func_rank_with_order_by_aggr_key--Results_/results.txt" + } + ], "test.test[window-win_multiaggr_library--Debug]": [ { "checksum": "4d38824ab1d617448388480be5d89fd8", |
