summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMars Agliullin <[email protected]>2024-07-14 18:38:45 +0300
committerGitHub <[email protected]>2024-07-14 18:38:45 +0300
commit220d06603cdcddd0a0c4b2449a302f86137c4af8 (patch)
tree0580dce7ebee38be1a132484113320dd0ad6a347
parent38a7ef26dd27509de68226e2d1117ed6ef933646 (diff)
[PG] Init namespaces' syscache (#6655)
-rw-r--r--ydb/library/yql/parser/pg_wrapper/syscache.cpp32
-rw-r--r--ydb/library/yql/tests/sql/dq_file/part12/canondata/result.json18
-rw-r--r--ydb/library/yql/tests/sql/hybrid_file/part8/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/sql2yql/canondata/result.json6
-rw-r--r--ydb/library/yql/tests/sql/suites/pg/regoids.sql3
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json18
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]": [