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

Commit6029861

Browse files
committed
Fix DDL deparse of CREATE OPERATOR CLASS
When an implicit operator family is created, it wasn't getting reported.Make it do so.This has always been missing. Backpatch to 10.Author: Masahiko Sawada <sawada.mshk@gmail.com>Reported-by: Leslie LEMAIRE <leslie.lemaire@developpement-durable.gouv.fr>Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>Reviewed-by: Michael Paquiër <michael@paquier.xyz>Discussion:https://postgr.es/m/f74d69e151b22171e8829551b1159e77@developpement-durable.gouv.fr
1 parentb398388 commit6029861

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

‎src/backend/commands/opclasscmds.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ get_opclass_oid(Oid amID, List *opclassname, bool missing_ok)
240240
* Caller must have done permissions checks etc. already.
241241
*/
242242
staticObjectAddress
243-
CreateOpFamily(constchar*amname,constchar*opfname,Oidnamespaceoid,Oidamoid)
243+
CreateOpFamily(CreateOpFamilyStmt*stmt,constchar*opfname,
244+
Oidnamespaceoid,Oidamoid)
244245
{
245246
Oidopfamilyoid;
246247
Relationrel;
@@ -264,7 +265,7 @@ CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid am
264265
ereport(ERROR,
265266
(errcode(ERRCODE_DUPLICATE_OBJECT),
266267
errmsg("operator family \"%s\" for access method \"%s\" already exists",
267-
opfname,amname)));
268+
opfname,stmt->amname)));
268269

269270
/*
270271
* Okay, let's create the pg_opfamily entry.
@@ -312,6 +313,10 @@ CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid am
312313
/* dependency on extension */
313314
recordDependencyOnCurrentExtension(&myself, false);
314315

316+
/* Report the new operator family to possibly interested event triggers */
317+
EventTriggerCollectSimpleCommand(myself,InvalidObjectAddress,
318+
(Node*)stmt);
319+
315320
/* Post creation hook for new operator family */
316321
InvokeObjectPostCreateHook(OperatorFamilyRelationId,opfamilyoid,0);
317322

@@ -447,13 +452,17 @@ DefineOpClass(CreateOpClassStmt *stmt)
447452
}
448453
else
449454
{
455+
CreateOpFamilyStmt*opfstmt;
450456
ObjectAddresstmpAddr;
451457

458+
opfstmt=makeNode(CreateOpFamilyStmt);
459+
opfstmt->opfamilyname=stmt->opclassname;
460+
opfstmt->amname=stmt->amname;
461+
452462
/*
453463
* Create it ... again no need for more permissions ...
454464
*/
455-
tmpAddr=CreateOpFamily(stmt->amname,opcname,
456-
namespaceoid,amoid);
465+
tmpAddr=CreateOpFamily(opfstmt,opcname,namespaceoid,amoid);
457466
opfamilyoid=tmpAddr.objectId;
458467
}
459468
}
@@ -792,7 +801,7 @@ DefineOpFamily(CreateOpFamilyStmt *stmt)
792801
errmsg("must be superuser to create an operator family")));
793802

794803
/* Insert pg_opfamily catalog entry */
795-
returnCreateOpFamily(stmt->amname,opfname,namespaceoid,amoid);
804+
returnCreateOpFamily(stmt,opfname,namespaceoid,amoid);
796805
}
797806

798807

‎src/backend/tcop/utility.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,12 @@ ProcessUtilitySlow(ParseState *pstate,
17211721

17221722
caseT_CreateOpFamilyStmt:
17231723
address=DefineOpFamily((CreateOpFamilyStmt*)parsetree);
1724+
1725+
/*
1726+
* DefineOpFamily calls EventTriggerCollectSimpleCommand
1727+
* directly.
1728+
*/
1729+
commandCollected= true;
17241730
break;
17251731

17261732
caseT_CreateTransformStmt:

‎src/test/modules/test_ddl_deparse/expected/opfamily.out

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,5 @@ NOTICE: DDL test: type simple, tag CREATE OPERATOR
6464
create operator class ctype_hash_ops
6565
default for type ctype using hash as
6666
operator 1 =(ctype, ctype);
67+
NOTICE: DDL test: type simple, tag CREATE OPERATOR FAMILY
6768
NOTICE: DDL test: type create operator class, tag CREATE OPERATOR CLASS

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,11 @@ NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_10_15
476476
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_15_20 name={evttrig,part_15_20} args={}
477477
DROP TABLE a_temp_tbl;
478478
NOTICE: NORMAL: orig=t normal=f istemp=t type=table identity=pg_temp.a_temp_tbl name={pg_temp,a_temp_tbl} args={}
479+
-- CREATE OPERATOR CLASS without FAMILY clause should report
480+
-- both CREATE OPERATOR FAMILY and CREATE OPERATOR CLASS
481+
CREATE OPERATOR CLASS evttrigopclass FOR TYPE int USING btree AS STORAGE int;
482+
NOTICE: END: command_tag=CREATE OPERATOR FAMILY type=operator family identity=public.evttrigopclass USING btree
483+
NOTICE: END: command_tag=CREATE OPERATOR CLASS type=operator class identity=public.evttrigopclass USING btree
479484
DROP EVENT TRIGGER regress_event_trigger_report_dropped;
480485
DROP EVENT TRIGGER regress_event_trigger_report_end;
481486
-- only allowed from within an event trigger function, should fail

‎src/test/regress/sql/event_trigger.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,10 @@ DROP INDEX evttrig.one_idx;
337337
DROPSCHEMA evttrig CASCADE;
338338
DROPTABLE a_temp_tbl;
339339

340+
-- CREATE OPERATOR CLASS without FAMILY clause should report
341+
-- both CREATE OPERATOR FAMILY and CREATE OPERATOR CLASS
342+
CREATEOPERATOR CLASSevttrigopclass FOR TYPEint USING btreeAS STORAGEint;
343+
340344
DROP EVENT TRIGGER regress_event_trigger_report_dropped;
341345
DROP EVENT TRIGGER regress_event_trigger_report_end;
342346

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp