diff options
| author | Mars Agliullin <[email protected]> | 2024-07-14 18:38:45 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-07-14 18:38:45 +0300 |
| commit | 220d06603cdcddd0a0c4b2449a302f86137c4af8 (patch) | |
| tree | 0580dce7ebee38be1a132484113320dd0ad6a347 | |
| parent | 38a7ef26dd27509de68226e2d1117ed6ef933646 (diff) | |
[PG] Init namespaces' syscache (#6655)
6 files changed, 58 insertions, 31 deletions
diff --git a/ydb/library/yql/parser/pg_wrapper/syscache.cpp b/ydb/library/yql/parser/pg_wrapper/syscache.cpp index 8fa680c6c08..0502d5a18d1 100644 --- a/ydb/library/yql/parser/pg_wrapper/syscache.cpp +++ b/ydb/library/yql/parser/pg_wrapper/syscache.cpp @@ -204,6 +204,7 @@ struct TSysCache { InitializeDatabase(); InitializeAuthId(); InitializeNameNamespaces(); + InitializeRelNameNamespaces(); for (auto& item : Items) { if (item) { item->FinalizeRangeMaps(); @@ -629,7 +630,7 @@ struct TSysCache { cacheItem->PgThreadContextLookup = std::move(threadContextLookup); } - void InitializeNameNamespaces() { + void InitializeRelNameNamespaces() { TupleDesc tupleDesc = CreateTemplateTupleDesc(Natts_pg_class); FillAttr(tupleDesc, Anum_pg_class_oid, OIDOID); FillAttr(tupleDesc, Anum_pg_class_relname, NAMEOID); @@ -690,6 +691,35 @@ struct TSysCache { lookupMap.emplace(key, h); } } + + void InitializeNameNamespaces() { + TupleDesc tupleDesc = CreateTemplateTupleDesc(Natts_pg_namespace); + FillAttr(tupleDesc, Anum_pg_namespace_oid, OIDOID); + FillAttr(tupleDesc, Anum_pg_namespace_nspname, NAMEOID); + FillAttr(tupleDesc, Anum_pg_namespace_nspowner, OIDOID); + FillAttr(tupleDesc, Anum_pg_namespace_nspacl, ACLITEMARRAYOID); + auto& cacheItem = Items[NAMESPACENAME] = std::make_unique<TSysCacheItem>(NsNameHasher, NsNameEquals, tupleDesc); + auto& lookupMap = cacheItem->LookupMap; + + NPg::EnumNamespace([&](ui32 oid, const NPg::TNamespaceDesc& desc) { + Datum values[Natts_pg_namespace]; + bool nulls[Natts_pg_namespace]; + Zero(values); + std::fill_n(nulls, Natts_pg_namespace, true); + FillDatum(Natts_pg_namespace, values, nulls, Anum_pg_namespace_oid, oid); + auto name = MakeFixedString(desc.Name, NAMEDATALEN); + FillDatum(Natts_pg_namespace, values, nulls, Anum_pg_namespace_nspname, (Datum)name); + FillDatum(Natts_pg_namespace, values, nulls, Anum_pg_namespace_nspowner, (Datum)1); + HeapTuple h = heap_form_tuple(tupleDesc, values, nulls); + auto row = (Form_pg_namespace)GETSTRUCT(h); + Y_ENSURE(row->oid == oid); + Y_ENSURE(NameStr(row->nspname) == desc.Name); + Y_ENSURE(row->nspowner == 1); + + auto key = THeapTupleKey((Datum)name, 0, 0, 0); + lookupMap.emplace(key, h); + }); + } }; } diff --git a/ydb/library/yql/tests/sql/dq_file/part12/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part12/canondata/result.json index 475cd2c9e80..0b38d7df57b 100644 --- a/ydb/library/yql/tests/sql/dq_file/part12/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part12/canondata/result.json @@ -2369,23 +2369,23 @@ "test.test[pg-pg_types_literal_mods-default.txt-Results]": [], "test.test[pg-regoids-default.txt-Analyze]": [ { - "checksum": "c75a08990cadfbd737032e6229f34bd2", - "size": 2175, - "uri": "https://{canondata_backend}/1937150/beadc034e6d1974bf335a714f22ddc0f477a2f6f/resource.tar.gz#test.test_pg-regoids-default.txt-Analyze_/plan.txt" + "checksum": "7841f32f3b9cc9e0c539c8482b058c78", + "size": 2588, + "uri": "https://{canondata_backend}/1847551/e0a8e24122315ced755797fc5a2fd65992e28ce2/resource.tar.gz#test.test_pg-regoids-default.txt-Analyze_/plan.txt" } ], "test.test[pg-regoids-default.txt-Debug]": [ { - "checksum": "64bb16326046a17a014b8d8a32c6ef61", - "size": 2213, - "uri": "https://{canondata_backend}/1937150/beadc034e6d1974bf335a714f22ddc0f477a2f6f/resource.tar.gz#test.test_pg-regoids-default.txt-Debug_/opt.yql_patched" + "checksum": "ee2fc733842210b5a388bf1b261be7f4", + "size": 2675, + "uri": "https://{canondata_backend}/1847551/e0a8e24122315ced755797fc5a2fd65992e28ce2/resource.tar.gz#test.test_pg-regoids-default.txt-Debug_/opt.yql_patched" } ], "test.test[pg-regoids-default.txt-Plan]": [ { - "checksum": "c75a08990cadfbd737032e6229f34bd2", - "size": 2175, - "uri": "https://{canondata_backend}/1937150/beadc034e6d1974bf335a714f22ddc0f477a2f6f/resource.tar.gz#test.test_pg-regoids-default.txt-Plan_/plan.txt" + "checksum": "7841f32f3b9cc9e0c539c8482b058c78", + "size": 2588, + "uri": "https://{canondata_backend}/1847551/e0a8e24122315ced755797fc5a2fd65992e28ce2/resource.tar.gz#test.test_pg-regoids-default.txt-Plan_/plan.txt" } ], "test.test[pg-regoids-default.txt-Results]": [], diff --git a/ydb/library/yql/tests/sql/hybrid_file/part8/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part8/canondata/result.json index 332cf6340d1..5c17d019225 100644 --- a/ydb/library/yql/tests/sql/hybrid_file/part8/canondata/result.json +++ b/ydb/library/yql/tests/sql/hybrid_file/part8/canondata/result.json @@ -2101,16 +2101,16 @@ ], "test.test[pg-regoids-default.txt-Debug]": [ { - "checksum": "b82484391878d68a54f5ad41ccc81697", - "size": 2212, - "uri": "https://{canondata_backend}/1942671/1e5e3ca34f9681802533dd848f1f6b8cdfb09f35/resource.tar.gz#test.test_pg-regoids-default.txt-Debug_/opt.yql_patched" + "checksum": "61fa3018e8c01783f73a0b2890b03243", + "size": 2674, + "uri": "https://{canondata_backend}/1931696/564c43f4aa944aa26e85d54f2d25c16b9ce359f6/resource.tar.gz#test.test_pg-regoids-default.txt-Debug_/opt.yql_patched" } ], "test.test[pg-regoids-default.txt-Plan]": [ { - "checksum": "c75a08990cadfbd737032e6229f34bd2", - "size": 2175, - "uri": "https://{canondata_backend}/1942671/1e5e3ca34f9681802533dd848f1f6b8cdfb09f35/resource.tar.gz#test.test_pg-regoids-default.txt-Plan_/plan.txt" + "checksum": "7841f32f3b9cc9e0c539c8482b058c78", + "size": 2588, + "uri": "https://{canondata_backend}/1931696/564c43f4aa944aa26e85d54f2d25c16b9ce359f6/resource.tar.gz#test.test_pg-regoids-default.txt-Plan_/plan.txt" } ], "test.test[pg-select_agg_expr_key_under_agg-default.txt-Debug]": [ diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 4682644b6c1..dfe66b121d6 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -12629,9 +12629,9 @@ ], "test_sql2yql.test[pg-regoids]": [ { - "checksum": "eab738419cb09d84413280147d5ebbe2", - "size": 3386, - "uri": "https://{canondata_backend}/1942415/fef0599b6207585cd5b6635353bbb33968e87399/resource.tar.gz#test_sql2yql.test_pg-regoids_/sql.yql" + "checksum": "cfee748ff3069e2026aa878742187dd1", + "size": 4216, + "uri": "https://{canondata_backend}/1600758/02851b6238039a3162d6f222d34d79a59e24c249/resource.tar.gz#test_sql2yql.test_pg-regoids_/sql.yql" } ], "test_sql2yql.test[pg-select_agg]": [ diff --git a/ydb/library/yql/tests/sql/suites/pg/regoids.sql b/ydb/library/yql/tests/sql/suites/pg/regoids.sql index adf8ac314c9..c0b14dfdd51 100644 --- a/ydb/library/yql/tests/sql/suites/pg/regoids.sql +++ b/ydb/library/yql/tests/sql/suites/pg/regoids.sql @@ -12,11 +12,8 @@ where oid::regconfig in ('english', 'russian'); select oid, oid::regdictionary from pg_catalog.pg_ts_dict where oid::regdictionary in ('irish_stem', 'italian_stem'); -/* -TODO: uncomment after YQL-18708 select oid, oid::regnamespace from pg_catalog.pg_namespace where oid::regnamespace in ('public', 'information_schema'); -*/ /* TODO: uncomment after YQL-18711 diff --git a/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json index e7fac592e0b..554aafb64ef 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json @@ -2394,23 +2394,23 @@ ], "test.test[pg-regoids-default.txt-Debug]": [ { - "checksum": "27c1c2051b551466250bba3a21581078", - "size": 2150, - "uri": "https://{canondata_backend}/1903885/617304aadf974b6c0e5180b5a91fdeffa57b46a7/resource.tar.gz#test.test_pg-regoids-default.txt-Debug_/opt.yql" + "checksum": "e4e672f001b1de0fbe764c37471c9257", + "size": 2611, + "uri": "https://{canondata_backend}/1936842/a75e37463ca09039e8afc74312a00834b6c1a897/resource.tar.gz#test.test_pg-regoids-default.txt-Debug_/opt.yql" } ], "test.test[pg-regoids-default.txt-Plan]": [ { - "checksum": "c75a08990cadfbd737032e6229f34bd2", - "size": 2175, - "uri": "https://{canondata_backend}/1903885/617304aadf974b6c0e5180b5a91fdeffa57b46a7/resource.tar.gz#test.test_pg-regoids-default.txt-Plan_/plan.txt" + "checksum": "7841f32f3b9cc9e0c539c8482b058c78", + "size": 2588, + "uri": "https://{canondata_backend}/1936842/a75e37463ca09039e8afc74312a00834b6c1a897/resource.tar.gz#test.test_pg-regoids-default.txt-Plan_/plan.txt" } ], "test.test[pg-regoids-default.txt-Results]": [ { - "checksum": "728a7658b849d6e054a39838c65e2228", - "size": 4129, - "uri": "https://{canondata_backend}/1903885/617304aadf974b6c0e5180b5a91fdeffa57b46a7/resource.tar.gz#test.test_pg-regoids-default.txt-Results_/results.txt" + "checksum": "20e29a6190d7658116ecafdd4d53b015", + "size": 5302, + "uri": "https://{canondata_backend}/1936842/a75e37463ca09039e8afc74312a00834b6c1a897/resource.tar.gz#test.test_pg-regoids-default.txt-Results_/results.txt" } ], "test.test[pg-select_agg_expr_projection-default.txt-Debug]": [ |
