aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <aneporada@ydb.tech>2023-10-27 16:06:44 +0300
committeraneporada <aneporada@ydb.tech>2023-10-27 17:42:52 +0300
commit630cf22ae710fd98c4568a04ad2af7f14b9d7420 (patch)
treee053afd26395d6f65a8ae38ae80c7e7498cef112
parent63d30647b25867ab5e75bbc45816c7883732c37c (diff)
downloadydb-630cf22ae710fd98c4568a04ad2af7f14b9d7420.tar.gz
Delay expression evaluation until colum/type duality is resolved
-rw-r--r--ydb/library/yql/core/services/yql_eval_expr.cpp2
-rw-r--r--ydb/library/yql/sql/v1/context.cpp5
-rw-r--r--ydb/library/yql/tests/sql/sql2yql/canondata/result.json28
-rw-r--r--ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql4
-rw-r--r--ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql11
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json21
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json21
7 files changed, 86 insertions, 6 deletions
diff --git a/ydb/library/yql/core/services/yql_eval_expr.cpp b/ydb/library/yql/core/services/yql_eval_expr.cpp
index 06f9aabff5..603a899b9f 100644
--- a/ydb/library/yql/core/services/yql_eval_expr.cpp
+++ b/ydb/library/yql/core/services/yql_eval_expr.cpp
@@ -47,7 +47,7 @@ bool CheckPendingArgs(const TExprNode& root, TNodeSet& visited, TNodeMap<const T
return true;
}
- if (root.IsCallable("TypeOf")) {
+ if (root.IsCallable({"TypeOf", "SqlColumnOrType", "SqlPlainColumnOrType"})) {
underTypeOf = true;
}
diff --git a/ydb/library/yql/sql/v1/context.cpp b/ydb/library/yql/sql/v1/context.cpp
index c6e60dfed4..ec053f181d 100644
--- a/ydb/library/yql/sql/v1/context.cpp
+++ b/ydb/library/yql/sql/v1/context.cpp
@@ -498,11 +498,6 @@ TMaybe<EColumnRefState> GetFunctionArgColumnStatus(TContext& ctx, const TString&
{ {"ensureconvertibleto", 1}, EColumnRefState::Deny },
{ {"ensureconvertibleto", 2}, EColumnRefState::Deny },
- // TODO: switch to Deny here
- { {"evaluateexpr", 0}, EColumnRefState::AsStringLiteral },
- { {"evaluateatom", 0}, EColumnRefState::AsStringLiteral },
- { {"evaluatetype", 0}, EColumnRefState::AsStringLiteral },
-
{ {"nothing", 0}, EColumnRefState::Deny },
{ {"formattype", 0}, EColumnRefState::Deny },
{ {"instanceof", 0}, EColumnRefState::Deny },
diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
index 34dcd9b3b9..b54b7c3cd4 100644
--- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
+++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
@@ -6061,6 +6061,13 @@
"uri": "https://storage.yandex-team.ru/get-devtools/1871182/6b10ad6d9884e5faf3a77187ffb9b38b59b46458/resource.tar.gz#test_sql2yql.test_flexible_types-basic_/sql.yql"
}
],
+ "test_sql2yql.test[flexible_types-evaluate_expr]": [
+ {
+ "checksum": "1f7f54164b56b209ce58bca277c4b540",
+ "size": 2005,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql2yql.test_flexible_types-evaluate_expr_/sql.yql"
+ }
+ ],
"test_sql2yql.test[flexible_types-flatten_by]": [
{
"checksum": "f41260b56c27e1f81cc024a0f2725c61",
@@ -6089,6 +6096,13 @@
"uri": "https://storage.yandex-team.ru/get-devtools/1936997/d01e529b02a008637591c42bdd9c20f7eeda6588/resource.tar.gz#test_sql2yql.test_flexible_types-group_by_/sql.yql"
}
],
+ "test_sql2yql.test[flexible_types-inside_evaluate]": [
+ {
+ "checksum": "43080cf26863a2b23fc6bcb3f0294dde",
+ "size": 1466,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql2yql.test_flexible_types-inside_evaluate_/sql.yql"
+ }
+ ],
"test_sql2yql.test[flexible_types-struct_literals_vs_columns]": [
{
"checksum": "ddec351c40efe20790c7e12f0bc71970",
@@ -22987,6 +23001,13 @@
"uri": "https://storage.yandex-team.ru/get-devtools/1599023/4bd7e6892a9762eec433e60bda88f20cddadc74c/resource.tar.gz#test_sql_format.test_flexible_types-basic_/formatted.sql"
}
],
+ "test_sql_format.test[flexible_types-evaluate_expr]": [
+ {
+ "checksum": "fe22adfeec642ca32136013b56144e32",
+ "size": 113,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql_format.test_flexible_types-evaluate_expr_/formatted.sql"
+ }
+ ],
"test_sql_format.test[flexible_types-flatten_by]": [
{
"checksum": "9219160ad38540b0af2d54c7cc25174d",
@@ -23015,6 +23036,13 @@
"uri": "https://storage.yandex-team.ru/get-devtools/1599023/4bd7e6892a9762eec433e60bda88f20cddadc74c/resource.tar.gz#test_sql_format.test_flexible_types-group_by_/formatted.sql"
}
],
+ "test_sql_format.test[flexible_types-inside_evaluate]": [
+ {
+ "checksum": "3cf0ed5a3d2cc2ab2ea9dbe5de26c84f",
+ "size": 387,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql_format.test_flexible_types-inside_evaluate_/formatted.sql"
+ }
+ ],
"test_sql_format.test[flexible_types-struct_literals_vs_columns]": [
{
"checksum": "4248e8879b2c502ae84179a57754cdfb",
diff --git a/ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql b/ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql
new file mode 100644
index 0000000000..72f817d69d
--- /dev/null
+++ b/ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql
@@ -0,0 +1,4 @@
+$x = ($type) -> (FormatType($type));
+
+select Substring($x(String), 1);
+select EvaluateExpr($x(String));
diff --git a/ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql b/ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql
new file mode 100644
index 0000000000..d49fc796db
--- /dev/null
+++ b/ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql
@@ -0,0 +1,11 @@
+$do_safe_cast = ($x, $type) -> {
+ $type_code = AtomCode($type);
+ $cast_code = EvaluateCode(LambdaCode(($x_code) -> {
+ RETURN FuncCode("SafeCast", $x_code, $type_code);
+ }));
+ RETURN $cast_code($x);
+};
+
+$do_safe_cast_2 = ($x, $type) -> ($do_safe_cast($x, FormatType($type)));
+
+select $do_safe_cast_2(123, String);
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
index ffffcb764a..a533894c85 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
@@ -1720,6 +1720,27 @@
"uri": "file://test.test_flatten_by-flatten_with_group_by--Results_/extracted"
}
],
+ "test.test[flexible_types-inside_evaluate-default.txt-Debug]": [
+ {
+ "checksum": "dd804f7e44afcfdc797d9ac884843323",
+ "size": 230,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1936842/7d8406846c0aeec42271b9715b56b71090e46675/resource.tar.gz#test.test_flexible_types-inside_evaluate-default.txt-Debug_/opt.yql"
+ }
+ ],
+ "test.test[flexible_types-inside_evaluate-default.txt-Plan]": [
+ {
+ "checksum": "b4dd508a329723c74293d80f0278c705",
+ "size": 505,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1936842/7d8406846c0aeec42271b9715b56b71090e46675/resource.tar.gz#test.test_flexible_types-inside_evaluate-default.txt-Plan_/plan.txt"
+ }
+ ],
+ "test.test[flexible_types-inside_evaluate-default.txt-Results]": [
+ {
+ "checksum": "c3e9fe2c4f1a2c442e14bbb4fd152940",
+ "size": 668,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1936842/7d8406846c0aeec42271b9715b56b71090e46675/resource.tar.gz#test.test_flexible_types-inside_evaluate-default.txt-Results_/results.txt"
+ }
+ ],
"test.test[flexible_types-text_and_bytes-default.txt-Debug]": [
{
"checksum": "3d6c5fc83d39049f77e641ca4aefb10c",
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json
index 26fd3c5839..796dad01c9 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json
@@ -1774,6 +1774,27 @@
"uri": "https://storage.yandex-team.ru/get-devtools/1031349/eb01bd7ff66ea4e3791b69ec15b5a2ac35547ace/resource.tar.gz#test.test_file-parse_file_in_select_as_str--Results_/results.txt"
}
],
+ "test.test[flexible_types-evaluate_expr-default.txt-Debug]": [
+ {
+ "checksum": "d83ab9aa82d5cd2b7e2294c8fead5321",
+ "size": 411,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1936842/3f2d198533ab283a4ed0b65cedb84a451e0f286b/resource.tar.gz#test.test_flexible_types-evaluate_expr-default.txt-Debug_/opt.yql"
+ }
+ ],
+ "test.test[flexible_types-evaluate_expr-default.txt-Plan]": [
+ {
+ "checksum": "a3b64a2cf9903b3868a2dd88a18fc46e",
+ "size": 922,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1936842/3f2d198533ab283a4ed0b65cedb84a451e0f286b/resource.tar.gz#test.test_flexible_types-evaluate_expr-default.txt-Plan_/plan.txt"
+ }
+ ],
+ "test.test[flexible_types-evaluate_expr-default.txt-Results]": [
+ {
+ "checksum": "75f50ccda31dc749d9a3cd50ffe68e20",
+ "size": 1339,
+ "uri": "https://storage.yandex-team.ru/get-devtools/1936842/3f2d198533ab283a4ed0b65cedb84a451e0f286b/resource.tar.gz#test.test_flexible_types-evaluate_expr-default.txt-Results_/results.txt"
+ }
+ ],
"test.test[hor_join-empty_out_hor_join-default.txt-Debug]": [
{
"checksum": "a1bad8591f8d6c9e4b864aa63850fe26",