Skip to content

Commit

Permalink
Support of database sys cache (#1817)
Browse files Browse the repository at this point in the history
  • Loading branch information
vitstn authored Feb 12, 2024
1 parent ad5f6fb commit 74ce9c1
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 0 deletions.
1 change: 1 addition & 0 deletions ydb/library/yql/parser/pg_wrapper/parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,4 +268,5 @@ extern "C" void setup_pg_thread_cleanup() {
InitializeSession();
work_mem = MAX_KILOBYTES; // a way to postpone spilling for tuple stores
assign_max_stack_depth(1024, nullptr);
MyDatabaseId = 3; // from catalog.pg_database
};
44 changes: 44 additions & 0 deletions ydb/library/yql/parser/pg_wrapper/syscache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

extern "C" {
#include "utils/syscache.h"
#include "catalog/pg_database.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"
#include "catalog/pg_type_d.h"
Expand Down Expand Up @@ -61,6 +62,7 @@ struct TSysCache {
{
InitializeProcs();
InitializeTypes();
InitializeDatabase();
Arena.Release();
}

Expand Down Expand Up @@ -223,6 +225,48 @@ struct TSysCache {
});

}

void InitializeDatabase() {
auto& map = Maps[DATABASEOID] = std::make_unique<TSysCacheHashMap>(0, OidHasher1, OidEquals1);
TupleDesc tupleDesc = CreateTemplateTupleDesc(Natts_pg_database);
FillAttr(tupleDesc, Anum_pg_database_oid, OIDOID);
FillAttr(tupleDesc, Anum_pg_database_datname, NAMEOID);
FillAttr(tupleDesc, Anum_pg_database_datdba, OIDOID);
FillAttr(tupleDesc, Anum_pg_database_encoding, INT4OID);
FillAttr(tupleDesc, Anum_pg_database_datcollate, NAMEOID);
FillAttr(tupleDesc, Anum_pg_database_datctype, NAMEOID);
FillAttr(tupleDesc, Anum_pg_database_datistemplate, BOOLOID);
FillAttr(tupleDesc, Anum_pg_database_datallowconn, BOOLOID);
FillAttr(tupleDesc, Anum_pg_database_datconnlimit, INT4OID);
FillAttr(tupleDesc, Anum_pg_database_datlastsysoid, OIDOID);
FillAttr(tupleDesc, Anum_pg_database_datfrozenxid, XIDOID);
FillAttr(tupleDesc, Anum_pg_database_datminmxid, XIDOID);
FillAttr(tupleDesc, Anum_pg_database_dattablespace, OIDOID);
FillAttr(tupleDesc, Anum_pg_database_datacl, ACLITEMARRAYOID);

for (ui32 oid = 1; oid <= 3; ++oid) {
auto key = THeapTupleKey(oid, 0, 0, 0);

Datum values[Natts_pg_database];
bool nulls[Natts_pg_database];
Zero(values);
std::fill_n(nulls, Natts_pg_database, true);
FillDatum(Natts_pg_database, values, nulls, Anum_pg_database_oid, (Datum)oid);
const char* name = nullptr;
switch (oid) {
case 1: name = "template1"; break;
case 2: name = "template0"; break;
case 3: name = "postgres"; break;
}
Y_ENSURE(name);
FillDatum(Natts_pg_database, values, nulls, Anum_pg_database_datname, (Datum)MakeFixedString(name, NAMEDATALEN));
HeapTuple h = heap_form_tuple(tupleDesc, values, nulls);
auto row = (Form_pg_database) GETSTRUCT(h);
Y_ENSURE(row->oid == oid);
Y_ENSURE(strcmp(NameStr(row->datname), name) == 0);
map->emplace(key, h);
}
}
};

}
Expand Down
22 changes: 22 additions & 0 deletions ydb/library/yql/tests/sql/dq_file/part7/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,28 @@
}
],
"test.test[order_by-presort_mem-default.txt-Results]": [],
"test.test[pg-current_database-default.txt-Analyze]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
"size": 505,
"uri": "https://{canondata_backend}/1903885/4c5b90aa44bdc9962b284fee28b94b10f557f2ba/resource.tar.gz#test.test_pg-current_database-default.txt-Analyze_/plan.txt"
}
],
"test.test[pg-current_database-default.txt-Debug]": [
{
"checksum": "953b3e5a83085d8bb75499e87669f494",
"size": 394,
"uri": "https://{canondata_backend}/1903885/4c5b90aa44bdc9962b284fee28b94b10f557f2ba/resource.tar.gz#test.test_pg-current_database-default.txt-Debug_/opt.yql_patched"
}
],
"test.test[pg-current_database-default.txt-Plan]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
"size": 505,
"uri": "https://{canondata_backend}/1903885/4c5b90aa44bdc9962b284fee28b94b10f557f2ba/resource.tar.gz#test.test_pg-current_database-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-current_database-default.txt-Results]": [],
"test.test[pg-pg_array_literal-default.txt-Analyze]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
Expand Down
14 changes: 14 additions & 0 deletions ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -1539,6 +1539,20 @@
"uri": "https://{canondata_backend}/1936947/a5f83e5d38179c14126d53519dc062cef98113ec/resource.tar.gz#test.test_pg-compare-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-current_database-default.txt-Debug]": [
{
"checksum": "936c06e238c443474136648645a9a710",
"size": 393,
"uri": "https://{canondata_backend}/1936273/313b77ac54cb289ac0c886126fe9dfbb6b4d0cf6/resource.tar.gz#test.test_pg-current_database-default.txt-Debug_/opt.yql_patched"
}
],
"test.test[pg-current_database-default.txt-Plan]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
"size": 505,
"uri": "https://{canondata_backend}/1936273/313b77ac54cb289ac0c886126fe9dfbb6b4d0cf6/resource.tar.gz#test.test_pg-current_database-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-distinct_on_single_projection_order_expr-default.txt-Debug]": [
{
"checksum": "733e818c7adf4fc93d73e162f3573d4d",
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 @@ -10863,6 +10863,13 @@
"uri": "https://{canondata_backend}/1936997/00f46808be87e2ae2d4ac3ac45675b659c5ace45/resource.tar.gz#test_sql2yql.test_pg-compare_/sql.yql"
}
],
"test_sql2yql.test[pg-current_database]": [
{
"checksum": "085bd383175d77d9c3cae4fdc479dd12",
"size": 444,
"uri": "https://{canondata_backend}/1599023/4089f30534a79f96ae4c2135d030e44eb3b05f29/resource.tar.gz#test_sql2yql.test_pg-current_database_/sql.yql"
}
],
"test_sql2yql.test[pg-distinct_all_projection]": [
{
"checksum": "f10da195f5e8b7f13bd8958f880b77a7",
Expand Down
3 changes: 3 additions & 0 deletions ydb/library/yql/tests/sql/suites/pg/current_database.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
--!syntax_pg
select current_database();

Original file line number Diff line number Diff line change
Expand Up @@ -1522,6 +1522,27 @@
"uri": "https://{canondata_backend}/1946324/6707647cfa387ec829af2d598f1608a04da08a21/resource.tar.gz#test.test_order_by-presort_mem-default.txt-Results_/results.txt"
}
],
"test.test[pg-current_database-default.txt-Debug]": [
{
"checksum": "9762b8c0ed8304819b1f5e8a5f9ba85a",
"size": 338,
"uri": "https://{canondata_backend}/1775059/cce861dbf81540c18f4372d28dec59de9071fa35/resource.tar.gz#test.test_pg-current_database-default.txt-Debug_/opt.yql"
}
],
"test.test[pg-current_database-default.txt-Plan]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
"size": 505,
"uri": "https://{canondata_backend}/1775059/cce861dbf81540c18f4372d28dec59de9071fa35/resource.tar.gz#test.test_pg-current_database-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-current_database-default.txt-Results]": [
{
"checksum": "d479d7417d5203ef7e9e11f2d1716a0d",
"size": 669,
"uri": "https://{canondata_backend}/1775059/cce861dbf81540c18f4372d28dec59de9071fa35/resource.tar.gz#test.test_pg-current_database-default.txt-Results_/results.txt"
}
],
"test.test[pg-pg_array_literal-default.txt-Debug]": [
{
"checksum": "c0975a45d4d0811543e205ba79f57673",
Expand Down

0 comments on commit 74ce9c1

Please sign in to comment.