diff --git a/ydb/library/yql/parser/pg_catalog/catalog.cpp b/ydb/library/yql/parser/pg_catalog/catalog.cpp index 59bbc1106444..80dda3e89ee9 100644 --- a/ydb/library/yql/parser/pg_catalog/catalog.cpp +++ b/ydb/library/yql/parser/pg_catalog/catalog.cpp @@ -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 regClasses({ + RegProcOid, RegProcedureOid, RegOperOid, RegOperatorOid, RegClassOid, RegTypeOid, + RegConfigOid, RegDictionaryOid, RegRoleOid, RegNamespaceOid}); + using TOperators = THashMap; using TProcs = THashMap; @@ -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)); 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 b7135a5a4db3..475cd2c9e80b 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 @@ -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", 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 a17c581a9222..f67190cfc9b8 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 @@ -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", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 9241a755e714..3646ecde8667 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -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", diff --git a/ydb/library/yql/tests/sql/suites/pg/regoids.sql b/ydb/library/yql/tests/sql/suites/pg/regoids.sql new file mode 100644 index 000000000000..adf8ac314c92 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/pg/regoids.sql @@ -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'); +*/ + 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 9eaa7d357451..a78271593030 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 @@ -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",