Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitad89a5d

Browse files
committed
Add transforms to pg_get_object_address and friends
This was missed when transforms were added by commitcac7658.Extracted from a larger patchAuthor: Michael Paquier
1 parent667912a commitad89a5d

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed

‎src/backend/catalog/objectaddress.c

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,10 @@ static const struct object_type_map
634634
/* OCLASS_POLICY */
635635
{
636636
"policy",OBJECT_POLICY
637+
},
638+
/* OCLASS_TRANSFORM */
639+
{
640+
"transform",OBJECT_TRANSFORM
637641
}
638642
};
639643

@@ -1855,7 +1859,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
18551859
* exceptions.
18561860
*/
18571861
if (type==OBJECT_TYPE||type==OBJECT_DOMAIN||type==OBJECT_CAST||
1858-
type==OBJECT_DOMCONSTRAINT)
1862+
type==OBJECT_TRANSFORM||type==OBJECT_DOMCONSTRAINT)
18591863
{
18601864
Datum*elems;
18611865
bool*nulls;
@@ -1946,6 +1950,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
19461950
caseOBJECT_CAST:
19471951
caseOBJECT_USER_MAPPING:
19481952
caseOBJECT_DEFACL:
1953+
caseOBJECT_TRANSFORM:
19491954
if (list_length(args)!=1)
19501955
ereport(ERROR,
19511956
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -3599,6 +3604,10 @@ getObjectTypeDescription(const ObjectAddress *object)
35993604
appendStringInfoString(&buffer,"policy");
36003605
break;
36013606

3607+
caseOCLASS_TRANSFORM:
3608+
appendStringInfoString(&buffer,"transform");
3609+
break;
3610+
36023611
default:
36033612
appendStringInfo(&buffer,"unrecognized %u",object->classId);
36043613
break;
@@ -4521,6 +4530,40 @@ getObjectIdentityParts(const ObjectAddress *object,
45214530
break;
45224531
}
45234532

4533+
caseOCLASS_TRANSFORM:
4534+
{
4535+
RelationtransformDesc;
4536+
HeapTupletup;
4537+
Form_pg_transformtransform;
4538+
char*transformLang;
4539+
char*transformType;
4540+
4541+
transformDesc=heap_open(TransformRelationId,AccessShareLock);
4542+
4543+
tup=get_catalog_object_by_oid(transformDesc,object->objectId);
4544+
4545+
if (!HeapTupleIsValid(tup))
4546+
elog(ERROR,"could not find tuple for transform %u",
4547+
object->objectId);
4548+
4549+
transform= (Form_pg_transform)GETSTRUCT(tup);
4550+
4551+
transformType=format_type_be_qualified(transform->trftype);
4552+
transformLang=get_language_name(transform->trflang, false);
4553+
4554+
appendStringInfo(&buffer,"for %s on language %s",
4555+
transformType,
4556+
transformLang);
4557+
if (objname)
4558+
{
4559+
*objname=list_make1(transformType);
4560+
*objargs=list_make1(pstrdup(transformLang));
4561+
}
4562+
4563+
heap_close(transformDesc,AccessShareLock);
4564+
}
4565+
break;
4566+
45244567
default:
45254568
appendStringInfo(&buffer,"unrecognized object %u %u %d",
45264569
object->classId,

‎src/test/regress/expected/object_address.out

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ CREATE SERVER "integer" FOREIGN DATA WRAPPER addr_fdw;
3232
CREATE USER MAPPING FOR regtest_addr_user SERVER "integer";
3333
ALTER DEFAULT PRIVILEGES FOR ROLE regtest_addr_user IN SCHEMA public GRANT ALL ON TABLES TO regtest_addr_user;
3434
ALTER DEFAULT PRIVILEGES FOR ROLE regtest_addr_user REVOKE DELETE ON TABLES FROM regtest_addr_user;
35+
CREATE TRANSFORM FOR int LANGUAGE SQL (
36+
FROM SQL WITH FUNCTION varchar_transform(internal),
37+
TO SQL WITH FUNCTION int4recv(internal));
3538
-- test some error cases
3639
SELECT pg_get_object_address('stone', '{}', '{}');
3740
ERROR: unrecognized object type "stone"
@@ -76,7 +79,7 @@ BEGIN
7679
('operator'), ('operator class'), ('operator family'), ('rule'), ('trigger'),
7780
('text search parser'), ('text search dictionary'),
7881
('text search template'), ('text search configuration'),
79-
('policy'), ('user mapping'), ('default acl'),
82+
('policy'), ('user mapping'), ('default acl'), ('transform'),
8083
('operator of access method'), ('function of access method')
8184
LOOP
8285
FOR names IN VALUES ('{eins}'), ('{addr_nsp, zwei}'), ('{eins, zwei, drei}')
@@ -261,6 +264,12 @@ WARNING: error for default acl,{addr_nsp,zwei},{}: argument list length must be
261264
WARNING: error for default acl,{addr_nsp,zwei},{integer}: unrecognized default ACL object type i
262265
WARNING: error for default acl,{eins,zwei,drei},{}: argument list length must be exactly 1
263266
WARNING: error for default acl,{eins,zwei,drei},{integer}: unrecognized default ACL object type i
267+
WARNING: error for transform,{eins},{}: argument list length must be exactly 1
268+
WARNING: error for transform,{eins},{integer}: type "eins" does not exist
269+
WARNING: error for transform,{addr_nsp,zwei},{}: name list length must be exactly 1
270+
WARNING: error for transform,{addr_nsp,zwei},{integer}: name list length must be exactly 1
271+
WARNING: error for transform,{eins,zwei,drei},{}: name list length must be exactly 1
272+
WARNING: error for transform,{eins,zwei,drei},{integer}: name list length must be exactly 1
264273
WARNING: error for operator of access method,{eins},{}: name list length must be at least 3
265274
WARNING: error for operator of access method,{eins},{integer}: name list length must be at least 3
266275
WARNING: error for operator of access method,{addr_nsp,zwei},{}: name list length must be at least 3
@@ -363,7 +372,8 @@ WITH objects (type, name, args) AS (VALUES
363372
('default acl', '{regtest_addr_user}', '{r}'),
364373
-- extension
365374
-- event trigger
366-
('policy', '{addr_nsp, gentable, genpol}', '{}')
375+
('policy', '{addr_nsp, gentable, genpol}', '{}'),
376+
('transform', '{int}', '{sql}')
367377
)
368378
SELECT (pg_identify_object(addr1.classid, addr1.objid, addr1.subobjid)).*,
369379
-- test roundtrip through pg_identify_object_as_address
@@ -411,11 +421,12 @@ SELECT (pg_identify_object(addr1.classid, addr1.objid, addr1.subobjid)).*,
411421
operator family | pg_catalog | integer_ops | pg_catalog.integer_ops USING btree | t
412422
policy | | | genpol on addr_nsp.gentable | t
413423
collation | pg_catalog | "default" | pg_catalog."default" | t
424+
transform | | | for integer on language sql | t
414425
text search dictionary | addr_nsp | addr_ts_dict | addr_nsp.addr_ts_dict | t
415426
text search parser | addr_nsp | addr_ts_prs | addr_nsp.addr_ts_prs | t
416427
text search configuration | addr_nsp | addr_ts_conf | addr_nsp.addr_ts_conf | t
417428
text search template | addr_nsp | addr_ts_temp | addr_nsp.addr_ts_temp | t
418-
(40 rows)
429+
(41 rows)
419430

420431
---
421432
--- Cleanup resources

‎src/test/regress/sql/object_address.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ CREATE SERVER "integer" FOREIGN DATA WRAPPER addr_fdw;
3636
CREATEUSERMAPPING FOR regtest_addr_user SERVER"integer";
3737
ALTER DEFAULT PRIVILEGES FOR ROLE regtest_addr_userIN SCHEMA publicGRANT ALLON TABLES TO regtest_addr_user;
3838
ALTER DEFAULT PRIVILEGES FOR ROLE regtest_addr_userREVOKEDELETEON TABLESFROM regtest_addr_user;
39+
CREATE TRANSFORM FORint LANGUAGE SQL (
40+
FROM SQL WITH FUNCTION varchar_transform(internal),
41+
TO SQL WITH FUNCTION int4recv(internal));
3942

4043
-- test some error cases
4144
SELECT pg_get_object_address('stone','{}','{}');
@@ -74,7 +77,7 @@ BEGIN
7477
('operator'), ('operator class'), ('operator family'), ('rule'), ('trigger'),
7578
('text search parser'), ('text search dictionary'),
7679
('text search template'), ('text search configuration'),
77-
('policy'), ('user mapping'), ('default acl'),
80+
('policy'), ('user mapping'), ('default acl'), ('transform'),
7881
('operator of access method'), ('function of access method')
7982
LOOP
8083
FOR namesINVALUES ('{eins}'), ('{addr_nsp, zwei}'), ('{eins, zwei, drei}')
@@ -162,7 +165,8 @@ WITH objects (type, name, args) AS (VALUES
162165
('default acl','{regtest_addr_user}','{r}'),
163166
-- extension
164167
-- event trigger
165-
('policy','{addr_nsp, gentable, genpol}','{}')
168+
('policy','{addr_nsp, gentable, genpol}','{}'),
169+
('transform','{int}','{sql}')
166170
)
167171
SELECT (pg_identify_object(addr1.classid,addr1.objid,addr1.subobjid)).*,
168172
-- test roundtrip through pg_identify_object_as_address

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp