Skip to content

Commit

Permalink
Ignore doubles in search_path (ydb-platform#2960)
Browse files Browse the repository at this point in the history
  • Loading branch information
vitstn authored Mar 21, 2024
1 parent d2ba843 commit fce88b6
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 16 deletions.
35 changes: 22 additions & 13 deletions ydb/library/yql/sql/pg/pg_sql.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2159,25 +2159,34 @@ class TConverter : public IPGParseEvents {

auto name = to_lower(TString(value->name));
if (name == "search_path") {
if (ListLength(value->args) != 1) {
AddError(TStringBuilder() << "VariableSetStmt, expected 1 arg, but got: " << ListLength(value->args));
return nullptr;
}
auto val = ListNodeNth(value->args, 0);
if (!isSetConfig) {
if (NodeTag(val) == T_A_Const) {
val = (const Node*)&CAST_NODE(A_Const, val)->val;
} else {
AddError(TStringBuilder() << "VariableSetStmt, expected const for " << value->name << " option");
THashSet<TString> visitedValues;
TVector<TString> values;
for (int i = 0; i < ListLength(value->args); ++i) {
auto val = ListNodeNth(value->args, i);
if (!isSetConfig) {
if (NodeTag(val) == T_A_Const) {
val = (const Node*)&CAST_NODE(A_Const, val)->val;
} else {
AddError(TStringBuilder() << "VariableSetStmt, expected const for " << value->name << " option");
return nullptr;
}
}

if (NodeTag(val) != T_String) {
AddError(TStringBuilder() << "VariableSetStmt, expected string literal for " << value->name << " option");
return nullptr;
}
TString rawStr = to_lower(TString(StrVal(val)));
if (visitedValues.emplace(rawStr).second) {
values.emplace_back(rawStr);
}
}

if (NodeTag(val) != T_String) {
AddError(TStringBuilder() << "VariableSetStmt, expected string literal for " << value->name << " option");
if (values.size() != 1) {
AddError(TStringBuilder() << "VariableSetStmt, expected 1 unique scheme, but got: " << values.size());
return nullptr;
}
TString rawStr = to_lower(TString(StrVal(val)));
auto rawStr = values[0];
if (rawStr != "pg_catalog" && rawStr != "public" && rawStr != "" && rawStr != "information_schema") {
AddError(TStringBuilder() << "VariableSetStmt, search path supports only 'information_schema', 'public', 'pg_catalog', '' but got: '" << rawStr << "'");
return nullptr;
Expand Down
22 changes: 22 additions & 0 deletions ydb/library/yql/tests/sql/dq_file/part8/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -2207,6 +2207,28 @@
}
],
"test.test[pg-distinct_on_single_projection_no_order-default.txt-Results]": [],
"test.test[pg-doubles_search_path-default.txt-Analyze]": [
{
"checksum": "fd1b97c2f54d4e50aa4de237cf4d4fa7",
"size": 5591,
"uri": "https://{canondata_backend}/1936842/4c93d91b791c8afc87ba8ddb554fd8416c95c5a3/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Analyze_/plan.txt"
}
],
"test.test[pg-doubles_search_path-default.txt-Debug]": [
{
"checksum": "298c84fb95295be7e6f186f5c5dd6b64",
"size": 2865,
"uri": "https://{canondata_backend}/1936842/4c93d91b791c8afc87ba8ddb554fd8416c95c5a3/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Debug_/opt.yql_patched"
}
],
"test.test[pg-doubles_search_path-default.txt-Plan]": [
{
"checksum": "fd1b97c2f54d4e50aa4de237cf4d4fa7",
"size": 5591,
"uri": "https://{canondata_backend}/1936842/4c93d91b791c8afc87ba8ddb554fd8416c95c5a3/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-doubles_search_path-default.txt-Results]": [],
"test.test[pg-order_by_shadow_input_columns_qual-default.txt-Analyze]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
Expand Down
20 changes: 17 additions & 3 deletions ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -1646,9 +1646,23 @@
],
"test.test[pg-join_using_tables1-default.txt-Plan]": [
{
"checksum": "c5f207bd0617164c2954b2b2cd0da34a",
"size": 7043,
"uri": "https://{canondata_backend}/1942671/586e1cad89b59a85e10d70e6019aeefccc0f0382/resource.tar.gz#test.test_pg-join_using_tables1-default.txt-Plan_/plan.txt"
"checksum": "2285226db23bdeb50a3b9be08816a9e1",
"size": 5286,
"uri": "https://{canondata_backend}/1889210/ef7367b4155f26b3ef23170f285effb15331f727/resource.tar.gz#test.test_pg-join_using_tables1-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-doubles_search_path-default.txt-Debug]": [
{
"checksum": "ea64351f9e62c70ad3ea607991b54517",
"size": 3388,
"uri": "https://{canondata_backend}/1936842/06c9068023d4aba6d1f84ef3d63cea3dfcf5c68c/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Debug_/opt.yql_patched"
}
],
"test.test[pg-doubles_search_path-default.txt-Plan]": [
{
"checksum": "78f0e1e757a64d6371b7201489602b7a",
"size": 5824,
"uri": "https://{canondata_backend}/1936842/06c9068023d4aba6d1f84ef3d63cea3dfcf5c68c/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-order_by_distinct_same_expr_agg-default.txt-Debug]": [
Expand Down
7 changes: 7 additions & 0 deletions ydb/library/yql/tests/sql/sql2yql/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -11066,6 +11066,13 @@
"uri": "https://{canondata_backend}/1781765/838f2ea2c0326d84b118c1ad739c96cc6935c327/resource.tar.gz#test_sql2yql.test_pg-distinct_on_single_projection_order_expr_/sql.yql"
}
],
"test_sql2yql.test[pg-doubles_search_path]": [
{
"checksum": "916f87f6b75cf45a4534a43c50d0cb5b",
"size": 618,
"uri": "https://{canondata_backend}/1936947/6c85d45b858dd603cc78503a28189df349b6a33d/resource.tar.gz#test_sql2yql.test_pg-doubles_search_path_/sql.yql"
}
],
"test_sql2yql.test[pg-drop_table]": [
{
"checksum": "a17122997a6bf872af77c286174322eb",
Expand Down
3 changes: 3 additions & 0 deletions ydb/library/yql/tests/sql/suites/pg/doubles_search_path.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
--!syntax_pg
SET search_path = "public", public;
select count(*) from plato."Input";
Original file line number Diff line number Diff line change
Expand Up @@ -1946,6 +1946,27 @@
"uri": "https://{canondata_backend}/1773845/6143a04775e36199e856448cbf4178c399f51a42/resource.tar.gz#test.test_pg-distinct_on_single_projection_no_order-default.txt-Results_/results.txt"
}
],
"test.test[pg-doubles_search_path-default.txt-Debug]": [
{
"checksum": "be03c9b8e3aeadbe2b2ed449c3d4e42a",
"size": 2907,
"uri": "https://{canondata_backend}/1936842/735d816861a5616c53b1eee68a7a6a4cbda384a4/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Debug_/opt.yql"
}
],
"test.test[pg-doubles_search_path-default.txt-Plan]": [
{
"checksum": "c28acd305df85fa1613226503487ff19",
"size": 4552,
"uri": "https://{canondata_backend}/1936842/735d816861a5616c53b1eee68a7a6a4cbda384a4/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-doubles_search_path-default.txt-Results]": [
{
"checksum": "308de242a9e376534973cfd8c4e97327",
"size": 660,
"uri": "https://{canondata_backend}/1936842/735d816861a5616c53b1eee68a7a6a4cbda384a4/resource.tar.gz#test.test_pg-doubles_search_path-default.txt-Results_/results.txt"
}
],
"test.test[pg-order_by_shadow_input_columns_qual-default.txt-Debug]": [
{
"checksum": "ddee8cf57e110cdad12ba4c177ce1145",
Expand Down

0 comments on commit fce88b6

Please sign in to comment.