Fixes indentation

pull/7270/head
gindibay 2023-10-04 13:32:39 +03:00
parent 1e7c18cb61
commit cef9ac702e
7 changed files with 487 additions and 422 deletions

View File

@ -37,33 +37,33 @@
#include "distributed/adaptive_executor.h" #include "distributed/adaptive_executor.h"
/* macros to add DefElems to a list */ /* macros to add DefElems to a list */
#define DEFELEM_ADD_STRING(options, key, value) \ #define DEFELEM_ADD_STRING(options, key, value) \
{ \ { \
DefElem *elem = makeDefElem(key, (Node *)makeString(value), -1); \ DefElem *elem = makeDefElem(key, (Node *) makeString(value), -1); \
options = lappend(options, elem); \ options = lappend(options, elem); \
} }
#define DEFELEM_ADD_BOOL(options, key, value) \ #define DEFELEM_ADD_BOOL(options, key, value) \
{ \ { \
DefElem *elem = makeDefElem(key, (Node *)makeBoolean(value), -1); \ DefElem *elem = makeDefElem(key, (Node *) makeBoolean(value), -1); \
options = lappend(options, elem); \ options = lappend(options, elem); \
} }
#define DEFELEM_ADD_INT(options, key, value) \ #define DEFELEM_ADD_INT(options, key, value) \
{ \ { \
DefElem *elem = makeDefElem(key, (Node *)makeInteger(value), -1); \ DefElem *elem = makeDefElem(key, (Node *) makeInteger(value), -1); \
options = lappend(options, elem); \ options = lappend(options, elem); \
} }
static AlterOwnerStmt *RecreateAlterDatabaseOwnerStmt(Oid databaseOid); static AlterOwnerStmt * RecreateAlterDatabaseOwnerStmt(Oid databaseOid);
static List *CreateDDLTaskList(char *command, List *workerNodeList, static List * CreateDDLTaskList(char *command, List *workerNodeList,
bool outsideTransaction); bool outsideTransaction);
PG_FUNCTION_INFO_V1(citus_internal_database_command); PG_FUNCTION_INFO_V1(citus_internal_database_command);
static Oid get_database_owner(Oid db_oid); static Oid get_database_owner(Oid db_oid);
List *PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString, List * PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
/* controlled via GUC */ /* controlled via GUC */
bool EnableCreateDatabasePropagation = true; bool EnableCreateDatabasePropagation = true;
@ -79,13 +79,14 @@ AlterDatabaseOwnerObjectAddress(Node *node, bool missing_ok, bool isPostprocess)
AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node); AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node);
Assert(stmt->objectType == OBJECT_DATABASE); Assert(stmt->objectType == OBJECT_DATABASE);
Oid databaseOid = get_database_oid(strVal((String *)stmt->object), missing_ok); Oid databaseOid = get_database_oid(strVal((String *) stmt->object), missing_ok);
ObjectAddress *address = palloc0(sizeof(ObjectAddress)); ObjectAddress *address = palloc0(sizeof(ObjectAddress));
ObjectAddressSet(*address, DatabaseRelationId, databaseOid); ObjectAddressSet(*address, DatabaseRelationId, databaseOid);
return list_make1(address); return list_make1(address);
} }
/* /*
* DatabaseOwnerDDLCommands returns a list of sql statements to idempotently apply a * DatabaseOwnerDDLCommands returns a list of sql statements to idempotently apply a
* change of the database owner on the workers so that the database is owned by the same * change of the database owner on the workers so that the database is owned by the same
@ -94,10 +95,11 @@ AlterDatabaseOwnerObjectAddress(Node *node, bool missing_ok, bool isPostprocess)
List * List *
DatabaseOwnerDDLCommands(const ObjectAddress *address) DatabaseOwnerDDLCommands(const ObjectAddress *address)
{ {
Node *stmt = (Node *)RecreateAlterDatabaseOwnerStmt(address->objectId); Node *stmt = (Node *) RecreateAlterDatabaseOwnerStmt(address->objectId);
return list_make1(DeparseTreeNode(stmt)); return list_make1(DeparseTreeNode(stmt));
} }
/* /*
* RecreateAlterDatabaseOwnerStmt creates an AlterOwnerStmt that represents the operation * RecreateAlterDatabaseOwnerStmt creates an AlterOwnerStmt that represents the operation
* of changing the owner of the database to its current owner. * of changing the owner of the database to its current owner.
@ -108,7 +110,7 @@ RecreateAlterDatabaseOwnerStmt(Oid databaseOid)
AlterOwnerStmt *stmt = makeNode(AlterOwnerStmt); AlterOwnerStmt *stmt = makeNode(AlterOwnerStmt);
stmt->objectType = OBJECT_DATABASE; stmt->objectType = OBJECT_DATABASE;
stmt->object = (Node *)makeString(get_database_name(databaseOid)); stmt->object = (Node *) makeString(get_database_name(databaseOid));
Oid ownerOid = get_database_owner(databaseOid); Oid ownerOid = get_database_owner(databaseOid);
stmt->newowner = makeNode(RoleSpec); stmt->newowner = makeNode(RoleSpec);
@ -118,6 +120,7 @@ RecreateAlterDatabaseOwnerStmt(Oid databaseOid)
return stmt; return stmt;
} }
/* /*
* get_database_owner returns the Oid of the role owning the database * get_database_owner returns the Oid of the role owning the database
*/ */
@ -131,13 +134,14 @@ get_database_owner(Oid db_oid)
errmsg("database with OID %u does not exist", db_oid))); errmsg("database with OID %u does not exist", db_oid)));
} }
Oid dba = ((Form_pg_database)GETSTRUCT(tuple))->datdba; Oid dba = ((Form_pg_database) GETSTRUCT(tuple))->datdba;
ReleaseSysCache(tuple); ReleaseSysCache(tuple);
return dba; return dba;
} }
/* /*
* PreprocessGrantOnDatabaseStmt is executed before the statement is applied to the local * PreprocessGrantOnDatabaseStmt is executed before the statement is applied to the local
* postgres instance. * postgres instance.
@ -166,15 +170,16 @@ PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString,
EnsureCoordinator(); EnsureCoordinator();
char *sql = DeparseTreeNode((Node *)stmt); char *sql = DeparseTreeNode((Node *) stmt);
List *commands = list_make3(DISABLE_DDL_PROPAGATION, List *commands = list_make3(DISABLE_DDL_PROPAGATION,
(void *)sql, (void *) sql,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
} }
/* /*
* PreprocessAlterDatabaseStmt is executed before the statement is applied to the local * PreprocessAlterDatabaseStmt is executed before the statement is applied to the local
* postgres instance. * postgres instance.
@ -195,15 +200,16 @@ PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
EnsureCoordinator(); EnsureCoordinator();
char *sql = DeparseTreeNode((Node *)stmt); char *sql = DeparseTreeNode((Node *) stmt);
List *commands = list_make3(DISABLE_DDL_PROPAGATION, List *commands = list_make3(DISABLE_DDL_PROPAGATION,
(void *)sql, (void *) sql,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
} }
#if PG_VERSION_NUM >= PG_VERSION_15 #if PG_VERSION_NUM >= PG_VERSION_15
/* /*
@ -226,15 +232,16 @@ PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
EnsureCoordinator(); EnsureCoordinator();
char *sql = DeparseTreeNode((Node *)stmt); char *sql = DeparseTreeNode((Node *) stmt);
List *commands = list_make3(DISABLE_DDL_PROPAGATION, List *commands = list_make3(DISABLE_DDL_PROPAGATION,
(void *)sql, (void *) sql,
ENABLE_DDL_PROPAGATION); ENABLE_DDL_PROPAGATION);
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands); return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
} }
#endif #endif
/* /*
@ -320,7 +327,8 @@ PostprocessCreateDatabaseStmt(Node *node, const char *queryString)
* *
* We do not do this right now because of the AssignDatabaseToShard at the end. * We do not do this right now because of the AssignDatabaseToShard at the end.
*/ */
List *workerNodes = TargetWorkerSetNodeList(NON_COORDINATOR_METADATA_NODES, RowShareLock); List *workerNodes = TargetWorkerSetNodeList(NON_COORDINATOR_METADATA_NODES,
RowShareLock);
if (list_length(workerNodes) > 0) if (list_length(workerNodes) > 0)
{ {
char *createDatabaseCommand = DeparseTreeNode(node); char *createDatabaseCommand = DeparseTreeNode(node);
@ -345,21 +353,22 @@ PostprocessCreateDatabaseStmt(Node *node, const char *queryString)
} }
/* synchronize pg_dist_object records */ /* synchronize pg_dist_object records */
ObjectAddress dbAddress = {0}; ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid); ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
MarkObjectDistributed(&dbAddress); MarkObjectDistributed(&dbAddress);
return NIL; return NIL;
} }
/* /*
* citus_internal_database_command is an internal UDF to * citus_internal_database_command is an internal UDF to
* create/drop a database in an idempotent maner without * create/drop a database in an idempotent maner without
* transaction block restrictions. * transaction block restrictions.
*/ */
Datum citus_internal_database_command(PG_FUNCTION_ARGS) Datum
citus_internal_database_command(PG_FUNCTION_ARGS)
{ {
int saveNestLevel = NewGUCNestLevel(); int saveNestLevel = NewGUCNestLevel();
text *commandText = PG_GETARG_TEXT_P(0); text *commandText = PG_GETARG_TEXT_P(0);
@ -367,7 +376,7 @@ Datum citus_internal_database_command(PG_FUNCTION_ARGS)
Node *parseTree = ParseTreeNode(command); Node *parseTree = ParseTreeNode(command);
ereport(NOTICE, (errmsg("test internal pre"), ereport(NOTICE, (errmsg("test internal pre"),
errhint("test pre hint"))); errhint("test pre hint")));
set_config_option("citus.enable_ddl_propagation", "off", set_config_option("citus.enable_ddl_propagation", "off",
(superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION,
@ -386,7 +395,7 @@ Datum citus_internal_database_command(PG_FUNCTION_ARGS)
if (!OidIsValid(databaseOid)) if (!OidIsValid(databaseOid))
{ {
createdb(NULL, (CreatedbStmt *)parseTree); createdb(NULL, (CreatedbStmt *) parseTree);
} }
else else
{ {
@ -407,7 +416,7 @@ Datum citus_internal_database_command(PG_FUNCTION_ARGS)
else else
{ {
/* remove database from pg_dist_object */ /* remove database from pg_dist_object */
ObjectAddress dbAddress = {0}; ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid); ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
if (IsObjectDistributed(&dbAddress)) if (IsObjectDistributed(&dbAddress))
@ -415,10 +424,10 @@ Datum citus_internal_database_command(PG_FUNCTION_ARGS)
UnmarkObjectDistributed(&dbAddress); UnmarkObjectDistributed(&dbAddress);
} }
// /* remove database from database shards */ /* / * remove database from database shards * / */
// DeleteDatabaseShardByDatabaseIdLocally(databaseOid); /* DeleteDatabaseShardByDatabaseIdLocally(databaseOid); */
DropDatabase(NULL, (DropdbStmt *)parseTree); DropDatabase(NULL, (DropdbStmt *) parseTree);
} }
} }
else else
@ -431,6 +440,7 @@ Datum citus_internal_database_command(PG_FUNCTION_ARGS)
PG_RETURN_VOID(); PG_RETURN_VOID();
} }
List * List *
PreprocessDropDatabaseStmt(Node *node, const char *queryString, PreprocessDropDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext) ProcessUtilityContext processUtilityContext)
@ -440,7 +450,7 @@ PreprocessDropDatabaseStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
DropdbStmt *stmt = (DropdbStmt *)node; DropdbStmt *stmt = (DropdbStmt *) node;
char *databaseName = stmt->dbname; char *databaseName = stmt->dbname;
bool missingOk = true; bool missingOk = true;
Oid databaseOid = get_database_oid(databaseName, missingOk); Oid databaseOid = get_database_oid(databaseName, missingOk);
@ -450,14 +460,15 @@ PreprocessDropDatabaseStmt(Node *node, const char *queryString,
return NIL; return NIL;
} }
ObjectAddress dbAddress = {0}; ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid); ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
if (!IsObjectDistributed(&dbAddress)) if (!IsObjectDistributed(&dbAddress))
{ {
return NIL; return NIL;
} }
List *workerNodes = TargetWorkerSetNodeList(NON_COORDINATOR_METADATA_NODES, RowShareLock); List *workerNodes = TargetWorkerSetNodeList(NON_COORDINATOR_METADATA_NODES,
RowShareLock);
if (list_length(workerNodes) == 0) if (list_length(workerNodes) == 0)
{ {
return NIL; return NIL;

View File

@ -1355,6 +1355,7 @@ GetDistributeObjectOps(Node *node)
{ {
return &Database_Alter; return &Database_Alter;
} }
case T_CreatedbStmt: case T_CreatedbStmt:
{ {
return &Database_Create; return &Database_Create;

View File

@ -694,7 +694,7 @@ ProcessUtilityInternal(PlannedStmt *pstmt,
} }
/* inform the user about potential caveats */ /* inform the user about potential caveats */
if (IsA(parsetree, CreatedbStmt) &&!EnableCreateDatabasePropagation) if (IsA(parsetree, CreatedbStmt) && !EnableCreateDatabasePropagation)
{ {
if (EnableUnsupportedFeatureMessages) if (EnableUnsupportedFeatureMessages)
{ {

View File

@ -34,7 +34,7 @@ char *
DeparseAlterDatabaseOwnerStmt(Node *node) DeparseAlterDatabaseOwnerStmt(Node *node)
{ {
AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node); AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node);
StringInfoData str = {0}; StringInfoData str = { 0 };
initStringInfo(&str); initStringInfo(&str);
Assert(stmt->objectType == OBJECT_DATABASE); Assert(stmt->objectType == OBJECT_DATABASE);
@ -44,6 +44,7 @@ DeparseAlterDatabaseOwnerStmt(Node *node)
return str.data; return str.data;
} }
static void static void
AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt) AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
{ {
@ -51,17 +52,18 @@ AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
appendStringInfo(buf, appendStringInfo(buf,
"ALTER DATABASE %s OWNER TO %s;", "ALTER DATABASE %s OWNER TO %s;",
quote_identifier(strVal((String *)stmt->object)), quote_identifier(strVal((String *) stmt->object)),
RoleSpecString(stmt->newowner, true)); RoleSpecString(stmt->newowner, true));
} }
static void static void
AppendGrantDatabases(StringInfo buf, GrantStmt *stmt) AppendGrantDatabases(StringInfo buf, GrantStmt *stmt)
{ {
ListCell *cell = NULL; ListCell *cell = NULL;
appendStringInfo(buf, " ON DATABASE "); appendStringInfo(buf, " ON DATABASE ");
foreach (cell, stmt->objects) foreach(cell, stmt->objects)
{ {
char *database = strVal(lfirst(cell)); char *database = strVal(lfirst(cell));
appendStringInfoString(buf, quote_identifier(database)); appendStringInfoString(buf, quote_identifier(database));
@ -72,6 +74,7 @@ AppendGrantDatabases(StringInfo buf, GrantStmt *stmt)
} }
} }
static void static void
AppendGrantOnDatabaseStmt(StringInfo buf, GrantStmt *stmt) AppendGrantOnDatabaseStmt(StringInfo buf, GrantStmt *stmt)
{ {
@ -84,12 +87,14 @@ AppendGrantOnDatabaseStmt(StringInfo buf, GrantStmt *stmt)
AppendGrantSharedSuffix(buf, stmt); AppendGrantSharedSuffix(buf, stmt);
} }
static void static void
AppendDefElemConnLimit(StringInfo buf, DefElem *def) AppendDefElemConnLimit(StringInfo buf, DefElem *def)
{ {
appendStringInfo(buf, " CONNECTION LIMIT %ld", (long int)defGetNumeric(def)); appendStringInfo(buf, " CONNECTION LIMIT %ld", (long int) defGetNumeric(def));
} }
static void static void
AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt) AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt)
{ {
@ -99,7 +104,7 @@ AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt)
{ {
ListCell *cell = NULL; ListCell *cell = NULL;
appendStringInfo(buf, "WITH "); appendStringInfo(buf, "WITH ");
foreach (cell, stmt->options) foreach(cell, stmt->options)
{ {
DefElem *def = castNode(DefElem, lfirst(cell)); DefElem *def = castNode(DefElem, lfirst(cell));
if (strcmp(def->defname, "is_template") == 0) if (strcmp(def->defname, "is_template") == 0)
@ -128,13 +133,14 @@ AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt)
appendStringInfo(buf, ";"); appendStringInfo(buf, ";");
} }
char * char *
DeparseGrantOnDatabaseStmt(Node *node) DeparseGrantOnDatabaseStmt(Node *node)
{ {
GrantStmt *stmt = castNode(GrantStmt, node); GrantStmt *stmt = castNode(GrantStmt, node);
Assert(stmt->objtype == OBJECT_DATABASE); Assert(stmt->objtype == OBJECT_DATABASE);
StringInfoData str = {0}; StringInfoData str = { 0 };
initStringInfo(&str); initStringInfo(&str);
AppendGrantOnDatabaseStmt(&str, stmt); AppendGrantOnDatabaseStmt(&str, stmt);
@ -142,12 +148,13 @@ DeparseGrantOnDatabaseStmt(Node *node)
return str.data; return str.data;
} }
char * char *
DeparseAlterDatabaseStmt(Node *node) DeparseAlterDatabaseStmt(Node *node)
{ {
AlterDatabaseStmt *stmt = castNode(AlterDatabaseStmt, node); AlterDatabaseStmt *stmt = castNode(AlterDatabaseStmt, node);
StringInfoData str = {0}; StringInfoData str = { 0 };
initStringInfo(&str); initStringInfo(&str);
AppendAlterDatabaseStmt(&str, stmt); AppendAlterDatabaseStmt(&str, stmt);
@ -155,11 +162,12 @@ DeparseAlterDatabaseStmt(Node *node)
return str.data; return str.data;
} }
#if PG_VERSION_NUM >= PG_VERSION_15 #if PG_VERSION_NUM >= PG_VERSION_15
char * char *
DeparseAlterDatabaseRefreshCollStmt(Node *node) DeparseAlterDatabaseRefreshCollStmt(Node *node)
{ {
AlterDatabaseRefreshCollStmt *stmt = (AlterDatabaseRefreshCollStmt *)node; AlterDatabaseRefreshCollStmt *stmt = (AlterDatabaseRefreshCollStmt *) node;
StringInfoData str; StringInfoData str;
initStringInfo(&str); initStringInfo(&str);
@ -171,6 +179,7 @@ DeparseAlterDatabaseRefreshCollStmt(Node *node)
return str.data; return str.data;
} }
#endif #endif
static void static void
@ -183,12 +192,13 @@ AppendAlterDatabaseSetStmt(StringInfo buf, AlterDatabaseSetStmt *stmt)
AppendVariableSet(buf, varSetStmt); AppendVariableSet(buf, varSetStmt);
} }
char * char *
DeparseAlterDatabaseSetStmt(Node *node) DeparseAlterDatabaseSetStmt(Node *node)
{ {
AlterDatabaseSetStmt *stmt = castNode(AlterDatabaseSetStmt, node); AlterDatabaseSetStmt *stmt = castNode(AlterDatabaseSetStmt, node);
StringInfoData str = {0}; StringInfoData str = { 0 };
initStringInfo(&str); initStringInfo(&str);
AppendAlterDatabaseSetStmt(&str, stmt); AppendAlterDatabaseSetStmt(&str, stmt);
@ -196,6 +206,7 @@ DeparseAlterDatabaseSetStmt(Node *node)
return str.data; return str.data;
} }
static void static void
AppendCreatedbStmt(StringInfo buf, CreatedbStmt *stmt) AppendCreatedbStmt(StringInfo buf, CreatedbStmt *stmt)
{ {
@ -325,11 +336,12 @@ AppendCreatedbStmt(StringInfo buf, CreatedbStmt *stmt)
} }
} }
char * char *
DeparseCreateDatabaseStmt(Node *node) DeparseCreateDatabaseStmt(Node *node)
{ {
CreatedbStmt *stmt = castNode(CreatedbStmt, node); CreatedbStmt *stmt = castNode(CreatedbStmt, node);
StringInfoData str = {0}; StringInfoData str = { 0 };
initStringInfo(&str); initStringInfo(&str);
AppendCreatedbStmt(&str, stmt); AppendCreatedbStmt(&str, stmt);
@ -337,6 +349,7 @@ DeparseCreateDatabaseStmt(Node *node)
return str.data; return str.data;
} }
static void static void
AppendDropDatabaseStmt(StringInfo buf, DropdbStmt *stmt) AppendDropDatabaseStmt(StringInfo buf, DropdbStmt *stmt)
{ {
@ -361,6 +374,7 @@ AppendDropDatabaseStmt(StringInfo buf, DropdbStmt *stmt)
} }
} }
char * char *
DeparseDropDatabaseStmt(Node *node) DeparseDropDatabaseStmt(Node *node)
{ {
@ -372,6 +386,3 @@ DeparseDropDatabaseStmt(Node *node)
return str.data; return str.data;
} }

View File

@ -2769,8 +2769,6 @@ DistRebalanceStrategyRelationId(void)
} }
/* return oid of pg_dist_object relation */ /* return oid of pg_dist_object relation */
Oid Oid
DistObjectRelationId(void) DistObjectRelationId(void)
@ -5403,8 +5401,6 @@ DeformedDistShardTupleToShardInterval(Datum *datumArray, bool *isNullArray,
} }
/* /*
* CachedRelationLookup performs a cached lookup for the relation * CachedRelationLookup performs a cached lookup for the relation
* relationName, with the result cached in *cachedOid. * relationName, with the result cached in *cachedOid.

View File

@ -42,11 +42,11 @@ extern bool EnforceLocalObjectRestrictions;
extern void SwitchToSequentialAndLocalExecutionIfRelationNameTooLong(Oid relationId, extern void SwitchToSequentialAndLocalExecutionIfRelationNameTooLong(Oid relationId,
char * char *
finalRelationName); finalRelationName);
extern void SwitchToSequentialAndLocalExecutionIfPartitionNameTooLong(Oid extern void SwitchToSequentialAndLocalExecutionIfPartitionNameTooLong(Oid
parentRelationId, parentRelationId,
Oid Oid
partitionRelationId); partitionRelationId);
/* DistOpsOperationType to be used in DistributeObjectOps */ /* DistOpsOperationType to be used in DistributeObjectOps */
typedef enum DistOpsOperationType typedef enum DistOpsOperationType
@ -99,7 +99,7 @@ typedef struct DistributeObjectOps
#define CITUS_TRUNCATE_TRIGGER_NAME "citus_truncate_trigger" #define CITUS_TRUNCATE_TRIGGER_NAME "citus_truncate_trigger"
const DistributeObjectOps *GetDistributeObjectOps(Node *node); const DistributeObjectOps * GetDistributeObjectOps(Node *node);
/* /*
* Flags that can be passed to GetForeignKeyOids to indicate * Flags that can be passed to GetForeignKeyOids to indicate
@ -172,21 +172,23 @@ extern const char *TenantOperationNames[TOTAL_TENANT_OPERATION];
extern void SaveBeginCommandProperties(TransactionStmt *transactionStmt); extern void SaveBeginCommandProperties(TransactionStmt *transactionStmt);
/* cluster.c - forward declarations */ /* cluster.c - forward declarations */
extern List *PreprocessClusterStmt(Node *node, const char *clusterCommand, extern List * PreprocessClusterStmt(Node *node, const char *clusterCommand,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
/* common.c - forward declarations*/ /* common.c - forward declarations*/
extern List *PostprocessCreateDistributedObjectFromCatalogStmt(Node *stmt, extern List * PostprocessCreateDistributedObjectFromCatalogStmt(Node *stmt,
const char *queryString); const char *queryString);
extern List *PreprocessAlterDistributedObjectStmt(Node *stmt, const char *queryString, extern List * PreprocessAlterDistributedObjectStmt(Node *stmt, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * PostprocessAlterDistributedObjectStmt(Node *stmt, const char *queryString);
extern List * PreprocessDropDistributedObjectStmt(Node *node, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern List *PostprocessAlterDistributedObjectStmt(Node *stmt, const char *queryString); extern List * DropTextSearchConfigObjectAddress(Node *node, bool missing_ok, bool
extern List *PreprocessDropDistributedObjectStmt(Node *node, const char *queryString, isPostprocess);
ProcessUtilityContext extern List * DropTextSearchDictObjectAddress(Node *node, bool missing_ok, bool
processUtilityContext); isPostprocess);
extern List *DropTextSearchConfigObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *DropTextSearchDictObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
/* index.c */ /* index.c */
typedef void (*PGIndexProcessor)(Form_pg_index, List **, int); typedef void (*PGIndexProcessor)(Form_pg_index, List **, int);
@ -195,78 +197,87 @@ typedef void (*PGIndexProcessor)(Form_pg_index, List **, int);
extern bool CallDistributedProcedureRemotely(CallStmt *callStmt, DestReceiver *dest); extern bool CallDistributedProcedureRemotely(CallStmt *callStmt, DestReceiver *dest);
/* collation.c - forward declarations */ /* collation.c - forward declarations */
extern char *CreateCollationDDL(Oid collationId); extern char * CreateCollationDDL(Oid collationId);
extern List *CreateCollationDDLsIdempotent(Oid collationId); extern List * CreateCollationDDLsIdempotent(Oid collationId);
extern List *AlterCollationOwnerObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * AlterCollationOwnerObjectAddress(Node *stmt, bool missing_ok, bool
extern List *RenameCollationStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); isPostprocess);
extern List *AlterCollationSchemaStmtObjectAddress(Node *stmt, extern List * RenameCollationStmtObjectAddress(Node *stmt, bool missing_ok, bool
bool missing_ok, bool isPostprocess); isPostprocess);
extern char *GenerateBackupNameForCollationCollision(const ObjectAddress *address); extern List * AlterCollationSchemaStmtObjectAddress(Node *stmt,
extern List *DefineCollationStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern char * GenerateBackupNameForCollationCollision(const ObjectAddress *address);
extern List * DefineCollationStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
/* database.c - forward declarations */ /* database.c - forward declarations */
extern List *AlterDatabaseOwnerObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * AlterDatabaseOwnerObjectAddress(Node *node, bool missing_ok, bool
extern List *DatabaseOwnerDDLCommands(const ObjectAddress *address); isPostprocess);
extern List * DatabaseOwnerDDLCommands(const ObjectAddress *address);
extern List *PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString, extern List * PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List *PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessCreateDatabaseStmt(Node *node, const char *queryString); extern List * PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
extern List *PreprocessDropDatabaseStmt(Node *node, const char *queryString, ProcessUtilityContext processUtilityContext);
ProcessUtilityContext processUtilityContext);
/* domain.c - forward declarations */ extern List * PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
extern List *CreateDomainStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); ProcessUtilityContext
extern List *AlterDomainStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); processUtilityContext);
extern List *DomainRenameConstraintStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess); extern List * PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
extern List *AlterDomainOwnerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); ProcessUtilityContext processUtilityContext);
extern List *RenameDomainStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern CreateDomainStmt *RecreateDomainStmt(Oid domainOid); extern List * PostprocessCreateDatabaseStmt(Node *node, const char *queryString);
extern List * PreprocessDropDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
/* domain.c - forward declarations */
extern List * CreateDomainStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * AlterDomainStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * DomainRenameConstraintStmtObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * AlterDomainOwnerStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * RenameDomainStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern CreateDomainStmt * RecreateDomainStmt(Oid domainOid);
extern Oid get_constraint_typid(Oid conoid); extern Oid get_constraint_typid(Oid conoid);
/* extension.c - forward declarations */ /* extension.c - forward declarations */
extern bool IsDropCitusExtensionStmt(Node *parsetree); extern bool IsDropCitusExtensionStmt(Node *parsetree);
extern List *GetDependentFDWsToExtension(Oid extensionId); extern List * GetDependentFDWsToExtension(Oid extensionId);
extern bool IsCreateAlterExtensionUpdateCitusStmt(Node *parsetree); extern bool IsCreateAlterExtensionUpdateCitusStmt(Node *parsetree);
extern void PreprocessCreateExtensionStmtForCitusColumnar(Node *parsetree); extern void PreprocessCreateExtensionStmtForCitusColumnar(Node *parsetree);
extern void PreprocessAlterExtensionCitusStmtForCitusColumnar(Node *parsetree); extern void PreprocessAlterExtensionCitusStmtForCitusColumnar(Node *parsetree);
extern void PostprocessAlterExtensionCitusStmtForCitusColumnar(Node *parsetree); extern void PostprocessAlterExtensionCitusStmtForCitusColumnar(Node *parsetree);
extern bool ShouldMarkRelationDistributed(Oid relationId); extern bool ShouldMarkRelationDistributed(Oid relationId);
extern void ErrorIfUnstableCreateOrAlterExtensionStmt(Node *parsetree); extern void ErrorIfUnstableCreateOrAlterExtensionStmt(Node *parsetree);
extern List *PostprocessCreateExtensionStmt(Node *stmt, const char *queryString); extern List * PostprocessCreateExtensionStmt(Node *stmt, const char *queryString);
extern List *PreprocessDropExtensionStmt(Node *stmt, const char *queryString, extern List * PreprocessDropExtensionStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterExtensionSchemaStmt(Node *stmt, extern List * PreprocessAlterExtensionSchemaStmt(Node *stmt,
const char *queryString, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern List *PostprocessAlterExtensionSchemaStmt(Node *stmt, extern List * PostprocessAlterExtensionSchemaStmt(Node *stmt,
const char *queryString); const char *queryString);
extern List *PreprocessAlterExtensionUpdateStmt(Node *stmt, extern List * PreprocessAlterExtensionUpdateStmt(Node *stmt,
const char *queryString, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern void PostprocessAlterExtensionCitusUpdateStmt(Node *node); extern void PostprocessAlterExtensionCitusUpdateStmt(Node *node);
extern List *PreprocessAlterExtensionContentsStmt(Node *node, extern List * PreprocessAlterExtensionContentsStmt(Node *node,
const char *queryString, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern List *CreateExtensionDDLCommand(const ObjectAddress *extensionAddress); extern List * CreateExtensionDDLCommand(const ObjectAddress *extensionAddress);
extern List *AlterExtensionSchemaStmtObjectAddress(Node *stmt, extern List * AlterExtensionSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern List *AlterExtensionUpdateStmtObjectAddress(Node *stmt, extern List * AlterExtensionUpdateStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern void CreateExtensionWithVersion(char *extname, char *extVersion); extern void CreateExtensionWithVersion(char *extname, char *extVersion);
extern void AlterExtensionUpdateStmt(char *extname, char *extVersion); extern void AlterExtensionUpdateStmt(char *extname, char *extVersion);
extern int GetExtensionVersionNumber(char *extVersion); extern int GetExtensionVersionNumber(char *extVersion);
@ -285,21 +296,21 @@ extern void ErrorOutForFKeyBetweenPostgresAndCitusLocalTable(Oid localTableId);
extern bool ColumnReferencedByAnyForeignKey(char *columnName, Oid relationId); extern bool ColumnReferencedByAnyForeignKey(char *columnName, Oid relationId);
extern bool ColumnAppearsInForeignKey(char *columnName, Oid relationId); extern bool ColumnAppearsInForeignKey(char *columnName, Oid relationId);
extern bool ColumnAppearsInForeignKeyToReferenceTable(char *columnName, Oid extern bool ColumnAppearsInForeignKeyToReferenceTable(char *columnName, Oid
relationId); relationId);
extern List *GetReferencingForeignConstaintCommands(Oid relationOid); extern List * GetReferencingForeignConstaintCommands(Oid relationOid);
extern List *GetForeignConstraintToReferenceTablesCommands(Oid relationId); extern List * GetForeignConstraintToReferenceTablesCommands(Oid relationId);
extern List *GetForeignConstraintFromOtherReferenceTablesCommands(Oid relationId); extern List * GetForeignConstraintFromOtherReferenceTablesCommands(Oid relationId);
extern List *GetForeignConstraintToDistributedTablesCommands(Oid relationId); extern List * GetForeignConstraintToDistributedTablesCommands(Oid relationId);
extern List *GetForeignConstraintFromDistributedTablesCommands(Oid relationId); extern List * GetForeignConstraintFromDistributedTablesCommands(Oid relationId);
extern List *GetForeignConstraintCommandsInternal(Oid relationId, int flags); extern List * GetForeignConstraintCommandsInternal(Oid relationId, int flags);
extern Oid DropFKeysAndUndistributeTable(Oid relationId); extern Oid DropFKeysAndUndistributeTable(Oid relationId);
extern void DropFKeysRelationInvolvedWithTableType(Oid relationId, int tableTypeFlag); extern void DropFKeysRelationInvolvedWithTableType(Oid relationId, int tableTypeFlag);
extern List *GetFKeyCreationCommandsRelationInvolvedWithTableType(Oid relationId, extern List * GetFKeyCreationCommandsRelationInvolvedWithTableType(Oid relationId,
int tableTypeFlag); int tableTypeFlag);
extern bool AnyForeignKeyDependsOnIndex(Oid indexId); extern bool AnyForeignKeyDependsOnIndex(Oid indexId);
extern bool HasForeignKeyWithLocalTable(Oid relationId); extern bool HasForeignKeyWithLocalTable(Oid relationId);
extern bool HasForeignKeyToReferenceTable(Oid relationOid); extern bool HasForeignKeyToReferenceTable(Oid relationOid);
extern List *GetForeignKeysFromLocalTables(Oid relationId); extern List * GetForeignKeysFromLocalTables(Oid relationId);
extern bool TableReferenced(Oid relationOid); extern bool TableReferenced(Oid relationOid);
extern bool TableReferencing(Oid relationOid); extern bool TableReferencing(Oid relationOid);
extern bool ConstraintIsAUniquenessConstraint(char *inputConstaintName, Oid relationId); extern bool ConstraintIsAUniquenessConstraint(char *inputConstaintName, Oid relationId);
@ -308,269 +319,289 @@ extern bool ConstraintWithNameIsOfType(char *inputConstaintName, Oid relationId,
char targetConstraintType); char targetConstraintType);
extern bool ConstraintWithIdIsOfType(Oid constraintId, char targetConstraintType); extern bool ConstraintWithIdIsOfType(Oid constraintId, char targetConstraintType);
extern bool TableHasExternalForeignKeys(Oid relationId); extern bool TableHasExternalForeignKeys(Oid relationId);
extern List *GetForeignKeyOids(Oid relationId, int flags); extern List * GetForeignKeyOids(Oid relationId, int flags);
extern Oid GetReferencedTableId(Oid foreignKeyId); extern Oid GetReferencedTableId(Oid foreignKeyId);
extern Oid GetReferencingTableId(Oid foreignKeyId); extern Oid GetReferencingTableId(Oid foreignKeyId);
extern bool RelationInvolvedInAnyNonInheritedForeignKeys(Oid relationId); extern bool RelationInvolvedInAnyNonInheritedForeignKeys(Oid relationId);
/* foreign_data_wrapper.c - forward declarations */ /* foreign_data_wrapper.c - forward declarations */
extern List *PreprocessGrantOnFDWStmt(Node *node, const char *queryString, extern List * PreprocessGrantOnFDWStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern Acl *GetPrivilegesForFDW(Oid FDWOid); extern Acl * GetPrivilegesForFDW(Oid FDWOid);
/* foreign_server.c - forward declarations */ /* foreign_server.c - forward declarations */
extern List *PreprocessGrantOnForeignServerStmt(Node *node, const char *queryString, extern List * PreprocessGrantOnForeignServerStmt(Node *node, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern List *CreateForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * CreateForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool
extern List *AlterForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); isPostprocess);
extern List *RenameForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * AlterForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool
extern List *AlterForeignServerOwnerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); isPostprocess);
extern List *GetForeignServerCreateDDLCommand(Oid serverId); extern List * RenameForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * AlterForeignServerOwnerStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * GetForeignServerCreateDDLCommand(Oid serverId);
/* foreign_table.c - forward declarations */ /* foreign_table.c - forward declarations */
extern List *PreprocessAlterForeignTableSchemaStmt(Node *node, const char *queryString, extern List * PreprocessAlterForeignTableSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
/* function.c - forward declarations */ /* function.c - forward declarations */
extern List *PreprocessCreateFunctionStmt(Node *stmt, const char *queryString, extern List * PreprocessCreateFunctionStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *PostprocessCreateFunctionStmt(Node *stmt,
const char *queryString);
extern List *CreateFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *DefineAggregateStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *PreprocessAlterFunctionStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *AlterFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *RenameFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *AlterFunctionOwnerObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *AlterFunctionSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *PreprocessAlterFunctionDependsStmt(Node *stmt,
const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List *AlterFunctionDependsStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List *PreprocessGrantOnFunctionStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessGrantOnFunctionStmt(Node *node, const char *queryString); extern List * PostprocessCreateFunctionStmt(Node *stmt,
const char *queryString);
extern List * CreateFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * DefineAggregateStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * PreprocessAlterFunctionStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * AlterFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * RenameFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * AlterFunctionOwnerObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * AlterFunctionSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * PreprocessAlterFunctionDependsStmt(Node *stmt,
const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * AlterFunctionDependsStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * PreprocessGrantOnFunctionStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessGrantOnFunctionStmt(Node *node, const char *queryString);
/* grant.c - forward declarations */ /* grant.c - forward declarations */
extern List *PreprocessGrantStmt(Node *node, const char *queryString, extern List * PreprocessGrantStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern void deparsePrivileges(StringInfo privsString, GrantStmt *grantStmt); extern void deparsePrivileges(StringInfo privsString, GrantStmt *grantStmt);
extern void deparseGrantees(StringInfo granteesString, GrantStmt *grantStmt); extern void deparseGrantees(StringInfo granteesString, GrantStmt *grantStmt);
/* index.c - forward declarations */ /* index.c - forward declarations */
extern bool IsIndexRenameStmt(RenameStmt *renameStmt); extern bool IsIndexRenameStmt(RenameStmt *renameStmt);
extern List *PreprocessIndexStmt(Node *createIndexStatement, extern List * PreprocessIndexStmt(Node *createIndexStatement,
const char *createIndexCommand, const char *createIndexCommand,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern char *ChooseIndexName(const char *tabname, Oid namespaceId, extern char * ChooseIndexName(const char *tabname, Oid namespaceId,
List *colnames, List *exclusionOpNames, List *colnames, List *exclusionOpNames,
bool primary, bool isconstraint); bool primary, bool isconstraint);
extern char *ChooseIndexNameAddition(List *colnames); extern char * ChooseIndexNameAddition(List *colnames);
extern List *ChooseIndexColumnNames(List *indexElems); extern List * ChooseIndexColumnNames(List *indexElems);
extern LOCKMODE GetCreateIndexRelationLockMode(IndexStmt *createIndexStatement); extern LOCKMODE GetCreateIndexRelationLockMode(IndexStmt *createIndexStatement);
extern List *PreprocessReindexStmt(Node *ReindexStatement, extern List * PreprocessReindexStmt(Node *ReindexStatement,
const char *ReindexCommand, const char *ReindexCommand,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *ReindexStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * ReindexStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *PreprocessDropIndexStmt(Node *dropIndexStatement, extern List * PreprocessDropIndexStmt(Node *dropIndexStatement,
const char *dropIndexCommand, const char *dropIndexCommand,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessIndexStmt(Node *node, extern List * PostprocessIndexStmt(Node *node,
const char *queryString); const char *queryString);
extern void ErrorIfUnsupportedAlterIndexStmt(AlterTableStmt *alterTableStatement); extern void ErrorIfUnsupportedAlterIndexStmt(AlterTableStmt *alterTableStatement);
extern void MarkIndexValid(IndexStmt *indexStmt); extern void MarkIndexValid(IndexStmt *indexStmt);
extern List *ExecuteFunctionOnEachTableIndex(Oid relationId, PGIndexProcessor pgIndexProcessor, int flags); extern List * ExecuteFunctionOnEachTableIndex(Oid relationId, PGIndexProcessor
pgIndexProcessor, int flags);
extern bool IsReindexWithParam_compat(ReindexStmt *stmt, char *paramName); extern bool IsReindexWithParam_compat(ReindexStmt *stmt, char *paramName);
/* objectaddress.c - forward declarations */ /* objectaddress.c - forward declarations */
extern List *CreateExtensionStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * CreateExtensionStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
/* owned.c - forward declarations */ /* owned.c - forward declarations */
extern List *PreprocessDropOwnedStmt(Node *node, const char *queryString, extern List * PreprocessDropOwnedStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
/* policy.c - forward declarations */ /* policy.c - forward declarations */
extern List *CreatePolicyCommands(Oid relationId); extern List * CreatePolicyCommands(Oid relationId);
extern void ErrorIfUnsupportedPolicy(Relation relation); extern void ErrorIfUnsupportedPolicy(Relation relation);
extern void ErrorIfUnsupportedPolicyExpr(Node *expr); extern void ErrorIfUnsupportedPolicyExpr(Node *expr);
extern List *PostprocessCreatePolicyStmt(Node *node, const char *queryString); extern List * PostprocessCreatePolicyStmt(Node *node, const char *queryString);
extern List *PreprocessAlterPolicyStmt(Node *node, const char *queryString, extern List * PreprocessAlterPolicyStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessDropPolicyStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessDropPolicyStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern bool IsPolicyRenameStmt(RenameStmt *stmt); extern bool IsPolicyRenameStmt(RenameStmt *stmt);
extern void CreatePolicyEventExtendNames(CreatePolicyStmt *stmt, const char *schemaName, extern void CreatePolicyEventExtendNames(CreatePolicyStmt *stmt, const char *schemaName,
uint64 shardId); uint64 shardId);
extern void AlterPolicyEventExtendNames(AlterPolicyStmt *stmt, const char *schemaName, extern void AlterPolicyEventExtendNames(AlterPolicyStmt *stmt, const char *schemaName,
uint64 shardId); uint64 shardId);
extern void RenamePolicyEventExtendNames(RenameStmt *stmt, const char *schemaName, uint64 shardId); extern void RenamePolicyEventExtendNames(RenameStmt *stmt, const char *schemaName, uint64
extern void DropPolicyEventExtendNames(DropStmt *stmt, const char *schemaName, uint64 shardId); shardId);
extern void DropPolicyEventExtendNames(DropStmt *stmt, const char *schemaName, uint64
shardId);
extern void AddRangeTableEntryToQueryCompat(ParseState *parseState, Relation relation); extern void AddRangeTableEntryToQueryCompat(ParseState *parseState, Relation relation);
/* publication.c - forward declarations */ /* publication.c - forward declarations */
extern List *PostProcessCreatePublicationStmt(Node *node, const char *queryString); extern List * PostProcessCreatePublicationStmt(Node *node, const char *queryString);
extern List *CreatePublicationDDLCommandsIdempotent(const ObjectAddress *address); extern List * CreatePublicationDDLCommandsIdempotent(const ObjectAddress *address);
extern char *CreatePublicationDDLCommand(Oid publicationId); extern char * CreatePublicationDDLCommand(Oid publicationId);
extern List *PreprocessAlterPublicationStmt(Node *stmt, const char *queryString, extern List * PreprocessAlterPublicationStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityCtx); ProcessUtilityContext processUtilityCtx);
extern List *GetAlterPublicationDDLCommandsForTable(Oid relationId, bool isAdd); extern List * GetAlterPublicationDDLCommandsForTable(Oid relationId, bool isAdd);
extern char *GetAlterPublicationTableDDLCommand(Oid publicationId, Oid relationId, extern char * GetAlterPublicationTableDDLCommand(Oid publicationId, Oid relationId,
bool isAdd); bool isAdd);
extern List *AlterPublicationOwnerStmtObjectAddress(Node *node, bool missingOk, extern List * AlterPublicationOwnerStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess); bool isPostProcess);
extern List *AlterPublicationStmtObjectAddress(Node *node, bool missingOk, extern List * AlterPublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess);
extern List *CreatePublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess);
extern List *RenamePublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess); bool isPostProcess);
extern List * CreatePublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess);
extern List * RenamePublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess);
/* rename.c - forward declarations*/ /* rename.c - forward declarations*/
extern List *PreprocessRenameStmt(Node *renameStmt, const char *renameCommand, extern List * PreprocessRenameStmt(Node *renameStmt, const char *renameCommand,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern void ErrorIfUnsupportedRenameStmt(RenameStmt *renameStmt); extern void ErrorIfUnsupportedRenameStmt(RenameStmt *renameStmt);
extern List *PreprocessRenameAttributeStmt(Node *stmt, const char *queryString, extern List * PreprocessRenameAttributeStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
/* role.c - forward declarations*/ /* role.c - forward declarations*/
extern List *PostprocessAlterRoleStmt(Node *stmt, const char *queryString); extern List * PostprocessAlterRoleStmt(Node *stmt, const char *queryString);
extern List *PreprocessAlterRoleSetStmt(Node *stmt, const char *queryString, extern List * PreprocessAlterRoleSetStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterRoleRenameStmt(Node *stmt, const char *queryString, extern List * PreprocessAlterRoleRenameStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *GenerateAlterRoleSetCommandForRole(Oid roleid); extern List * GenerateAlterRoleSetCommandForRole(Oid roleid);
extern List *AlterRoleStmtObjectAddress(Node *node, extern List * AlterRoleStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern List *AlterRoleSetStmtObjectAddress(Node *node, extern List * AlterRoleSetStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern List *PreprocessCreateRoleStmt(Node *stmt, const char *queryString, extern List * PreprocessCreateRoleStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessDropRoleStmt(Node *stmt, const char *queryString, extern List * PreprocessDropRoleStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *PreprocessGrantRoleStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessGrantRoleStmt(Node *stmt, const char *queryString); extern List * PreprocessGrantRoleStmt(Node *stmt, const char *queryString,
extern List *GenerateCreateOrAlterRoleCommand(Oid roleOid); ProcessUtilityContext processUtilityContext);
extern List *CreateRoleStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * PostprocessGrantRoleStmt(Node *stmt, const char *queryString);
extern List * GenerateCreateOrAlterRoleCommand(Oid roleOid);
extern List * CreateRoleStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * RenameRoleStmtObjectAddress(Node *stmt, bool missing_ok, bool extern List * RenameRoleStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess); isPostprocess);
extern void UnmarkRolesDistributed(List *roles); extern void UnmarkRolesDistributed(List *roles);
extern List *FilterDistributedRoles(List *roles); extern List * FilterDistributedRoles(List *roles);
/* schema.c - forward declarations */ /* schema.c - forward declarations */
extern List *PostprocessCreateSchemaStmt(Node *node, const char *queryString); extern List * PostprocessCreateSchemaStmt(Node *node, const char *queryString);
extern List *PreprocessDropSchemaStmt(Node *dropSchemaStatement, extern List * PreprocessDropSchemaStmt(Node *dropSchemaStatement,
const char *queryString, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterObjectSchemaStmt(Node *alterObjectSchemaStmt, extern List * PreprocessAlterObjectSchemaStmt(Node *alterObjectSchemaStmt,
const char *alterObjectSchemaCommand); const char *alterObjectSchemaCommand);
extern List *PreprocessGrantOnSchemaStmt(Node *node, const char *queryString, extern List * PreprocessGrantOnSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *CreateSchemaStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * CreateSchemaStmtObjectAddress(Node *node, bool missing_ok, bool
extern List *AlterSchemaOwnerStmtObjectAddress(Node *node, bool missing_ok, isPostprocess);
bool isPostprocess); extern List * AlterSchemaOwnerStmtObjectAddress(Node *node, bool missing_ok,
extern List *AlterSchemaRenameStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); bool isPostprocess);
extern List * AlterSchemaRenameStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
/* sequence.c - forward declarations */ /* sequence.c - forward declarations */
extern List *PreprocessAlterSequenceStmt(Node *node, const char *queryString, extern List * PreprocessAlterSequenceStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterSequenceSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List *PostprocessAlterSequenceSchemaStmt(Node *node, const char *queryString);
extern List *PreprocessAlterSequenceOwnerStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *PostprocessAlterSequenceOwnerStmt(Node *node, const char *queryString);
#if (PG_VERSION_NUM >= PG_VERSION_15)
extern List *PreprocessAlterSequencePersistenceStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List *PreprocessSequenceAlterTableStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
#endif
extern List *PreprocessDropSequenceStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *SequenceDropStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *PreprocessRenameSequenceStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessGrantOnSequenceStmt(Node *node, const char *queryString, extern List * PreprocessAlterSequenceSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext
extern List *PostprocessGrantOnSequenceStmt(Node *node, const char *queryString); processUtilityContext);
extern List *AlterSequenceStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * PostprocessAlterSequenceSchemaStmt(Node *node, const char *queryString);
extern List *AlterSequenceSchemaStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * PreprocessAlterSequenceOwnerStmt(Node *node, const char *queryString,
extern List *AlterSequenceOwnerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); ProcessUtilityContext processUtilityContext);
extern List * PostprocessAlterSequenceOwnerStmt(Node *node, const char *queryString);
#if (PG_VERSION_NUM >= PG_VERSION_15) #if (PG_VERSION_NUM >= PG_VERSION_15)
extern List *AlterSequencePersistenceStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * PreprocessAlterSequencePersistenceStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * PreprocessSequenceAlterTableStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
#endif #endif
extern List *RenameSequenceStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * PreprocessDropSequenceStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * SequenceDropStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * PreprocessRenameSequenceStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessGrantOnSequenceStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessGrantOnSequenceStmt(Node *node, const char *queryString);
extern List * AlterSequenceStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * AlterSequenceSchemaStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * AlterSequenceOwnerStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
#if (PG_VERSION_NUM >= PG_VERSION_15)
extern List * AlterSequencePersistenceStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
#endif
extern List * RenameSequenceStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern void ErrorIfUnsupportedSeqStmt(CreateSeqStmt *createSeqStmt); extern void ErrorIfUnsupportedSeqStmt(CreateSeqStmt *createSeqStmt);
extern void ErrorIfDistributedAlterSeqOwnedBy(AlterSeqStmt *alterSeqStmt); extern void ErrorIfDistributedAlterSeqOwnedBy(AlterSeqStmt *alterSeqStmt);
extern char *GenerateBackupNameForSequenceCollision(const ObjectAddress *address); extern char * GenerateBackupNameForSequenceCollision(const ObjectAddress *address);
extern void RenameExistingSequenceWithDifferentTypeIfExists(RangeVar *sequence, extern void RenameExistingSequenceWithDifferentTypeIfExists(RangeVar *sequence,
Oid desiredSeqTypeId); Oid desiredSeqTypeId);
/* statistics.c - forward declarations */ /* statistics.c - forward declarations */
extern List *PreprocessCreateStatisticsStmt(Node *node, const char *queryString, extern List * PreprocessCreateStatisticsStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessCreateStatisticsStmt(Node *node, const char *queryString); extern List * PostprocessCreateStatisticsStmt(Node *node, const char *queryString);
extern List *CreateStatisticsStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess); extern List * CreateStatisticsStmtObjectAddress(Node *node, bool missingOk, bool
extern List *PreprocessDropStatisticsStmt(Node *node, const char *queryString, isPostprocess);
ProcessUtilityContext processUtilityContext); extern List * PreprocessDropStatisticsStmt(Node *node, const char *queryString,
extern List *DropStatisticsObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *PreprocessAlterStatisticsRenameStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List *PreprocessAlterStatisticsSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List *PostprocessAlterStatisticsSchemaStmt(Node *node, const char *queryString);
extern List *AlterStatisticsSchemaStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess);
extern List *PreprocessAlterStatisticsStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterStatisticsOwnerStmt(Node *node, const char *queryString, extern List * DropStatisticsObjectAddress(Node *node, bool missing_ok, bool
ProcessUtilityContext isPostprocess);
processUtilityContext); extern List * PreprocessAlterStatisticsRenameStmt(Node *node, const char *queryString,
extern List *PostprocessAlterStatisticsOwnerStmt(Node *node, const char *queryString); ProcessUtilityContext
extern List *GetExplicitStatisticsCommandList(Oid relationId); processUtilityContext);
extern List *GetExplicitStatisticsSchemaIdList(Oid relationId); extern List * PreprocessAlterStatisticsSchemaStmt(Node *node, const char *queryString,
extern List *GetAlterIndexStatisticsCommands(Oid indexOid); ProcessUtilityContext
processUtilityContext);
extern List * PostprocessAlterStatisticsSchemaStmt(Node *node, const char *queryString);
extern List * AlterStatisticsSchemaStmtObjectAddress(Node *node, bool missingOk, bool
isPostprocess);
extern List * PreprocessAlterStatisticsStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterStatisticsOwnerStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * PostprocessAlterStatisticsOwnerStmt(Node *node, const char *queryString);
extern List * GetExplicitStatisticsCommandList(Oid relationId);
extern List * GetExplicitStatisticsSchemaIdList(Oid relationId);
extern List * GetAlterIndexStatisticsCommands(Oid indexOid);
/* subscription.c - forward declarations */ /* subscription.c - forward declarations */
extern Node *ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt); extern Node * ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt);
/* table.c - forward declarations */ /* table.c - forward declarations */
extern List *PreprocessDropTableStmt(Node *stmt, const char *queryString, extern List * PreprocessDropTableStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern void PostprocessCreateTableStmt(CreateStmt *createStatement, extern void PostprocessCreateTableStmt(CreateStmt *createStatement,
const char *queryString); const char *queryString);
extern bool ShouldEnableLocalReferenceForeignKeys(void); extern bool ShouldEnableLocalReferenceForeignKeys(void);
extern List *PreprocessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement, extern List * PreprocessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement,
const char *queryString); const char *queryString);
extern List *PostprocessAlterTableSchemaStmt(Node *node, const char *queryString); extern List * PostprocessAlterTableSchemaStmt(Node *node, const char *queryString);
extern void PrepareAlterTableStmtForConstraint(AlterTableStmt *alterTableStatement, extern void PrepareAlterTableStmtForConstraint(AlterTableStmt *alterTableStatement,
Oid relationId, Constraint *constraint); Oid relationId, Constraint *constraint);
extern List *PreprocessAlterTableStmt(Node *node, const char *alterTableCommand, extern List * PreprocessAlterTableStmt(Node *node, const char *alterTableCommand,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterTableMoveAllStmt(Node *node, const char *queryString, extern List * PreprocessAlterTableMoveAllStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterTableSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PreprocessAlterTableSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern void SkipForeignKeyValidationIfConstraintIsFkey(AlterTableStmt *alterTableStmt, extern void SkipForeignKeyValidationIfConstraintIsFkey(AlterTableStmt *alterTableStmt,
bool processLocalRelation); bool processLocalRelation);
extern bool IsAlterTableRenameStmt(RenameStmt *renameStmt); extern bool IsAlterTableRenameStmt(RenameStmt *renameStmt);
@ -582,144 +613,160 @@ extern void ErrorUnsupportedAlterTableAddColumn(Oid relationId, AlterTableCmd *c
extern void ErrorIfUnsupportedConstraint(Relation relation, char distributionMethod, extern void ErrorIfUnsupportedConstraint(Relation relation, char distributionMethod,
char referencingReplicationModel, char referencingReplicationModel,
Var *distributionColumn, uint32 colocationId); Var *distributionColumn, uint32 colocationId);
extern List *InterShardDDLTaskList(Oid leftRelationId, Oid rightRelationId, extern List * InterShardDDLTaskList(Oid leftRelationId, Oid rightRelationId,
const char *commandString); const char *commandString);
extern List *AlterTableSchemaStmtObjectAddress(Node *stmt, extern List * AlterTableSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern List *MakeNameListFromRangeVar(const RangeVar *rel); extern List * MakeNameListFromRangeVar(const RangeVar *rel);
extern Oid GetSequenceOid(Oid relationId, AttrNumber attnum); extern Oid GetSequenceOid(Oid relationId, AttrNumber attnum);
extern bool ConstrTypeUsesIndex(ConstrType constrType); extern bool ConstrTypeUsesIndex(ConstrType constrType);
extern bool ConstrTypeCitusCanDefaultName(ConstrType constrType); extern bool ConstrTypeCitusCanDefaultName(ConstrType constrType);
extern char *GetAlterColumnWithNextvalDefaultCmd(Oid sequenceOid, Oid relationId, extern char * GetAlterColumnWithNextvalDefaultCmd(Oid sequenceOid, Oid relationId,
char *colname, bool missingTableOk); char *colname, bool missingTableOk);
extern void ErrorIfTableHasIdentityColumn(Oid relationId); extern void ErrorIfTableHasIdentityColumn(Oid relationId);
extern void ConvertNewTableIfNecessary(Node *createStmt); extern void ConvertNewTableIfNecessary(Node *createStmt);
extern void ConvertToTenantTableIfNecessary(AlterObjectSchemaStmt *alterObjectSchemaStmt); extern void ConvertToTenantTableIfNecessary(AlterObjectSchemaStmt *alterObjectSchemaStmt);
/* text_search.c - forward declarations */ /* text_search.c - forward declarations */
extern List *GetCreateTextSearchConfigStatements(const ObjectAddress *address); extern List * GetCreateTextSearchConfigStatements(const ObjectAddress *address);
extern List *GetCreateTextSearchDictionaryStatements(const ObjectAddress *address); extern List * GetCreateTextSearchDictionaryStatements(const ObjectAddress *address);
extern List *CreateTextSearchConfigDDLCommandsIdempotent(const ObjectAddress *address); extern List * CreateTextSearchConfigDDLCommandsIdempotent(const ObjectAddress *address);
extern List *CreateTextSearchDictDDLCommandsIdempotent(const ObjectAddress *address); extern List * CreateTextSearchDictDDLCommandsIdempotent(const ObjectAddress *address);
extern List *CreateTextSearchConfigurationObjectAddress(Node *node, extern List * CreateTextSearchConfigurationObjectAddress(Node *node,
bool missing_ok, bool isPostprocess); bool missing_ok, bool
extern List *CreateTextSearchDictObjectAddress(Node *node, isPostprocess);
bool missing_ok, bool isPostprocess); extern List * CreateTextSearchDictObjectAddress(Node *node,
extern List *RenameTextSearchConfigurationStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *RenameTextSearchDictionaryStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *AlterTextSearchConfigurationStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *AlterTextSearchDictionaryStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *AlterTextSearchConfigurationSchemaStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *AlterTextSearchDictionarySchemaStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *TextSearchConfigurationCommentObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List *TextSearchDictCommentObjectAddress(Node *node,
bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern List *AlterTextSearchConfigurationOwnerObjectAddress(Node *node, extern List * RenameTextSearchConfigurationStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess); bool missing_ok, bool
extern List *AlterTextSearchDictOwnerObjectAddress(Node *node, isPostprocess);
bool missing_ok, bool isPostprocess); extern List * RenameTextSearchDictionaryStmtObjectAddress(Node *node,
extern char *GenerateBackupNameForTextSearchConfiguration(const ObjectAddress *address); bool missing_ok, bool
extern char *GenerateBackupNameForTextSearchDict(const ObjectAddress *address); isPostprocess);
extern List *get_ts_config_namelist(Oid tsconfigOid); extern List * AlterTextSearchConfigurationStmtObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * AlterTextSearchDictionaryStmtObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * AlterTextSearchConfigurationSchemaStmtObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * AlterTextSearchDictionarySchemaStmtObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * TextSearchConfigurationCommentObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * TextSearchDictCommentObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List * AlterTextSearchConfigurationOwnerObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * AlterTextSearchDictOwnerObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern char * GenerateBackupNameForTextSearchConfiguration(const ObjectAddress *address);
extern char * GenerateBackupNameForTextSearchDict(const ObjectAddress *address);
extern List * get_ts_config_namelist(Oid tsconfigOid);
/* truncate.c - forward declarations */ /* truncate.c - forward declarations */
extern void PreprocessTruncateStatement(TruncateStmt *truncateStatement); extern void PreprocessTruncateStatement(TruncateStmt *truncateStatement);
/* type.c - forward declarations */ /* type.c - forward declarations */
extern List *PreprocessRenameTypeAttributeStmt(Node *stmt, const char *queryString, extern List * PreprocessRenameTypeAttributeStmt(Node *stmt, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern Node *CreateTypeStmtByObjectAddress(const ObjectAddress *address); extern Node * CreateTypeStmtByObjectAddress(const ObjectAddress *address);
extern List *CompositeTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * CompositeTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool
extern List *CreateEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); isPostprocess);
extern List *AlterTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * CreateEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool
extern List *AlterEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); isPostprocess);
extern List *RenameTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); extern List * AlterTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *AlterTypeSchemaStmtObjectAddress(Node *stmt, extern List * AlterEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
bool missing_ok, bool isPostprocess); extern List * RenameTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool
extern List *RenameTypeAttributeStmtObjectAddress(Node *stmt, isPostprocess);
bool missing_ok); extern List * AlterTypeSchemaStmtObjectAddress(Node *stmt,
extern List *AlterTypeOwnerObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess); bool missing_ok, bool isPostprocess);
extern List *CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress); extern List * RenameTypeAttributeStmtObjectAddress(Node *stmt,
extern char *GenerateBackupNameForTypeCollision(const ObjectAddress *address); bool missing_ok);
extern List * AlterTypeOwnerObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress);
extern char * GenerateBackupNameForTypeCollision(const ObjectAddress *address);
/* function.c - forward declarations */ /* function.c - forward declarations */
extern List *CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress); extern List * CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress);
extern char *GetFunctionDDLCommand(const RegProcedure funcOid, bool useCreateOrReplace); extern char * GetFunctionDDLCommand(const RegProcedure funcOid, bool useCreateOrReplace);
extern char *GenerateBackupNameForProcCollision(const ObjectAddress *address); extern char * GenerateBackupNameForProcCollision(const ObjectAddress *address);
extern ObjectWithArgs *ObjectWithArgsFromOid(Oid funcOid); extern ObjectWithArgs * ObjectWithArgsFromOid(Oid funcOid);
extern void UpdateFunctionDistributionInfo(const ObjectAddress *distAddress, extern void UpdateFunctionDistributionInfo(const ObjectAddress *distAddress,
int *distribution_argument_index, int *distribution_argument_index,
int *colocationId, int *colocationId,
bool *forceDelegation); bool *forceDelegation);
/* vacuum.c - forward declarations */ /* vacuum.c - forward declarations */
extern List *PostprocessVacuumStmt(Node *node, const char *vacuumCommand); extern List * PostprocessVacuumStmt(Node *node, const char *vacuumCommand);
/* view.c - forward declarations */ /* view.c - forward declarations */
extern List *PreprocessViewStmt(Node *node, const char *queryString, extern List * PreprocessViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessViewStmt(Node *node, const char *queryString); extern List * PostprocessViewStmt(Node *node, const char *queryString);
extern List *ViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * ViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *AlterViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * AlterViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *PreprocessDropViewStmt(Node *node, const char *queryString, extern List * PreprocessDropViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List *DropViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern char *CreateViewDDLCommand(Oid viewOid);
extern List *GetViewCreationCommandsOfTable(Oid relationId);
extern char *AlterViewOwnerCommand(Oid viewOid);
extern char *DeparseViewStmt(Node *node);
extern char *DeparseDropViewStmt(Node *node);
extern bool IsViewDistributed(Oid viewOid);
extern List *CreateViewDDLCommandsIdempotent(Oid viewOid);
extern List *PreprocessAlterViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessAlterViewStmt(Node *node, const char *queryString); extern List * DropViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *PreprocessRenameViewStmt(Node *node, const char *queryString, extern char * CreateViewDDLCommand(Oid viewOid);
extern List * GetViewCreationCommandsOfTable(Oid relationId);
extern char * AlterViewOwnerCommand(Oid viewOid);
extern char * DeparseViewStmt(Node *node);
extern char * DeparseDropViewStmt(Node *node);
extern bool IsViewDistributed(Oid viewOid);
extern List * CreateViewDDLCommandsIdempotent(Oid viewOid);
extern List * PreprocessAlterViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *RenameViewStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); extern List * PostprocessAlterViewStmt(Node *node, const char *queryString);
extern List *PreprocessAlterViewSchemaStmt(Node *node, const char *queryString, extern List * PreprocessRenameViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessAlterViewSchemaStmt(Node *node, const char *queryString); extern List * RenameViewStmtObjectAddress(Node *node, bool missing_ok, bool
extern List *AlterViewSchemaStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess); isPostprocess);
extern List * PreprocessAlterViewSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessAlterViewSchemaStmt(Node *node, const char *queryString);
extern List * AlterViewSchemaStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern bool IsViewRenameStmt(RenameStmt *renameStmt); extern bool IsViewRenameStmt(RenameStmt *renameStmt);
/* trigger.c - forward declarations */ /* trigger.c - forward declarations */
extern List *GetExplicitTriggerCommandList(Oid relationId); extern List * GetExplicitTriggerCommandList(Oid relationId);
extern HeapTuple GetTriggerTupleById(Oid triggerId, bool missingOk); extern HeapTuple GetTriggerTupleById(Oid triggerId, bool missingOk);
extern List *GetExplicitTriggerIdList(Oid relationId); extern List * GetExplicitTriggerIdList(Oid relationId);
extern List *PostprocessCreateTriggerStmt(Node *node, const char *queryString); extern List * PostprocessCreateTriggerStmt(Node *node, const char *queryString);
extern List *CreateTriggerStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess); extern List * CreateTriggerStmtObjectAddress(Node *node, bool missingOk, bool
isPostprocess);
extern void CreateTriggerEventExtendNames(CreateTrigStmt *createTriggerStmt, extern void CreateTriggerEventExtendNames(CreateTrigStmt *createTriggerStmt,
char *schemaName, uint64 shardId); char *schemaName, uint64 shardId);
extern List *PreprocessAlterTriggerRenameStmt(Node *node, const char *queryString, extern List * PreprocessAlterTriggerRenameStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern List *PostprocessAlterTriggerRenameStmt(Node *node, const char *queryString); extern List * PostprocessAlterTriggerRenameStmt(Node *node, const char *queryString);
extern void AlterTriggerRenameEventExtendNames(RenameStmt *renameTriggerStmt, extern void AlterTriggerRenameEventExtendNames(RenameStmt *renameTriggerStmt,
char *schemaName, uint64 shardId); char *schemaName, uint64 shardId);
extern List *PostprocessAlterTriggerDependsStmt(Node *node, const char *queryString); extern List * PostprocessAlterTriggerDependsStmt(Node *node, const char *queryString);
extern List *PreprocessAlterTriggerDependsStmt(Node *node, const char *queryString, extern List * PreprocessAlterTriggerDependsStmt(Node *node, const char *queryString,
ProcessUtilityContext ProcessUtilityContext
processUtilityContext); processUtilityContext);
extern void AlterTriggerDependsEventExtendNames( extern void AlterTriggerDependsEventExtendNames(
AlterObjectDependsStmt *alterTriggerDependsStmt, AlterObjectDependsStmt *alterTriggerDependsStmt,
char *schemaName, uint64 shardId); char *schemaName, uint64 shardId);
extern void ErrorOutForTriggerIfNotSupported(Oid relationId); extern void ErrorOutForTriggerIfNotSupported(Oid relationId);
extern void ErrorIfRelationHasUnsupportedTrigger(Oid relationId); extern void ErrorIfRelationHasUnsupportedTrigger(Oid relationId);
extern List *PreprocessDropTriggerStmt(Node *node, const char *queryString, extern List * PreprocessDropTriggerStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext); ProcessUtilityContext processUtilityContext);
extern void DropTriggerEventExtendNames(DropStmt *dropTriggerStmt, char *schemaName, extern void DropTriggerEventExtendNames(DropStmt *dropTriggerStmt, char *schemaName,
uint64 shardId); uint64 shardId);
extern List *CitusCreateTriggerCommandDDLJob(Oid relationId, char *triggerName, extern List * CitusCreateTriggerCommandDDLJob(Oid relationId, char *triggerName,
const char *queryString); const char *queryString);
extern Oid GetTriggerFunctionId(Oid triggerId); extern Oid GetTriggerFunctionId(Oid triggerId);
/* cascade_table_operation_for_connected_relations.c */ /* cascade_table_operation_for_connected_relations.c */
@ -746,12 +793,12 @@ typedef enum CascadeOperationType
extern void CascadeOperationForFkeyConnectedRelations(Oid relationId, extern void CascadeOperationForFkeyConnectedRelations(Oid relationId,
LOCKMODE relLockMode, LOCKMODE relLockMode,
CascadeOperationType CascadeOperationType
cascadeOperationType); cascadeOperationType);
extern void CascadeOperationForRelationIdList(List *relationIdList, LOCKMODE lockMode, extern void CascadeOperationForRelationIdList(List *relationIdList, LOCKMODE lockMode,
CascadeOperationType cascadeOperationType); CascadeOperationType cascadeOperationType);
extern void ErrorIfAnyPartitionRelationInvolvedInNonInheritedFKey(List *relationIdList); extern void ErrorIfAnyPartitionRelationInvolvedInNonInheritedFKey(List *relationIdList);
extern bool RelationIdListHasReferenceTable(List *relationIdList); extern bool RelationIdListHasReferenceTable(List *relationIdList);
extern List *GetFKeyCreationCommandsForRelationIdList(List *relationIdList); extern List * GetFKeyCreationCommandsForRelationIdList(List *relationIdList);
extern void DropRelationForeignKeys(Oid relationId, int flags); extern void DropRelationForeignKeys(Oid relationId, int flags);
extern void SetLocalEnableLocalReferenceForeignKeys(bool state); extern void SetLocalEnableLocalReferenceForeignKeys(bool state);
extern void ExecuteAndLogUtilityCommandListInTableTypeConversionViaSPI( extern void ExecuteAndLogUtilityCommandListInTableTypeConversionViaSPI(
@ -765,7 +812,7 @@ extern void ExecuteForeignKeyCreateCommandList(List *ddlCommandList,
extern void CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys, extern void CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys,
bool autoConverted); bool autoConverted);
extern bool ShouldAddNewTableToMetadata(Oid relationId); extern bool ShouldAddNewTableToMetadata(Oid relationId);
extern List *GetExplicitIndexOidList(Oid relationId); extern List * GetExplicitIndexOidList(Oid relationId);
extern bool ShouldPropagateSetCommand(VariableSetStmt *setStmt); extern bool ShouldPropagateSetCommand(VariableSetStmt *setStmt);
extern void PostprocessVariableSetStmt(VariableSetStmt *setStmt, const char *setCommand); extern void PostprocessVariableSetStmt(VariableSetStmt *setStmt, const char *setCommand);
@ -773,7 +820,7 @@ extern void PostprocessVariableSetStmt(VariableSetStmt *setStmt, const char *set
extern void CreateCitusLocalTablePartitionOf(CreateStmt *createStatement, extern void CreateCitusLocalTablePartitionOf(CreateStmt *createStatement,
Oid relationId, Oid parentRelationId); Oid relationId, Oid parentRelationId);
extern void UpdateAutoConvertedForConnectedRelations(List *relationId, bool extern void UpdateAutoConvertedForConnectedRelations(List *relationId, bool
autoConverted); autoConverted);
/* schema_based_sharding.c */ /* schema_based_sharding.c */
extern bool ShouldUseSchemaBasedSharding(char *schemaName); extern bool ShouldUseSchemaBasedSharding(char *schemaName);

View File

@ -231,7 +231,6 @@ extern char * DeparseCreateDatabaseStmt(Node *node);
extern char * DeparseDropDatabaseStmt(Node *node); extern char * DeparseDropDatabaseStmt(Node *node);
/* forward declaration for deparse_publication_stmts.c */ /* forward declaration for deparse_publication_stmts.c */
extern char * DeparseCreatePublicationStmt(Node *stmt); extern char * DeparseCreatePublicationStmt(Node *stmt);
extern char * DeparseCreatePublicationStmtExtended(Node *node, extern char * DeparseCreatePublicationStmtExtended(Node *node,