Skip to content

Commit 74ce9c1

Browse files
authored
Support of database sys cache (#1817)
1 parent ad5f6fb commit 74ce9c1

File tree

7 files changed

+112
-0
lines changed

7 files changed

+112
-0
lines changed

ydb/library/yql/parser/pg_wrapper/parser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,4 +268,5 @@ extern "C" void setup_pg_thread_cleanup() {
268268
InitializeSession();
269269
work_mem = MAX_KILOBYTES; // a way to postpone spilling for tuple stores
270270
assign_max_stack_depth(1024, nullptr);
271+
MyDatabaseId = 3; // from catalog.pg_database
271272
};

ydb/library/yql/parser/pg_wrapper/syscache.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
extern "C" {
77
#include "utils/syscache.h"
8+
#include "catalog/pg_database.h"
89
#include "catalog/pg_proc.h"
910
#include "catalog/pg_type.h"
1011
#include "catalog/pg_type_d.h"
@@ -61,6 +62,7 @@ struct TSysCache {
6162
{
6263
InitializeProcs();
6364
InitializeTypes();
65+
InitializeDatabase();
6466
Arena.Release();
6567
}
6668

@@ -223,6 +225,48 @@ struct TSysCache {
223225
});
224226

225227
}
228+
229+
void InitializeDatabase() {
230+
auto& map = Maps[DATABASEOID] = std::make_unique<TSysCacheHashMap>(0, OidHasher1, OidEquals1);
231+
TupleDesc tupleDesc = CreateTemplateTupleDesc(Natts_pg_database);
232+
FillAttr(tupleDesc, Anum_pg_database_oid, OIDOID);
233+
FillAttr(tupleDesc, Anum_pg_database_datname, NAMEOID);
234+
FillAttr(tupleDesc, Anum_pg_database_datdba, OIDOID);
235+
FillAttr(tupleDesc, Anum_pg_database_encoding, INT4OID);
236+
FillAttr(tupleDesc, Anum_pg_database_datcollate, NAMEOID);
237+
FillAttr(tupleDesc, Anum_pg_database_datctype, NAMEOID);
238+
FillAttr(tupleDesc, Anum_pg_database_datistemplate, BOOLOID);
239+
FillAttr(tupleDesc, Anum_pg_database_datallowconn, BOOLOID);
240+
FillAttr(tupleDesc, Anum_pg_database_datconnlimit, INT4OID);
241+
FillAttr(tupleDesc, Anum_pg_database_datlastsysoid, OIDOID);
242+
FillAttr(tupleDesc, Anum_pg_database_datfrozenxid, XIDOID);
243+
FillAttr(tupleDesc, Anum_pg_database_datminmxid, XIDOID);
244+
FillAttr(tupleDesc, Anum_pg_database_dattablespace, OIDOID);
245+
FillAttr(tupleDesc, Anum_pg_database_datacl, ACLITEMARRAYOID);
246+
247+
for (ui32 oid = 1; oid <= 3; ++oid) {
248+
auto key = THeapTupleKey(oid, 0, 0, 0);
249+
250+
Datum values[Natts_pg_database];
251+
bool nulls[Natts_pg_database];
252+
Zero(values);
253+
std::fill_n(nulls, Natts_pg_database, true);
254+
FillDatum(Natts_pg_database, values, nulls, Anum_pg_database_oid, (Datum)oid);
255+
const char* name = nullptr;
256+
switch (oid) {
257+
case 1: name = "template1"; break;
258+
case 2: name = "template0"; break;
259+
case 3: name = "postgres"; break;
260+
}
261+
Y_ENSURE(name);
262+
FillDatum(Natts_pg_database, values, nulls, Anum_pg_database_datname, (Datum)MakeFixedString(name, NAMEDATALEN));
263+
HeapTuple h = heap_form_tuple(tupleDesc, values, nulls);
264+
auto row = (Form_pg_database) GETSTRUCT(h);
265+
Y_ENSURE(row->oid == oid);
266+
Y_ENSURE(strcmp(NameStr(row->datname), name) == 0);
267+
map->emplace(key, h);
268+
}
269+
}
226270
};
227271

228272
}

ydb/library/yql/tests/sql/dq_file/part7/canondata/result.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,6 +1819,28 @@
18191819
}
18201820
],
18211821
"test.test[order_by-presort_mem-default.txt-Results]": [],
1822+
"test.test[pg-current_database-default.txt-Analyze]": [
1823+
{
1824+
"checksum": "b4dd508a329723c74293d80f0278c705",
1825+
"size": 505,
1826+
"uri": "https://{canondata_backend}/1903885/4c5b90aa44bdc9962b284fee28b94b10f557f2ba/resource.tar.gz#test.test_pg-current_database-default.txt-Analyze_/plan.txt"
1827+
}
1828+
],
1829+
"test.test[pg-current_database-default.txt-Debug]": [
1830+
{
1831+
"checksum": "953b3e5a83085d8bb75499e87669f494",
1832+
"size": 394,
1833+
"uri": "https://{canondata_backend}/1903885/4c5b90aa44bdc9962b284fee28b94b10f557f2ba/resource.tar.gz#test.test_pg-current_database-default.txt-Debug_/opt.yql_patched"
1834+
}
1835+
],
1836+
"test.test[pg-current_database-default.txt-Plan]": [
1837+
{
1838+
"checksum": "b4dd508a329723c74293d80f0278c705",
1839+
"size": 505,
1840+
"uri": "https://{canondata_backend}/1903885/4c5b90aa44bdc9962b284fee28b94b10f557f2ba/resource.tar.gz#test.test_pg-current_database-default.txt-Plan_/plan.txt"
1841+
}
1842+
],
1843+
"test.test[pg-current_database-default.txt-Results]": [],
18221844
"test.test[pg-pg_array_literal-default.txt-Analyze]": [
18231845
{
18241846
"checksum": "b4dd508a329723c74293d80f0278c705",

ydb/library/yql/tests/sql/hybrid_file/part5/canondata/result.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1539,6 +1539,20 @@
15391539
"uri": "https://{canondata_backend}/1936947/a5f83e5d38179c14126d53519dc062cef98113ec/resource.tar.gz#test.test_pg-compare-default.txt-Plan_/plan.txt"
15401540
}
15411541
],
1542+
"test.test[pg-current_database-default.txt-Debug]": [
1543+
{
1544+
"checksum": "936c06e238c443474136648645a9a710",
1545+
"size": 393,
1546+
"uri": "https://{canondata_backend}/1936273/313b77ac54cb289ac0c886126fe9dfbb6b4d0cf6/resource.tar.gz#test.test_pg-current_database-default.txt-Debug_/opt.yql_patched"
1547+
}
1548+
],
1549+
"test.test[pg-current_database-default.txt-Plan]": [
1550+
{
1551+
"checksum": "b4dd508a329723c74293d80f0278c705",
1552+
"size": 505,
1553+
"uri": "https://{canondata_backend}/1936273/313b77ac54cb289ac0c886126fe9dfbb6b4d0cf6/resource.tar.gz#test.test_pg-current_database-default.txt-Plan_/plan.txt"
1554+
}
1555+
],
15421556
"test.test[pg-distinct_on_single_projection_order_expr-default.txt-Debug]": [
15431557
{
15441558
"checksum": "733e818c7adf4fc93d73e162f3573d4d",

ydb/library/yql/tests/sql/sql2yql/canondata/result.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10863,6 +10863,13 @@
1086310863
"uri": "https://{canondata_backend}/1936997/00f46808be87e2ae2d4ac3ac45675b659c5ace45/resource.tar.gz#test_sql2yql.test_pg-compare_/sql.yql"
1086410864
}
1086510865
],
10866+
"test_sql2yql.test[pg-current_database]": [
10867+
{
10868+
"checksum": "085bd383175d77d9c3cae4fdc479dd12",
10869+
"size": 444,
10870+
"uri": "https://{canondata_backend}/1599023/4089f30534a79f96ae4c2135d030e44eb3b05f29/resource.tar.gz#test_sql2yql.test_pg-current_database_/sql.yql"
10871+
}
10872+
],
1086610873
"test_sql2yql.test[pg-distinct_all_projection]": [
1086710874
{
1086810875
"checksum": "f10da195f5e8b7f13bd8958f880b77a7",
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
--!syntax_pg
2+
select current_database();
3+

ydb/library/yql/tests/sql/yt_native_file/part7/canondata/result.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,6 +1522,27 @@
15221522
"uri": "https://{canondata_backend}/1946324/6707647cfa387ec829af2d598f1608a04da08a21/resource.tar.gz#test.test_order_by-presort_mem-default.txt-Results_/results.txt"
15231523
}
15241524
],
1525+
"test.test[pg-current_database-default.txt-Debug]": [
1526+
{
1527+
"checksum": "9762b8c0ed8304819b1f5e8a5f9ba85a",
1528+
"size": 338,
1529+
"uri": "https://{canondata_backend}/1775059/cce861dbf81540c18f4372d28dec59de9071fa35/resource.tar.gz#test.test_pg-current_database-default.txt-Debug_/opt.yql"
1530+
}
1531+
],
1532+
"test.test[pg-current_database-default.txt-Plan]": [
1533+
{
1534+
"checksum": "b4dd508a329723c74293d80f0278c705",
1535+
"size": 505,
1536+
"uri": "https://{canondata_backend}/1775059/cce861dbf81540c18f4372d28dec59de9071fa35/resource.tar.gz#test.test_pg-current_database-default.txt-Plan_/plan.txt"
1537+
}
1538+
],
1539+
"test.test[pg-current_database-default.txt-Results]": [
1540+
{
1541+
"checksum": "d479d7417d5203ef7e9e11f2d1716a0d",
1542+
"size": 669,
1543+
"uri": "https://{canondata_backend}/1775059/cce861dbf81540c18f4372d28dec59de9071fa35/resource.tar.gz#test.test_pg-current_database-default.txt-Results_/results.txt"
1544+
}
1545+
],
15251546
"test.test[pg-pg_array_literal-default.txt-Debug]": [
15261547
{
15271548
"checksum": "c0975a45d4d0811543e205ba79f57673",

0 commit comments

Comments
 (0)