From f136fc737b1baf646fd0d6640e2d98646e716c12 Mon Sep 17 00:00:00 2001 From: Vitaly Stoyan Date: Tue, 30 Jan 2024 19:17:05 +0300 Subject: [PATCH] YQL-17348 pg_auth_members, YQL-17351 pg_roles (#1418) * init * style --- ydb/library/yql/parser/pg_catalog/catalog.cpp | 20 +++++++++ .../yql/parser/pg_wrapper/comp_factory.cpp | 45 +++++++++++++++++++ .../sql/dq_file/part11/canondata/result.json | 22 +++++++++ .../sql/dq_file/part17/canondata/result.json | 22 +++++++++ .../tests/sql/sql2yql/canondata/result.json | 14 ++++++ .../sql/suites/pg_catalog/pg_auth_members.sql | 8 ++++ .../tests/sql/suites/pg_catalog/pg_roles.sql | 17 +++++++ .../part11/canondata/result.json | 21 +++++++++ .../part14/canondata/result.json | 6 +-- .../part16/canondata/result.json | 6 +-- .../part17/canondata/result.json | 21 +++++++++ .../part3/canondata/result.json | 6 +-- 12 files changed, 199 insertions(+), 9 deletions(-) create mode 100644 ydb/library/yql/tests/sql/suites/pg_catalog/pg_auth_members.sql create mode 100644 ydb/library/yql/tests/sql/suites/pg_catalog/pg_roles.sql diff --git a/ydb/library/yql/parser/pg_catalog/catalog.cpp b/ydb/library/yql/parser/pg_catalog/catalog.cpp index f4f439af5aef..f0b3f2bbc304 100644 --- a/ydb/library/yql/parser/pg_catalog/catalog.cpp +++ b/ydb/library/yql/parser/pg_catalog/catalog.cpp @@ -1417,6 +1417,8 @@ struct TCatalog { {"pg_catalog", "pg_description"}, {"pg_catalog", "pg_am"}, {"pg_catalog", "pg_namespace"}, + {"pg_catalog", "pg_auth_members"}, + {"pg_catalog", "pg_roles"}, {"information_schema", "tables"}, {"information_schema", "columns"}, {"information_schema", "table_constraints"}, @@ -1490,6 +1492,24 @@ struct TCatalog { {"pg_catalog", "pg_namespace", "nspname", "name"}, {"pg_catalog", "pg_namespace", "oid", "oid"}, + {"pg_catalog", "pg_auth_members", "roleid", "oid"}, + {"pg_catalog", "pg_auth_members", "member", "oid"}, + {"pg_catalog", "pg_auth_members", "grantor", "oid"}, + {"pg_catalog", "pg_auth_members", "admin_option", "bool"}, + + {"pg_catalog", "pg_roles", "rolname", "name"}, + {"pg_catalog", "pg_roles", "oid", "oid"}, + {"pg_catalog", "pg_roles", "rolbypassrls", "bool"}, + {"pg_catalog", "pg_roles", "rolcanlogin", "bool"}, + {"pg_catalog", "pg_roles", "rolconfig", "_text"}, + {"pg_catalog", "pg_roles", "rolconnlimit", "int4"}, + {"pg_catalog", "pg_roles", "rolcreatedb", "bool"}, + {"pg_catalog", "pg_roles", "rolcreaterole", "bool"}, + {"pg_catalog", "pg_roles", "rolinherit", "bool"}, + {"pg_catalog", "pg_roles", "rolreplication", "bool"}, + {"pg_catalog", "pg_roles", "rolsuper", "bool"}, + {"pg_catalog", "pg_roles", "rolvaliduntil", "timestamptz"}, + {"information_schema", "tables", "table_schema", "name"}, {"information_schema", "tables", "table_name", "name"}, diff --git a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp index ee50e147dc64..b5d3311fd40f 100644 --- a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp +++ b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp @@ -184,6 +184,20 @@ const MemoryContextMethods MkqlMethods = { #endif }; +Datum MakeArrayOfText(const TVector& arr) { + TVector elems(arr.size()); + for (size_t i = 0; i < elems.size(); ++i) { + elems[i] = (Datum)MakeVar(arr[i]); + } + + auto ret = construct_array(elems.data(), (int)arr.size(), TEXTOID, -1, false, 'i'); + for (size_t i = 0; i < elems.size(); ++i) { + pfree((void*)elems[i]); + } + + return (Datum)ret; +} + class TPgConst : public TMutableComputationNode { typedef TMutableComputationNode TBaseComputation; public: @@ -358,6 +372,27 @@ class TPgTableContent : public TMutableComputationNode { }; ApplyFillers(AllPgTablesFillers, Y_ARRAY_SIZE(AllPgTablesFillers), PgTablesFillers_); + } else if (Table_ == "pg_roles") { + static const std::pair AllPgRolesFillers[] = { + {"rolname", []() { return PointerDatumToPod((Datum)MakeFixedString("postgres", NAMEDATALEN)); }}, + {"oid", []() { return ScalarDatumToPod(ObjectIdGetDatum(1)); }}, + {"rolbypassrls", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolsuper", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolinherit", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolcreaterole", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolcreatedb", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolcanlogin", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolreplication", []() { return ScalarDatumToPod(BoolGetDatum(true)); }}, + {"rolconnlimit", []() { return ScalarDatumToPod(Int32GetDatum(-1)); }}, + {"rolvaliduntil", []() { return NUdf::TUnboxedValuePod(); }}, + {"rolconfig", []() { return PointerDatumToPod(MakeArrayOfText({ + "search_path=public", + "default_transaction_isolation=serializable", + "standard_conforming_strings=on", + })); }}, + }; + + ApplyFillers(AllPgRolesFillers, Y_ARRAY_SIZE(AllPgRolesFillers), PgRolesFillers_); } } else { if (Table_ == "tables") { @@ -559,6 +594,14 @@ class TPgTableContent : public TMutableComputationNode { rows.emplace_back(row); } + } else if (Table_ == "pg_roles") { + NUdf::TUnboxedValue* items; + auto row = compCtx.HolderFactory.CreateDirectArrayHolder(PgRolesFillers_.size(), items); + for (ui32 i = 0; i < PgRolesFillers_.size(); ++i) { + items[i] = PgRolesFillers_[i](); + } + + rows.emplace_back(row); } } else { if (Table_ == "tables") { @@ -613,6 +656,8 @@ class TPgTableContent : public TMutableComputationNode { TVector PgNamespaceFillers_; using TPgAmFiller = NUdf::TUnboxedValuePod(*)(const NPg::TAmDesc&); TVector PgAmFillers_; + using TPgRolesFiller = NUdf::TUnboxedValuePod(*)(); + TVector PgRolesFillers_; struct TDescriptionDesc { ui32 Objoid = 0; diff --git a/ydb/library/yql/tests/sql/dq_file/part11/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part11/canondata/result.json index 6399e55983f7..a14d27a795c1 100644 --- a/ydb/library/yql/tests/sql/dq_file/part11/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part11/canondata/result.json @@ -2058,6 +2058,28 @@ } ], "test.test[pg-tpch-q19-default.txt-Results]": [], + "test.test[pg_catalog-pg_roles-default.txt-Analyze]": [ + { + "checksum": "c1f2d837c3623c81dd596a9877913fb8", + "size": 948, + "uri": "https://{canondata_backend}/1942671/18f32d5eb8ab2aab65012dda63f9cfd635ed3680/resource.tar.gz#test.test_pg_catalog-pg_roles-default.txt-Analyze_/plan.txt" + } + ], + "test.test[pg_catalog-pg_roles-default.txt-Debug]": [ + { + "checksum": "2b3e29957c8a5bac294b21ccb291c57f", + "size": 645, + "uri": "https://{canondata_backend}/1942671/18f32d5eb8ab2aab65012dda63f9cfd635ed3680/resource.tar.gz#test.test_pg_catalog-pg_roles-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[pg_catalog-pg_roles-default.txt-Plan]": [ + { + "checksum": "c1f2d837c3623c81dd596a9877913fb8", + "size": 948, + "uri": "https://{canondata_backend}/1942671/18f32d5eb8ab2aab65012dda63f9cfd635ed3680/resource.tar.gz#test.test_pg_catalog-pg_roles-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_roles-default.txt-Results]": [], "test.test[produce-process_with_lambda-default.txt-Analyze]": [ { "checksum": "ebe34f5d2b86ce7954a161dc02a783aa", diff --git a/ydb/library/yql/tests/sql/dq_file/part17/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part17/canondata/result.json index ff127806ef66..127b9d24af13 100644 --- a/ydb/library/yql/tests/sql/dq_file/part17/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part17/canondata/result.json @@ -2069,6 +2069,28 @@ } ], "test.test[pg-wide_top_sort--Results]": [], + "test.test[pg_catalog-pg_auth_members-default.txt-Analyze]": [ + { + "checksum": "c1f2d837c3623c81dd596a9877913fb8", + "size": 948, + "uri": "https://{canondata_backend}/1784826/fe2bef548a55eb11e26daaded455ba74fda33a1b/resource.tar.gz#test.test_pg_catalog-pg_auth_members-default.txt-Analyze_/plan.txt" + } + ], + "test.test[pg_catalog-pg_auth_members-default.txt-Debug]": [ + { + "checksum": "89087bb5c866532507e766caadeb1947", + "size": 462, + "uri": "https://{canondata_backend}/1784826/fe2bef548a55eb11e26daaded455ba74fda33a1b/resource.tar.gz#test.test_pg_catalog-pg_auth_members-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[pg_catalog-pg_auth_members-default.txt-Plan]": [ + { + "checksum": "c1f2d837c3623c81dd596a9877913fb8", + "size": 948, + "uri": "https://{canondata_backend}/1784826/fe2bef548a55eb11e26daaded455ba74fda33a1b/resource.tar.gz#test.test_pg_catalog-pg_auth_members-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_auth_members-default.txt-Results]": [], "test.test[pg_catalog-pg_timezone_names-default.txt-Analyze]": [ { "checksum": "c1f2d837c3623c81dd596a9877913fb8", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index a4e1a060940c..3248f5f6f542 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -13257,6 +13257,13 @@ "uri": "https://{canondata_backend}/1900335/4d293a21f9bd1b76eb022a05e776cb2a96e3a5de/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_am_pg_syntax_/sql.yql" } ], + "test_sql2yql.test[pg_catalog-pg_auth_members]": [ + { + "checksum": "e87d30ebc286e1af83619ff895c8d3ad", + "size": 868, + "uri": "https://{canondata_backend}/1942671/97ffbf971de6e6c2db7e871e5dfde6d17befe266/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_auth_members_/sql.yql" + } + ], "test_sql2yql.test[pg_catalog-pg_database]": [ { "checksum": "3c66358cd738a51ccd0766e18e21fc45", @@ -13292,6 +13299,13 @@ "uri": "https://{canondata_backend}/1900335/4d293a21f9bd1b76eb022a05e776cb2a96e3a5de/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_namespace_pg_syntax_/sql.yql" } ], + "test_sql2yql.test[pg_catalog-pg_roles]": [ + { + "checksum": "132648e5428703bb0329f35ed030555c", + "size": 1561, + "uri": "https://{canondata_backend}/1942671/97ffbf971de6e6c2db7e871e5dfde6d17befe266/resource.tar.gz#test_sql2yql.test_pg_catalog-pg_roles_/sql.yql" + } + ], "test_sql2yql.test[pg_catalog-pg_set_config]": [ { "checksum": "0b00c0ffc35339caa3a22beb1e12d9af", diff --git a/ydb/library/yql/tests/sql/suites/pg_catalog/pg_auth_members.sql b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_auth_members.sql new file mode 100644 index 000000000000..7adf651ad1fa --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_auth_members.sql @@ -0,0 +1,8 @@ +--!syntax_pg +select +roleid, +member, +grantor, +admin_option +from pg_catalog.pg_auth_members + diff --git a/ydb/library/yql/tests/sql/suites/pg_catalog/pg_roles.sql b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_roles.sql new file mode 100644 index 000000000000..b8bb06ab740c --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/pg_catalog/pg_roles.sql @@ -0,0 +1,17 @@ +--!syntax_pg +select +oid, +rolbypassrls, +rolcanlogin, +rolconfig, +rolconnlimit, +rolcreatedb, +rolcreaterole, +rolinherit, +rolname, +rolreplication, +rolsuper, +rolvaliduntil +from pg_catalog.pg_roles +order by oid + diff --git a/ydb/library/yql/tests/sql/yt_native_file/part11/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part11/canondata/result.json index 1bbcedf3763c..47179a03d084 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part11/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part11/canondata/result.json @@ -1840,6 +1840,27 @@ "uri": "https://{canondata_backend}/1937027/642fd2ff53bdb0fed32ca89598d70c9c5848ac20/resource.tar.gz#test.test_pg-tpch-q19-default.txt-Results_/results.txt" } ], + "test.test[pg_catalog-pg_roles-default.txt-Debug]": [ + { + "checksum": "d5287e3a68ac9d7422c95bad2e0fcdff", + "size": 587, + "uri": "https://{canondata_backend}/1942671/ba1b384ae189e43a41610dd3346b04832beabd4c/resource.tar.gz#test.test_pg_catalog-pg_roles-default.txt-Debug_/opt.yql" + } + ], + "test.test[pg_catalog-pg_roles-default.txt-Plan]": [ + { + "checksum": "c1f2d837c3623c81dd596a9877913fb8", + "size": 948, + "uri": "https://{canondata_backend}/1942671/ba1b384ae189e43a41610dd3346b04832beabd4c/resource.tar.gz#test.test_pg_catalog-pg_roles-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_roles-default.txt-Results]": [ + { + "checksum": "bec9b807ec5e51094ba20c22b9e687b2", + "size": 4018, + "uri": "https://{canondata_backend}/1942671/ba1b384ae189e43a41610dd3346b04832beabd4c/resource.tar.gz#test.test_pg_catalog-pg_roles-default.txt-Results_/results.txt" + } + ], "test.test[produce-process_with_lambda-default.txt-Debug]": [ { "checksum": "57b040e7126bb73a5732c185709e1728", diff --git a/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json index b7845ac1c1dd..8c739704e00b 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json @@ -2386,9 +2386,9 @@ ], "test.test[pg_catalog-pg_tables-default.txt-Results]": [ { - "checksum": "184cdb7b88a0cbc27eab10f27a1f9594", - "size": 3071, - "uri": "https://{canondata_backend}/1773845/2d08ad134994d3e36dc49c3a759a1fb95cec5e61/resource.tar.gz#test.test_pg_catalog-pg_tables-default.txt-Results_/results.txt" + "checksum": "5fe341df627412345fb04a78265f2ecc", + "size": 3314, + "uri": "https://{canondata_backend}/1936273/e462bdc099ba4dbd155abc458ce19bf37225c228/resource.tar.gz#test.test_pg_catalog-pg_tables-default.txt-Results_/results.txt" } ], "test.test[produce-process_rows_sorted_desc_multi_out--Debug]": [ diff --git a/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json index c9430751fb85..d2dfd25be430 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json @@ -1888,9 +1888,9 @@ ], "test.test[pg_catalog-columns-default.txt-Results]": [ { - "checksum": "490a1e0d0509eec4920379998de15566", - "size": 13320, - "uri": "https://{canondata_backend}/1814674/d705af5d4baa19963255001d314ce2ac75be9a4a/resource.tar.gz#test.test_pg_catalog-columns-default.txt-Results_/results.txt" + "checksum": "86487c14aee284a3fc83c6565a84bd94", + "size": 16354, + "uri": "https://{canondata_backend}/1942671/557a92985829819fe7b7623859d0c502cd47d633/resource.tar.gz#test.test_pg_catalog-columns-default.txt-Results_/results.txt" } ], "test.test[pragma-config_exec--Debug]": [ diff --git a/ydb/library/yql/tests/sql/yt_native_file/part17/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part17/canondata/result.json index aa21e00a4398..f2586e9af42b 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part17/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part17/canondata/result.json @@ -1758,6 +1758,27 @@ "uri": "https://{canondata_backend}/1923547/68f2fa8e051f31489bd496c183d28c4abddf9f68/resource.tar.gz#test.test_pg-wide_top_sort--Results_/results.txt" } ], + "test.test[pg_catalog-pg_auth_members-default.txt-Debug]": [ + { + "checksum": "b9e488d1c0e8e61af71e3a3e23ec1a82", + "size": 406, + "uri": "https://{canondata_backend}/1937367/c23590248e6f206ff1c4e65a8fd7d146beaddac2/resource.tar.gz#test.test_pg_catalog-pg_auth_members-default.txt-Debug_/opt.yql" + } + ], + "test.test[pg_catalog-pg_auth_members-default.txt-Plan]": [ + { + "checksum": "c1f2d837c3623c81dd596a9877913fb8", + "size": 948, + "uri": "https://{canondata_backend}/1937367/c23590248e6f206ff1c4e65a8fd7d146beaddac2/resource.tar.gz#test.test_pg_catalog-pg_auth_members-default.txt-Plan_/plan.txt" + } + ], + "test.test[pg_catalog-pg_auth_members-default.txt-Results]": [ + { + "checksum": "996c8b0bf77e8ebd2c81587ec0ce765b", + "size": 1356, + "uri": "https://{canondata_backend}/1937367/c23590248e6f206ff1c4e65a8fd7d146beaddac2/resource.tar.gz#test.test_pg_catalog-pg_auth_members-default.txt-Results_/results.txt" + } + ], "test.test[pg_catalog-pg_timezone_names-default.txt-Debug]": [ { "checksum": "9556fc60b3df570c33b659d305caabb8", diff --git a/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json index a5e72683da35..2f50701cab9a 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json @@ -1671,9 +1671,9 @@ ], "test.test[pg_catalog-tables-default.txt-Results]": [ { - "checksum": "5f1de0e7b083d586bf8fe01f1669949f", - "size": 3074, - "uri": "https://{canondata_backend}/1880306/737f33daf0420bb9e30f0173cda634b4738e62c0/resource.tar.gz#test.test_pg_catalog-tables-default.txt-Results_/results.txt" + "checksum": "0254359781104493233a2f1c10874943", + "size": 3317, + "uri": "https://{canondata_backend}/1931696/d280ec2ad056c3381e3f7b0de5e4312affb37367/resource.tar.gz#test.test_pg_catalog-tables-default.txt-Results_/results.txt" } ], "test.test[produce-process_row_and_columns-default.txt-Debug]": [