Skip to content

Commit

Permalink
Improved support of PG OID types (ydb-platform#6119)
Browse files Browse the repository at this point in the history
  • Loading branch information
marsaly79 authored Jul 1, 2024
1 parent 5182523 commit e2ed478
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 0 deletions.
20 changes: 20 additions & 0 deletions ydb/library/yql/parser/pg_catalog/catalog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,30 @@ namespace NYql::NPg {
constexpr ui32 FuncMaxArgs = 100;
constexpr ui32 InvalidOid = 0;
constexpr ui32 Int2VectorOid = 22;
constexpr ui32 RegProcOid = 24;
constexpr ui32 OidOid = 26;
constexpr ui32 OidVectorOid = 30;
constexpr ui32 RegProcedureOid = 2202;
constexpr ui32 RegOperOid = 2203;
constexpr ui32 RegOperatorOid = 2204;
constexpr ui32 RegClassOid = 2205;
constexpr ui32 RegTypeOid = 2206;
//constexpr ui32 AnyElementOid = 2283;
//constexpr ui32 AnyNonArrayOid = 2776;
constexpr ui32 RegConfigOid = 3734;
constexpr ui32 RegDictionaryOid = 3769;
constexpr ui32 RegNamespaceOid = 4089;
constexpr ui32 RegRoleOid = 4096;
//constexpr ui32 AnyCompatibleOid = 5077;
//constexpr ui32 AnyCompatibleArrayOid = 5078;
//constexpr ui32 AnyCompatibleNonArrayOid = 5079;

// See GetCCHashEqFuncs in PG sources
// https://doxygen.postgresql.org/catcache_8c.html#a8a2dc395011dba02c083bfbf6b87ce6c
const THashSet<ui32> regClasses({
RegProcOid, RegProcedureOid, RegOperOid, RegOperatorOid, RegClassOid, RegTypeOid,
RegConfigOid, RegDictionaryOid, RegRoleOid, RegNamespaceOid});

using TOperators = THashMap<ui32, TOperDesc>;

using TProcs = THashMap<ui32, TProcDesc>;
Expand Down Expand Up @@ -1869,6 +1886,9 @@ struct TCatalog {
for (auto& [k, v] : Types) {
if (v.TypeId != v.ArrayTypeId) {
auto lookupId = (v.TypeId == VarcharOid ? TextOid : v.TypeId);
if (regClasses.contains(lookupId)) {
lookupId = OidOid;
}
auto btreeOpClassPtr = OpClasses.FindPtr(std::make_pair(EOpClassMethod::Btree, lookupId));
if (btreeOpClassPtr) {
auto lessAmOpPtr = AmOps.FindPtr(std::make_tuple(btreeOpClassPtr->FamilyId, ui32(EBtreeAmStrategy::Less), lookupId, lookupId));
Expand Down
22 changes: 22 additions & 0 deletions ydb/library/yql/tests/sql/dq_file/part12/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -2367,6 +2367,28 @@
}
],
"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"
}
],
"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"
}
],
"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"
}
],
"test.test[pg-regoids-default.txt-Results]": [],
"test.test[pg-select_agg_expr_projection-default.txt-Analyze]": [
{
"checksum": "b4dd508a329723c74293d80f0278c705",
Expand Down
14 changes: 14 additions & 0 deletions ydb/library/yql/tests/sql/hybrid_file/part8/canondata/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -2099,6 +2099,20 @@
"uri": "https://{canondata_backend}/1923547/94f377eaa1d93890e1345ac4940cc6fa07bddd4f/resource.tar.gz#test.test_pg-range_function_scalar-default.txt-Plan_/plan.txt"
}
],
"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"
}
],
"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"
}
],
"test.test[pg-select_agg_expr_key_under_agg-default.txt-Debug]": [
{
"checksum": "e7b51b0a434200d2e01ca18d03c453d5",
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 @@ -12606,6 +12606,13 @@
"uri": "https://{canondata_backend}/1784117/d56ae82ad9d30397a41490647be1bd2124718f98/resource.tar.gz#test_sql2yql.test_pg-reflection_/sql.yql"
}
],
"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"
}
],
"test_sql2yql.test[pg-select_agg]": [
{
"checksum": "41e072bb19014620fde3d72b6c54bf1b",
Expand Down
47 changes: 47 additions & 0 deletions ydb/library/yql/tests/sql/suites/pg/regoids.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
--!syntax_pg

-- Tests for OID types
-- See https://www.postgresql.org/docs/14/datatype-oid.html

select oid, oid::regclass from pg_catalog.pg_class
where oid::regclass in ('pg_user', 'pg_group');

select oid, oid::regconfig from pg_catalog.pg_ts_config
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
select oid, oid::regoperator from pg_catalog.pg_operator
where oid::regoperator in ('=(integer,integer)', '+(float4,float8)');
*/

/*
TODO: uncomment after YQL-18712
select oid, oid::regproc from pg_catalog.pg_proc
where oid::regproc in ('int4in', 'int4out');
*/

/*
TODO: uncomment after YQL-18711
select oid, oid::regprocedure from pg_catalog.pg_proc
where oid::regprocedure in ('namein(cstring)', 'nameout(name)');
*/

select oid, oid::regrole from pg_catalog.pg_authid
where oid::regrole in ('pg_read_all_data', 'pg_write_all_data');

/*
TODO: uncomment after YQL-18713
select oid, oid::regtype from pg_catalog.pg_type
where oid::regtype in ('boolean', 'char');
*/

Original file line number Diff line number Diff line change
Expand Up @@ -2341,6 +2341,27 @@
"uri": "https://{canondata_backend}/1881367/f7c9625b9d66b51a2a5927015bd3050c9cb7f8d2/resource.tar.gz#test.test_pg-pg_types_literal_mods-default.txt-Results_/results.txt"
}
],
"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"
}
],
"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"
}
],
"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"
}
],
"test.test[pg-select_agg_expr_projection-default.txt-Debug]": [
{
"checksum": "de8b054767629ac855a79a04995f827e",
Expand Down

0 comments on commit e2ed478

Please sign in to comment.