aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Stoyan <vvvv@ydb.tech>2024-01-30 19:17:05 +0300
committerGitHub <noreply@github.com>2024-01-30 19:17:05 +0300
commitf136fc737b1baf646fd0d6640e2d98646e716c12 (patch)
tree8e5d1545a78fa46c32973753002af6bb1551fd35
parent9de503c0c8711297f391fd055eababe3de657353 (diff)
downloadydb-f136fc737b1baf646fd0d6640e2d98646e716c12.tar.gz
YQL-17348 pg_auth_members, YQL-17351 pg_roles (#1418)
* init * style
-rw-r--r--ydb/library/yql/parser/pg_catalog/catalog.cpp20
-rw-r--r--ydb/library/yql/parser/pg_wrapper/comp_factory.cpp45
-rw-r--r--ydb/library/yql/tests/sql/dq_file/part11/canondata/result.json22
-rw-r--r--ydb/library/yql/tests/sql/dq_file/part17/canondata/result.json22
-rw-r--r--ydb/library/yql/tests/sql/sql2yql/canondata/result.json14
-rw-r--r--ydb/library/yql/tests/sql/suites/pg_catalog/pg_auth_members.sql8
-rw-r--r--ydb/library/yql/tests/sql/suites/pg_catalog/pg_roles.sql17
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part11/canondata/result.json21
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part14/canondata/result.json6
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json6
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part17/canondata/result.json21
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json6
12 files changed, 199 insertions, 9 deletions
diff --git a/ydb/library/yql/parser/pg_catalog/catalog.cpp b/ydb/library/yql/parser/pg_catalog/catalog.cpp
index f4f439af5a..f0b3f2bbc3 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 ee50e147dc..b5d3311fd4 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<TString>& arr) {
+ TVector<Datum> 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<TPgConst> {
typedef TMutableComputationNode<TPgConst> TBaseComputation;
public:
@@ -358,6 +372,27 @@ public:
};
ApplyFillers(AllPgTablesFillers, Y_ARRAY_SIZE(AllPgTablesFillers), PgTablesFillers_);
+ } else if (Table_ == "pg_roles") {
+ static const std::pair<const char*, TPgRolesFiller> 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 @@ public:
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 @@ private:
TVector<TPgNamespaceFiller> PgNamespaceFillers_;
using TPgAmFiller = NUdf::TUnboxedValuePod(*)(const NPg::TAmDesc&);
TVector<TPgAmFiller> PgAmFillers_;
+ using TPgRolesFiller = NUdf::TUnboxedValuePod(*)();
+ TVector<TPgRolesFiller> 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 6399e55983..a14d27a795 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 ff127806ef..127b9d24af 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 a4e1a06094..3248f5f6f5 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 0000000000..7adf651ad1
--- /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 0000000000..b8bb06ab74
--- /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 1bbcedf376..47179a03d0 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 b7845ac1c1..8c739704e0 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 c9430751fb..d2dfd25be4 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 aa21e00a43..f2586e9af4 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 a5e72683da..2f50701cab 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]": [