6262#include "pglogical_output/hooks.h"
6363#include "parser/analyze.h"
6464#include "parser/parse_relation.h"
65+ #include "parser/parse_type.h"
66+ #include "catalog/pg_class.h"
67+ #include "catalog/pg_type.h"
6568#include "tcop/pquery.h"
6669#include "lib/ilist.h"
6770
@@ -3915,7 +3918,6 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
39153918case T_DoStmt :
39163919case T_CreateTableSpaceStmt :
39173920case T_AlterTableSpaceOptionsStmt :
3918- case T_TruncateStmt :
39193921case T_CommentStmt :
39203922case T_PrepareStmt :
39213923case T_ExecuteStmt :
@@ -3934,6 +3936,43 @@ static void MtmProcessUtility(Node *parsetree, const char *queryString,
39343936skipCommand = true;
39353937break ;
39363938
3939+ case T_CreateDomainStmt :
3940+ {
3941+ CreateDomainStmt * stmt = (CreateDomainStmt * )parsetree ;
3942+ HeapTuple typeTup ;
3943+ Form_pg_type baseType ;
3944+ Form_pg_type elementType ;
3945+ Form_pg_class pgClassStruct ;
3946+ int32 basetypeMod ;
3947+ Oid elementTypeOid ;
3948+ Oid tableOid ;
3949+ HeapTuple pgClassTuple ;
3950+ HeapTuple elementTypeTuple ;
3951+
3952+ typeTup = typenameType (NULL ,stmt -> typeName ,& basetypeMod );
3953+ baseType = (Form_pg_type )GETSTRUCT (typeTup );
3954+ elementTypeOid = baseType -> typelem ;
3955+ ReleaseSysCache (typeTup );
3956+
3957+ if (elementTypeOid == InvalidOid )
3958+ break ;
3959+
3960+ elementTypeTuple = SearchSysCache1 (TYPEOID ,elementTypeOid );
3961+ elementType = (Form_pg_type )GETSTRUCT (elementTypeTuple );
3962+ tableOid = elementType -> typrelid ;
3963+ ReleaseSysCache (elementTypeTuple );
3964+
3965+ if (tableOid == InvalidOid )
3966+ break ;
3967+
3968+ pgClassTuple = SearchSysCache1 (RELOID ,tableOid );
3969+ pgClassStruct = (Form_pg_class )GETSTRUCT (pgClassTuple );
3970+ if (pgClassStruct -> relpersistence == 't' )
3971+ MyXactAccessedTempRel = true;
3972+ ReleaseSysCache (pgClassTuple );
3973+ }
3974+ break ;
3975+
39373976case T_ExplainStmt :
39383977/*
39393978 * EXPLAIN ANALYZE can create side-effects.