summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ydb/library/yql/sql/v1/node.cpp14
-rw-r--r--ydb/library/yql/sql/v1/node.h10
-rw-r--r--ydb/library/yql/sql/v1/sql_translation.cpp5
-rw-r--r--ydb/library/yql/tests/sql/dq_file/part15/canondata/result.json22
-rw-r--r--ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json14
-rw-r--r--ydb/library/yql/tests/sql/sql2yql/canondata/result.json14
-rw-r--r--ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg1
-rw-r--r--ydb/library/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql9
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part15/canondata/result.json21
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",