Adds first commit

create_drop_db_gh
gindibay 2023-09-23 01:50:23 +03:00
parent 0dca65c84d
commit 226696e42a
10 changed files with 891 additions and 444 deletions

View File

@ -18,7 +18,7 @@ generated_downgrade_sql_files += $(patsubst %,$(citus_abs_srcdir)/build/sql/%,$(
DATA_built = $(generated_sql_files)
# directories with source files
SUBDIRS = . commands connection ddl deparser executor metadata operations planner progress relay safeclib shardsplit test transaction utils worker clock
SUBDIRS = . commands connection database ddl deparser executor metadata operations planner progress relay safeclib shardsplit test transaction utils worker clock
# enterprise modules
SUBDIRS += replication

View File

@ -19,6 +19,7 @@
#include "miscadmin.h"
#include "nodes/parsenodes.h"
#include "utils/syscache.h"
#include "utils/builtins.h"
#include "distributed/commands.h"
#include "distributed/commands/utility_hook.h"
@ -28,13 +29,42 @@
#include "distributed/multi_executor.h"
#include "distributed/relation_access_tracking.h"
#include "distributed/worker_transaction.h"
#include "distributed/deparser.h"
#include "distributed/worker_protocol.h"
#include "distributed/metadata/distobject.h"
#include "distributed/database/database_sharding.h"
#include "distributed/deparse_shard_query.h"
/* macros to add DefElems to a list */
#define DEFELEM_ADD_STRING(options, key, value) { \
DefElem *elem = makeDefElem(key, (Node *) makeString(value), -1); \
options = lappend(options, elem); \
}
#define DEFELEM_ADD_BOOL(options, key, value) { \
DefElem *elem = makeDefElem(key, (Node *) makeBoolean(value), -1); \
options = lappend(options, elem); \
}
#define DEFELEM_ADD_INT(options, key, value) { \
DefElem *elem = makeDefElem(key, (Node *) makeInteger(value), -1); \
options = lappend(options, elem); \
}
static AlterOwnerStmt * RecreateAlterDatabaseOwnerStmt(Oid databaseOid);
static List * CreateDDLTaskList(char *command, List *workerNodeList,
bool outsideTransaction);
PG_FUNCTION_INFO_V1(citus_internal_database_command);
static Oid get_database_owner(Oid db_oid);
List * PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
/* controlled via GUC */
bool EnableCreateDatabasePropagation = true;
bool EnableAlterDatabaseOwner = true;
@ -148,6 +178,78 @@ PreprocessGrantOnDatabaseStmt(Node *node, const char *queryString,
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
}
/*
* citus_internal_database_command is an internal UDF to
* create/drop a database in an idempotent maner without
* transaction block restrictions.
*/
Datum
citus_internal_database_command(PG_FUNCTION_ARGS)
{
text *commandText = PG_GETARG_TEXT_P(0);
char *command = text_to_cstring(commandText);
Node *parseTree = ParseTreeNode(command);
set_config_option("citus.enable_ddl_propagation", "off",
(superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION,
GUC_ACTION_LOCAL, true, 0, false);
set_config_option("citus.enable_create_database_propagation", "off",
(superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION,
GUC_ACTION_LOCAL, true, 0, false);
if (IsA(parseTree, CreatedbStmt))
{
CreatedbStmt *stmt = castNode(CreatedbStmt, parseTree);
bool missingOk = true;
Oid databaseOid = get_database_oid(stmt->dbname, missingOk);
if (!OidIsValid(databaseOid))
{
createdb(NULL, (CreatedbStmt *) parseTree);
}
else
{
/* TODO: check database properties */
}
}
else if (IsA(parseTree, DropdbStmt))
{
DropdbStmt *stmt = castNode(DropdbStmt, parseTree);
bool missingOk = true;
Oid databaseOid = get_database_oid(stmt->dbname, missingOk);
if (!OidIsValid(databaseOid))
{
/* already dropped? */
}
else
{
/* remove database from pg_dist_object */
ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
if (IsObjectDistributed(&dbAddress))
{
UnmarkObjectDistributed(&dbAddress);
}
/* remove database from database shards */
DeleteDatabaseShardByDatabaseIdLocally(databaseOid);
DropDatabase(NULL, (DropdbStmt *) parseTree);
}
}
else
{
ereport(ERROR, (errmsg("unsupported command type %d", nodeTag(parseTree))));
}
PG_RETURN_VOID();
}
/*
* PreprocessAlterDatabaseStmt is executed before the statement is applied to the local
@ -213,6 +315,35 @@ PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
#endif
/*
* CreateDDLTaskList creates a task list for running a single DDL command.
*/
static List *
CreateDDLTaskList(char *command, List *workerNodeList, bool outsideTransaction)
{
List *commandList = list_make3(DISABLE_DDL_PROPAGATION,
command,
ENABLE_DDL_PROPAGATION);
Task *task = CitusMakeNode(Task);
task->taskType = DDL_TASK;
SetTaskQueryStringList(task, commandList);
task->cannotBeExecutedInTransction = outsideTransaction;
WorkerNode *workerNode = NULL;
foreach_ptr(workerNode, workerNodeList)
{
ShardPlacement *targetPlacement = CitusMakeNode(ShardPlacement);
targetPlacement->nodeName = workerNode->workerName;
targetPlacement->nodePort = workerNode->workerPort;
targetPlacement->groupId = workerNode->groupId;
task->taskPlacementList = lappend(task->taskPlacementList,
targetPlacement);
}
return list_make1(task);
}
/*
* PreprocessAlterDatabaseSetStmt is executed before the statement is applied to the local
@ -242,3 +373,111 @@ PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
}
/*
* PostprocessCreatedbStmt creates the plan to synchronize CREATE DATABASE
* across nodes. We use the cannotBeExecutedInTransction option to avoid
* u* sending transaction blocks.
*/
List *
PostprocessCreateDatabaseStmt(Node *node, const char *queryString)
{
if (!EnableCreateDatabasePropagation || !ShouldPropagate())
{
return NIL;
}
CreatedbStmt *stmt = castNode(CreatedbStmt, node);
char *databaseName = stmt->dbname;
bool missingOk = false;
Oid databaseOid = get_database_oid(databaseName, missingOk);
/*
* TODO: try to reuse regular DDL infrastructure
*
* We do not do this right now because of the AssignDatabaseToShard at the end.
*/
List *workerNodes = TargetWorkerSetNodeList(NON_COORDINATOR_METADATA_NODES, RowShareLock);
if (list_length(workerNodes) > 0)
{
char *createDatabaseCommand = DeparseTreeNode(node);
StringInfo internalCreateCommand = makeStringInfo();
appendStringInfo(internalCreateCommand,
"SELECT pg_catalog.citus_internal_database_command(%s)",
quote_literal_cstr(createDatabaseCommand));
/*
* For the moment, we run CREATE DATABASE in 2PC, though that prevents
* us from immediately doing a pg_dump | pg_restore when dealing with
* a remote template database.
*/
bool outsideTransaction = false;
List *taskList = CreateDDLTaskList(internalCreateCommand->data, workerNodes,
outsideTransaction);
bool localExecutionSupported = false;
ExecuteUtilityTaskList(taskList, localExecutionSupported);
}
/* synchronize pg_dist_object records */
ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
MarkObjectDistributed(&dbAddress);
return NIL;
}
List *
PreprocessDropDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext)
{
if (!EnableCreateDatabasePropagation || !ShouldPropagate())
{
return NIL;
}
DropdbStmt *stmt = (DropdbStmt *) node;
char *databaseName = stmt->dbname;
bool missingOk = true;
Oid databaseOid = get_database_oid(databaseName, missingOk);
if (databaseOid == InvalidOid)
{
/* let regular ProcessUtility deal with IF NOT EXISTS */
return NIL;
}
ObjectAddress dbAddress = { 0 };
ObjectAddressSet(dbAddress, DatabaseRelationId, databaseOid);
if (!IsObjectDistributed(&dbAddress))
{
return NIL;
}
List *workerNodes = TargetWorkerSetNodeList(NON_COORDINATOR_METADATA_NODES, RowShareLock);
if (list_length(workerNodes) == 0)
{
return NIL;
}
char *dropDatabaseCommand = DeparseTreeNode(node);
StringInfo internalDropCommand = makeStringInfo();
appendStringInfo(internalDropCommand,
"SELECT pg_catalog.citus_internal_database_command(%s)",
quote_literal_cstr(dropDatabaseCommand));
/* we execute here to avoid EnsureCoordinator check in ExecuteDistributedDDLJob */
bool outsideTransaction = false;
List *taskList = CreateDDLTaskList(internalDropCommand->data, workerNodes,
outsideTransaction);
bool localExecutionSupported = false;
ExecuteUtilityTaskList(taskList, localExecutionSupported);
return NIL;
}

View File

@ -466,6 +466,28 @@ static DistributeObjectOps Database_Alter = {
.markDistributed = false,
};
static DistributeObjectOps Database_Create = {
.deparse = DeparseCreateDatabaseStmt,
.qualify = NULL,
.preprocess = NULL,
.postprocess = PostprocessCreateDatabaseStmt,
.objectType = OBJECT_DATABASE,
.operationType = DIST_OPS_CREATE,
.address = NULL,
.markDistributed = false,
};
static DistributeObjectOps Database_Drop = {
.deparse = DeparseDropDatabaseStmt,
.qualify = NULL,
.preprocess = PreprocessDropDatabaseStmt,
.postprocess = NULL,
.objectType = OBJECT_DATABASE,
.operationType = DIST_OPS_DROP,
.address = NULL,
.markDistributed = false,
};
#if PG_VERSION_NUM >= PG_VERSION_15
static DistributeObjectOps Database_RefreshColl = {
.deparse = DeparseAlterDatabaseRefreshCollStmt,
@ -1333,6 +1355,15 @@ GetDistributeObjectOps(Node *node)
{
return &Database_Alter;
}
case T_CreatedbStmt:
{
return &Database_Create;
}
case T_DropdbStmt:
{
return &Database_Drop;
}
#if PG_VERSION_NUM >= PG_VERSION_15
case T_AlterDatabaseRefreshCollStmt:

View File

@ -0,0 +1,53 @@
/*
* database_sharding.h
*
* Data structure definition for managing backend data and related function
*
* Copyright (c) Microsoft, Inc.
*/
#ifndef DATABASE_SHARDING_H
#define DATABASE_SHARDING_H
#include "tcop/utility.h"
/* attributes of citus_catalog.database_shard */
#define Natts_database_shard 3
#define Anum_database_shard_database_id 1
#define Anum_database_shard_node_group_id 2
#define Anum_database_shard_is_available 3
typedef struct DatabaseShard
{
/* database oid */
Oid databaseOid;
/* node group on which the database shard is placed */
int nodeGroupId;
/* whether the database shard is available */
bool isAvailable;
} DatabaseShard;
/* citus.enable_database_sharding setting */
extern bool EnableDatabaseSharding;
void PreProcessUtilityInDatabaseShard(Node *parseTree, const char *queryString,
ProcessUtilityContext context,
bool *runPreviousUtilityHook);
void PostProcessUtilityInDatabaseShard(Node *parseTree, const char *queryString,
ProcessUtilityContext context);
bool DatabaseShardingEnabled(void);
void AssignDatabaseToShard(Oid databaseOid);
void UpdateDatabaseShard(Oid databaseOid, int targetNodeGroupId);
void DeleteDatabaseShardByDatabaseIdLocally(Oid databaseOid);
DatabaseShard * GetDatabaseShardByOid(Oid databaseOid);
List * ListDatabaseShards(void);
int64 CitusDatabaseSize(Oid databaseId);
char * InsertDatabaseShardAssignmentCommand(Oid databaseOid, int nodeGroupId);
#endif

View File

@ -24,7 +24,7 @@
#include "distributed/deparser.h"
#include "distributed/log_utils.h"
#include "parser/parse_type.h"
#include "distributed/listutils.h"
static void AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt);
static void AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt);
@ -34,7 +34,7 @@ char *
DeparseAlterDatabaseOwnerStmt(Node *node)
{
AlterOwnerStmt *stmt = castNode(AlterOwnerStmt, node);
StringInfoData str = { 0 };
StringInfoData str = {0};
initStringInfo(&str);
Assert(stmt->objectType == OBJECT_DATABASE);
@ -44,7 +44,6 @@ DeparseAlterDatabaseOwnerStmt(Node *node)
return str.data;
}
static void
AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
{
@ -52,18 +51,17 @@ AppendAlterDatabaseOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
appendStringInfo(buf,
"ALTER DATABASE %s OWNER TO %s;",
quote_identifier(strVal((String *) stmt->object)),
quote_identifier(strVal((String *)stmt->object)),
RoleSpecString(stmt->newowner, true));
}
static void
AppendGrantDatabases(StringInfo buf, GrantStmt *stmt)
{
ListCell *cell = NULL;
appendStringInfo(buf, " ON DATABASE ");
foreach(cell, stmt->objects)
foreach (cell, stmt->objects)
{
char *database = strVal(lfirst(cell));
appendStringInfoString(buf, quote_identifier(database));
@ -74,7 +72,6 @@ AppendGrantDatabases(StringInfo buf, GrantStmt *stmt)
}
}
static void
AppendGrantOnDatabaseStmt(StringInfo buf, GrantStmt *stmt)
{
@ -87,14 +84,12 @@ AppendGrantOnDatabaseStmt(StringInfo buf, GrantStmt *stmt)
AppendGrantSharedSuffix(buf, stmt);
}
static void
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
AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt)
{
@ -104,7 +99,7 @@ AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt)
{
ListCell *cell = NULL;
appendStringInfo(buf, "WITH ");
foreach(cell, stmt->options)
foreach (cell, stmt->options)
{
DefElem *def = castNode(DefElem, lfirst(cell));
if (strcmp(def->defname, "is_template") == 0)
@ -133,14 +128,13 @@ AppendAlterDatabaseStmt(StringInfo buf, AlterDatabaseStmt *stmt)
appendStringInfo(buf, ";");
}
char *
DeparseGrantOnDatabaseStmt(Node *node)
{
GrantStmt *stmt = castNode(GrantStmt, node);
Assert(stmt->objtype == OBJECT_DATABASE);
StringInfoData str = { 0 };
StringInfoData str = {0};
initStringInfo(&str);
AppendGrantOnDatabaseStmt(&str, stmt);
@ -148,13 +142,12 @@ DeparseGrantOnDatabaseStmt(Node *node)
return str.data;
}
char *
DeparseAlterDatabaseStmt(Node *node)
{
AlterDatabaseStmt *stmt = castNode(AlterDatabaseStmt, node);
StringInfoData str = { 0 };
StringInfoData str = {0};
initStringInfo(&str);
AppendAlterDatabaseStmt(&str, stmt);
@ -162,12 +155,11 @@ DeparseAlterDatabaseStmt(Node *node)
return str.data;
}
#if PG_VERSION_NUM >= PG_VERSION_15
char *
DeparseAlterDatabaseRefreshCollStmt(Node *node)
{
AlterDatabaseRefreshCollStmt *stmt = (AlterDatabaseRefreshCollStmt *) node;
AlterDatabaseRefreshCollStmt *stmt = (AlterDatabaseRefreshCollStmt *)node;
StringInfoData str;
initStringInfo(&str);
@ -179,7 +171,6 @@ DeparseAlterDatabaseRefreshCollStmt(Node *node)
return str.data;
}
#endif
static void
@ -192,16 +183,193 @@ AppendAlterDatabaseSetStmt(StringInfo buf, AlterDatabaseSetStmt *stmt)
AppendVariableSet(buf, varSetStmt);
}
char *
DeparseAlterDatabaseSetStmt(Node *node)
{
AlterDatabaseSetStmt *stmt = castNode(AlterDatabaseSetStmt, node);
StringInfoData str = { 0 };
StringInfoData str = {0};
initStringInfo(&str);
AppendAlterDatabaseSetStmt(&str, stmt);
return str.data;
}
char *
DeparseCreateDatabaseSetStmt(Node *node)
{
CreatedbStmt *stmt = castNode(CreatedbStmt, node);
StringInfoData str = {0};
initStringInfo(&str);
AppendCreatedbStmt(&str, stmt);
return str.data;
}
static void
AppendCreatedbStmt(StringInfo buf, CreatedbStmt *stmt)
{
appendStringInfo(buf,
"CREATE DATABASE %s",
quote_identifier(stmt->dbname));
DefElem *option = NULL;
foreach_ptr(option, stmt->options)
{
if (strcmp(option->defname, "tablespace") == 0)
{
char *tablespaceName = defGetString(option);
appendStringInfo(buf, " TABLESPACE %s",
quote_identifier(tablespaceName));
}
else if (strcmp(option->defname, "owner") == 0)
{
char *owner = defGetString(option);
appendStringInfo(buf, " OWNER %s",
quote_identifier(owner));
}
else if (strcmp(option->defname, "template") == 0)
{
char *template = defGetString(option);
appendStringInfo(buf, " TEMPLATE %s",
quote_identifier(template));
}
else if (strcmp(option->defname, "encoding") == 0)
{
char *encoding = defGetString(option);
appendStringInfo(buf, " ENCODING %s",
quote_literal_cstr(encoding));
}
else if (strcmp(option->defname, "locale") == 0)
{
char *locale = defGetString(option);
appendStringInfo(buf, " LOCALE %s",
quote_literal_cstr(locale));
}
else if (strcmp(option->defname, "lc_collate") == 0)
{
char *lc_collate = defGetString(option);
appendStringInfo(buf, " LC_COLLATE %s",
quote_literal_cstr(lc_collate));
}
else if (strcmp(option->defname, "lc_ctype") == 0)
{
char *lc_ctype = defGetString(option);
appendStringInfo(buf, " LC_CTYPE %s",
quote_literal_cstr(lc_ctype));
}
else if (strcmp(option->defname, "icu_locale") == 0)
{
char *icuLocale = defGetString(option);
appendStringInfo(buf, " ICU_LOCALE %s",
quote_literal_cstr(icuLocale));
}
else if (strcmp(option->defname, "locale_provider") == 0)
{
char *localeProvider = defGetString(option);
appendStringInfo(buf, " LOCALE_PROVIDER %s",
quote_literal_cstr(localeProvider));
}
else if (strcmp(option->defname, "is_template") == 0)
{
bool isTemplate = defGetBoolean(option);
appendStringInfo(buf, " IS_TEMPLATE %s",
isTemplate ? "true" : "false");
}
else if (strcmp(option->defname, "allow_connections") == 0)
{
bool allowConnections = defGetBoolean(option);
appendStringInfo(buf, " ALLOW_CONNECTIONS %s",
allowConnections ? "true" : "false");
}
else if (strcmp(option->defname, "connection_limit") == 0)
{
int connectionLimit = defGetInt32(option);
appendStringInfo(buf, " CONNECTION_LIMIT %d", connectionLimit);
}
#if PG_VERSION_NUM >= PG_VERSION_15
else if (strcmp(option->defname, "collation_version") == 0)
{
char *collationVersion = defGetString(option);
appendStringInfo(buf, " COLLATION_VERSION %s",
quote_literal_cstr(collationVersion));
}
else if (strcmp(option->defname, "oid") == 0)
{
Oid objectId = defGetObjectId(option);
appendStringInfo(buf, " OID %d", objectId);
}
else if (strcmp(option->defname, "strategy") == 0)
{
char *strategy = defGetString(option);
appendStringInfo(buf, " STRATEGY %s",
quote_literal_cstr(strategy));
}
#endif
else if (strcmp(option->defname, "location") == 0)
{
/* deprecated option */
}
else
{
ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR),
errmsg("unrecognized CREATE DATABASE option \"%s\"",
option->defname)));
}
}
}
char *
DeparseDropDatabaseStmt(Node *node)
{
DropdbStmt *stmt = castNode(DropdbStmt, node);
StringInfoData str = { 0 };
initStringInfo(&str);
AppendDropDatabaseStmt(&str, stmt);
return str.data;
}
static void
AppendDropDatabaseStmt(StringInfo buf, DropdbStmt *stmt)
{
appendStringInfo(buf,
"DROP DATABASE %s",
quote_identifier(stmt->dbname));
DefElem *option = NULL;
foreach_ptr(option, stmt->options)
{
if (strcmp(option->defname, "force") == 0)
{
appendStringInfo(buf, " FORCE");
}
else
{
ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR),
errmsg("unrecognized DROP DATABASE option \"%s\"",
option->defname)));
}
}
}

View File

@ -1,3 +1,14 @@
-- citus--12.1-1--12.2-1
/*
* citus_internal_database_command creates a database according to the given command.
*/
CREATE OR REPLACE FUNCTION pg_catalog.citus_internal_database_command(command text)
RETURNS void
LANGUAGE C
STRICT
AS 'MODULE_PATHNAME', $$citus_internal_database_command$$;
COMMENT ON FUNCTION pg_catalog.citus_internal_database_command(text) IS
'run a database command without transaction block restrictions';
-- bump version to 12.2-1

View File

@ -1,2 +1,3 @@
-- citus--12.2-1--12.1-1
DROP FUNCTION pg_catalog.citus_internal_database_command(text);
-- this is an empty downgrade path since citus--12.2-1--12.1-1.sql is empty for now

View File

@ -22,7 +22,6 @@
#include "tcop/utility.h"
#include "utils/acl.h"
extern bool AddAllLocalTablesToMetadata;
extern bool EnableSchemaBasedSharding;
@ -58,7 +57,6 @@ typedef enum DistOpsOperationType
DIST_OPS_DROP,
} DistOpsOperationType;
/*
* DistributeObjectOps specifies handlers for node/object type pairs.
* Instances of this type should all be declared in deparse.c.
@ -79,11 +77,11 @@ typedef enum DistOpsOperationType
*/
typedef struct DistributeObjectOps
{
char * (*deparse)(Node *);
char *(*deparse)(Node *);
void (*qualify)(Node *);
List * (*preprocess)(Node *, const char *, ProcessUtilityContext);
List * (*postprocess)(Node *, const char *);
List * (*address)(Node *, bool, bool);
List *(*preprocess)(Node *, const char *, ProcessUtilityContext);
List *(*postprocess)(Node *, const char *);
List *(*address)(Node *, bool, bool);
bool markDistributed;
/* fields used by common implementations, omitted for specialized implementations */
@ -101,7 +99,7 @@ typedef struct DistributeObjectOps
#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
@ -140,7 +138,6 @@ typedef enum ExtractForeignKeyConstraintsMode
INCLUDE_SINGLE_SHARD_TABLES
} ExtractForeignKeyConstraintMode;
/*
* Flags that can be passed to GetForeignKeyIdsForColumn to
* indicate whether relationId argument should match:
@ -159,7 +156,6 @@ typedef enum SearchForeignKeyColumnFlags
/* callers can also pass union of above flags */
} SearchForeignKeyColumnFlags;
typedef enum TenantOperation
{
TENANT_UNDISTRIBUTE_TABLE = 0,
@ -176,112 +172,100 @@ extern const char *TenantOperationNames[TOTAL_TENANT_OPERATION];
extern void SaveBeginCommandProperties(TransactionStmt *transactionStmt);
/* cluster.c - forward declarations */
extern List * PreprocessClusterStmt(Node *node, const char *clusterCommand,
extern List *PreprocessClusterStmt(Node *node, const char *clusterCommand,
ProcessUtilityContext processUtilityContext);
/* common.c - forward declarations*/
extern List * PostprocessCreateDistributedObjectFromCatalogStmt(Node *stmt,
extern List *PostprocessCreateDistributedObjectFromCatalogStmt(Node *stmt,
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,
extern List *PostprocessAlterDistributedObjectStmt(Node *stmt, const char *queryString);
extern List *PreprocessDropDistributedObjectStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * DropTextSearchConfigObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * DropTextSearchDictObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List *DropTextSearchConfigObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *DropTextSearchDictObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
/* index.c */
typedef void (*PGIndexProcessor)(Form_pg_index, List **, int);
/* call.c */
extern bool CallDistributedProcedureRemotely(CallStmt *callStmt, DestReceiver *dest);
/* collation.c - forward declarations */
extern char * CreateCollationDDL(Oid collationId);
extern List * CreateCollationDDLsIdempotent(Oid collationId);
extern List * AlterCollationOwnerObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * RenameCollationStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * AlterCollationSchemaStmtObjectAddress(Node *stmt,
extern char *CreateCollationDDL(Oid collationId);
extern List *CreateCollationDDLsIdempotent(Oid collationId);
extern List *AlterCollationOwnerObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *RenameCollationStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *AlterCollationSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern char * GenerateBackupNameForCollationCollision(const ObjectAddress *address);
extern List * DefineCollationStmtObjectAddress(Node *stmt, 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 */
extern List * AlterDatabaseOwnerObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * DatabaseOwnerDDLCommands(const ObjectAddress *address);
extern List *AlterDatabaseOwnerObjectAddress(Node *node, bool missing_ok, bool 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,
extern List *PreprocessAlterDatabaseStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
extern List *PreprocessAlterDatabaseRefreshCollStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
extern List *PreprocessAlterDatabaseSetStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
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);
/* 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);
/* extension.c - forward declarations */
extern bool IsDropCitusExtensionStmt(Node *parsetree);
extern List * GetDependentFDWsToExtension(Oid extensionId);
extern List *GetDependentFDWsToExtension(Oid extensionId);
extern bool IsCreateAlterExtensionUpdateCitusStmt(Node *parsetree);
extern void PreprocessCreateExtensionStmtForCitusColumnar(Node *parsetree);
extern void PreprocessAlterExtensionCitusStmtForCitusColumnar(Node *parsetree);
extern void PostprocessAlterExtensionCitusStmtForCitusColumnar(Node *parsetree);
extern bool ShouldMarkRelationDistributed(Oid relationId);
extern void ErrorIfUnstableCreateOrAlterExtensionStmt(Node *parsetree);
extern List * PostprocessCreateExtensionStmt(Node *stmt, const char *queryString);
extern List * PreprocessDropExtensionStmt(Node *stmt, const char *queryString,
extern List *PostprocessCreateExtensionStmt(Node *stmt, const char *queryString);
extern List *PreprocessDropExtensionStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterExtensionSchemaStmt(Node *stmt,
extern List *PreprocessAlterExtensionSchemaStmt(Node *stmt,
const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * PostprocessAlterExtensionSchemaStmt(Node *stmt,
extern List *PostprocessAlterExtensionSchemaStmt(Node *stmt,
const char *queryString);
extern List * PreprocessAlterExtensionUpdateStmt(Node *stmt,
extern List *PreprocessAlterExtensionUpdateStmt(Node *stmt,
const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern void PostprocessAlterExtensionCitusUpdateStmt(Node *node);
extern List * PreprocessAlterExtensionContentsStmt(Node *node,
extern List *PreprocessAlterExtensionContentsStmt(Node *node,
const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * CreateExtensionDDLCommand(const ObjectAddress *extensionAddress);
extern List * AlterExtensionSchemaStmtObjectAddress(Node *stmt,
extern List *CreateExtensionDDLCommand(const ObjectAddress *extensionAddress);
extern List *AlterExtensionSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * AlterExtensionUpdateStmtObjectAddress(Node *stmt,
extern List *AlterExtensionUpdateStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern void CreateExtensionWithVersion(char *extname, char *extVersion);
extern void AlterExtensionUpdateStmt(char *extname, char *extVersion);
@ -302,20 +286,20 @@ extern bool ColumnReferencedByAnyForeignKey(char *columnName, Oid relationId);
extern bool ColumnAppearsInForeignKey(char *columnName, Oid relationId);
extern bool ColumnAppearsInForeignKeyToReferenceTable(char *columnName, Oid
relationId);
extern List * GetReferencingForeignConstaintCommands(Oid relationOid);
extern List * GetForeignConstraintToReferenceTablesCommands(Oid relationId);
extern List * GetForeignConstraintFromOtherReferenceTablesCommands(Oid relationId);
extern List * GetForeignConstraintToDistributedTablesCommands(Oid relationId);
extern List * GetForeignConstraintFromDistributedTablesCommands(Oid relationId);
extern List * GetForeignConstraintCommandsInternal(Oid relationId, int flags);
extern List *GetReferencingForeignConstaintCommands(Oid relationOid);
extern List *GetForeignConstraintToReferenceTablesCommands(Oid relationId);
extern List *GetForeignConstraintFromOtherReferenceTablesCommands(Oid relationId);
extern List *GetForeignConstraintToDistributedTablesCommands(Oid relationId);
extern List *GetForeignConstraintFromDistributedTablesCommands(Oid relationId);
extern List *GetForeignConstraintCommandsInternal(Oid relationId, int flags);
extern Oid DropFKeysAndUndistributeTable(Oid relationId);
extern void DropFKeysRelationInvolvedWithTableType(Oid relationId, int tableTypeFlag);
extern List * GetFKeyCreationCommandsRelationInvolvedWithTableType(Oid relationId,
extern List *GetFKeyCreationCommandsRelationInvolvedWithTableType(Oid relationId,
int tableTypeFlag);
extern bool AnyForeignKeyDependsOnIndex(Oid indexId);
extern bool HasForeignKeyWithLocalTable(Oid relationId);
extern bool HasForeignKeyToReferenceTable(Oid relationOid);
extern List * GetForeignKeysFromLocalTables(Oid relationId);
extern List *GetForeignKeysFromLocalTables(Oid relationId);
extern bool TableReferenced(Oid relationOid);
extern bool TableReferencing(Oid relationOid);
extern bool ConstraintIsAUniquenessConstraint(char *inputConstaintName, Oid relationId);
@ -324,296 +308,268 @@ extern bool ConstraintWithNameIsOfType(char *inputConstaintName, Oid relationId,
char targetConstraintType);
extern bool ConstraintWithIdIsOfType(Oid constraintId, char targetConstraintType);
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 GetReferencingTableId(Oid foreignKeyId);
extern bool RelationInvolvedInAnyNonInheritedForeignKeys(Oid relationId);
/* foreign_data_wrapper.c - forward declarations */
extern List * PreprocessGrantOnFDWStmt(Node *node, const char *queryString,
extern List *PreprocessGrantOnFDWStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern Acl * GetPrivilegesForFDW(Oid FDWOid);
extern Acl *GetPrivilegesForFDW(Oid FDWOid);
/* foreign_server.c - forward declarations */
extern List * PreprocessGrantOnForeignServerStmt(Node *node, const char *queryString,
extern List *PreprocessGrantOnForeignServerStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * CreateForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * AlterForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
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);
extern List *CreateForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *AlterForeignServerStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
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 */
extern List * PreprocessAlterForeignTableSchemaStmt(Node *node, const char *queryString,
extern List *PreprocessAlterForeignTableSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
/* 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,
extern List *PostprocessCreateFunctionStmt(Node *stmt,
const char *queryString);
extern List * CreateFunctionStmtObjectAddress(Node *stmt,
extern List *CreateFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * DefineAggregateStmtObjectAddress(Node *stmt,
extern List *DefineAggregateStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * PreprocessAlterFunctionStmt(Node *stmt, const char *queryString,
extern List *PreprocessAlterFunctionStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * AlterFunctionStmtObjectAddress(Node *stmt,
extern List *AlterFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * RenameFunctionStmtObjectAddress(Node *stmt,
extern List *RenameFunctionStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * AlterFunctionOwnerObjectAddress(Node *stmt,
extern List *AlterFunctionOwnerObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * AlterFunctionSchemaStmtObjectAddress(Node *stmt,
extern List *AlterFunctionSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * PreprocessAlterFunctionDependsStmt(Node *stmt,
extern List *PreprocessAlterFunctionDependsStmt(Node *stmt,
const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * AlterFunctionDependsStmtObjectAddress(Node *stmt,
extern List *AlterFunctionDependsStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * PreprocessGrantOnFunctionStmt(Node *node, const char *queryString,
extern List *PreprocessGrantOnFunctionStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessGrantOnFunctionStmt(Node *node, const char *queryString);
extern List *PostprocessGrantOnFunctionStmt(Node *node, const char *queryString);
/* grant.c - forward declarations */
extern List * PreprocessGrantStmt(Node *node, const char *queryString,
extern List *PreprocessGrantStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern void deparsePrivileges(StringInfo privsString, GrantStmt *grantStmt);
extern void deparseGrantees(StringInfo granteesString, GrantStmt *grantStmt);
/* index.c - forward declarations */
extern bool IsIndexRenameStmt(RenameStmt *renameStmt);
extern List * PreprocessIndexStmt(Node *createIndexStatement,
extern List *PreprocessIndexStmt(Node *createIndexStatement,
const char *createIndexCommand,
ProcessUtilityContext processUtilityContext);
extern char * ChooseIndexName(const char *tabname, Oid namespaceId,
extern char *ChooseIndexName(const char *tabname, Oid namespaceId,
List *colnames, List *exclusionOpNames,
bool primary, bool isconstraint);
extern char * ChooseIndexNameAddition(List *colnames);
extern List * ChooseIndexColumnNames(List *indexElems);
extern char *ChooseIndexNameAddition(List *colnames);
extern List *ChooseIndexColumnNames(List *indexElems);
extern LOCKMODE GetCreateIndexRelationLockMode(IndexStmt *createIndexStatement);
extern List * PreprocessReindexStmt(Node *ReindexStatement,
extern List *PreprocessReindexStmt(Node *ReindexStatement,
const char *ReindexCommand,
ProcessUtilityContext processUtilityContext);
extern List * ReindexStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List * PreprocessDropIndexStmt(Node *dropIndexStatement,
extern List *ReindexStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *PreprocessDropIndexStmt(Node *dropIndexStatement,
const char *dropIndexCommand,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessIndexStmt(Node *node,
extern List *PostprocessIndexStmt(Node *node,
const char *queryString);
extern void ErrorIfUnsupportedAlterIndexStmt(AlterTableStmt *alterTableStatement);
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);
/* 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 */
extern List * PreprocessDropOwnedStmt(Node *node, const char *queryString,
extern List *PreprocessDropOwnedStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
/* policy.c - forward declarations */
extern List * CreatePolicyCommands(Oid relationId);
extern List *CreatePolicyCommands(Oid relationId);
extern void ErrorIfUnsupportedPolicy(Relation relation);
extern void ErrorIfUnsupportedPolicyExpr(Node *expr);
extern List * PostprocessCreatePolicyStmt(Node *node, const char *queryString);
extern List * PreprocessAlterPolicyStmt(Node *node, const char *queryString,
extern List *PostprocessCreatePolicyStmt(Node *node, const char *queryString);
extern List *PreprocessAlterPolicyStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessDropPolicyStmt(Node *stmt, const char *queryString,
extern List *PreprocessDropPolicyStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern bool IsPolicyRenameStmt(RenameStmt *stmt);
extern void CreatePolicyEventExtendNames(CreatePolicyStmt *stmt, const char *schemaName,
uint64 shardId);
extern void AlterPolicyEventExtendNames(AlterPolicyStmt *stmt, const char *schemaName,
uint64 shardId);
extern void RenamePolicyEventExtendNames(RenameStmt *stmt, const char *schemaName, uint64
shardId);
extern void DropPolicyEventExtendNames(DropStmt *stmt, const char *schemaName, uint64
shardId);
extern void RenamePolicyEventExtendNames(RenameStmt *stmt, const char *schemaName, uint64 shardId);
extern void DropPolicyEventExtendNames(DropStmt *stmt, const char *schemaName, uint64 shardId);
extern void AddRangeTableEntryToQueryCompat(ParseState *parseState, Relation relation);
/* publication.c - forward declarations */
extern List * PostProcessCreatePublicationStmt(Node *node, const char *queryString);
extern List * CreatePublicationDDLCommandsIdempotent(const ObjectAddress *address);
extern char * CreatePublicationDDLCommand(Oid publicationId);
extern List * PreprocessAlterPublicationStmt(Node *stmt, const char *queryString,
extern List *PostProcessCreatePublicationStmt(Node *node, const char *queryString);
extern List *CreatePublicationDDLCommandsIdempotent(const ObjectAddress *address);
extern char *CreatePublicationDDLCommand(Oid publicationId);
extern List *PreprocessAlterPublicationStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityCtx);
extern List * GetAlterPublicationDDLCommandsForTable(Oid relationId, bool isAdd);
extern char * GetAlterPublicationTableDDLCommand(Oid publicationId, Oid relationId,
extern List *GetAlterPublicationDDLCommandsForTable(Oid relationId, bool isAdd);
extern char *GetAlterPublicationTableDDLCommand(Oid publicationId, Oid relationId,
bool isAdd);
extern List * AlterPublicationOwnerStmtObjectAddress(Node *node, bool missingOk,
extern List *AlterPublicationOwnerStmtObjectAddress(Node *node, bool missingOk,
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,
extern List *CreatePublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess);
extern List * RenamePublicationStmtObjectAddress(Node *node, bool missingOk,
extern List *RenamePublicationStmtObjectAddress(Node *node, bool missingOk,
bool isPostProcess);
/* rename.c - forward declarations*/
extern List * PreprocessRenameStmt(Node *renameStmt, const char *renameCommand,
extern List *PreprocessRenameStmt(Node *renameStmt, const char *renameCommand,
ProcessUtilityContext processUtilityContext);
extern void ErrorIfUnsupportedRenameStmt(RenameStmt *renameStmt);
extern List * PreprocessRenameAttributeStmt(Node *stmt, const char *queryString,
extern List *PreprocessRenameAttributeStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
/* role.c - forward declarations*/
extern List * PostprocessAlterRoleStmt(Node *stmt, const char *queryString);
extern List * PreprocessAlterRoleSetStmt(Node *stmt, const char *queryString,
extern List *PostprocessAlterRoleStmt(Node *stmt, const char *queryString);
extern List *PreprocessAlterRoleSetStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterRoleRenameStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * GenerateAlterRoleSetCommandForRole(Oid roleid);
extern List * AlterRoleStmtObjectAddress(Node *node,
extern List *GenerateAlterRoleSetCommandForRole(Oid roleid);
extern List *AlterRoleStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List * AlterRoleSetStmtObjectAddress(Node *node,
extern List *AlterRoleSetStmtObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List * PreprocessCreateRoleStmt(Node *stmt, const char *queryString,
extern List *PreprocessCreateRoleStmt(Node *stmt, const char *queryString,
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,
extern List *PreprocessGrantRoleStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
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 *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
isPostprocess);
extern void UnmarkRolesDistributed(List *roles);
extern List * FilterDistributedRoles(List *roles);
extern List *FilterDistributedRoles(List *roles);
/* schema.c - forward declarations */
extern List * PostprocessCreateSchemaStmt(Node *node, const char *queryString);
extern List * PreprocessDropSchemaStmt(Node *dropSchemaStatement,
extern List *PostprocessCreateSchemaStmt(Node *node, const char *queryString);
extern List *PreprocessDropSchemaStmt(Node *dropSchemaStatement,
const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PreprocessAlterObjectSchemaStmt(Node *alterObjectSchemaStmt,
extern List *PreprocessAlterObjectSchemaStmt(Node *alterObjectSchemaStmt,
const char *alterObjectSchemaCommand);
extern List * PreprocessGrantOnSchemaStmt(Node *node, const char *queryString,
extern List *PreprocessGrantOnSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * CreateSchemaStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * AlterSchemaOwnerStmtObjectAddress(Node *node, bool missing_ok,
extern List *CreateSchemaStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern List *AlterSchemaOwnerStmtObjectAddress(Node *node, bool missing_ok,
bool isPostprocess);
extern List * AlterSchemaRenameStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List *AlterSchemaRenameStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
/* 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,
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,
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);
extern List *PostprocessAlterSequenceOwnerStmt(Node *node, const char *queryString);
#if (PG_VERSION_NUM >= PG_VERSION_15)
extern List * PreprocessAlterSequencePersistenceStmt(Node *node, const char *queryString,
extern List *PreprocessAlterSequencePersistenceStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern List * PreprocessSequenceAlterTableStmt(Node *node, const char *queryString,
extern List *PreprocessSequenceAlterTableStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
#endif
extern List * PreprocessDropSequenceStmt(Node *node, const char *queryString,
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,
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,
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);
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);
extern List *AlterSequencePersistenceStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
#endif
extern List * RenameSequenceStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List *RenameSequenceStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern void ErrorIfUnsupportedSeqStmt(CreateSeqStmt *createSeqStmt);
extern void ErrorIfDistributedAlterSeqOwnedBy(AlterSeqStmt *alterSeqStmt);
extern char * GenerateBackupNameForSequenceCollision(const ObjectAddress *address);
extern char *GenerateBackupNameForSequenceCollision(const ObjectAddress *address);
extern void RenameExistingSequenceWithDifferentTypeIfExists(RangeVar *sequence,
Oid desiredSeqTypeId);
/* statistics.c - forward declarations */
extern List * PreprocessCreateStatisticsStmt(Node *node, const char *queryString,
extern List *PreprocessCreateStatisticsStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessCreateStatisticsStmt(Node *node, const char *queryString);
extern List * CreateStatisticsStmtObjectAddress(Node *node, bool missingOk, bool
isPostprocess);
extern List * PreprocessDropStatisticsStmt(Node *node, const char *queryString,
extern List *PostprocessCreateStatisticsStmt(Node *node, const char *queryString);
extern List *CreateStatisticsStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess);
extern List *PreprocessDropStatisticsStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * DropStatisticsObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * PreprocessAlterStatisticsRenameStmt(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,
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,
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,
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);
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 */
extern Node * ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt);
extern Node *ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt);
/* table.c - forward declarations */
extern List * PreprocessDropTableStmt(Node *stmt, const char *queryString,
extern List *PreprocessDropTableStmt(Node *stmt, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern void PostprocessCreateTableStmt(CreateStmt *createStatement,
const char *queryString);
extern bool ShouldEnableLocalReferenceForeignKeys(void);
extern List * PreprocessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement,
extern List *PreprocessAlterTableStmtAttachPartition(AlterTableStmt *alterTableStatement,
const char *queryString);
extern List * PostprocessAlterTableSchemaStmt(Node *node, const char *queryString);
extern List *PostprocessAlterTableSchemaStmt(Node *node, const char *queryString);
extern void PrepareAlterTableStmtForConstraint(AlterTableStmt *alterTableStatement,
Oid relationId, Constraint *constraint);
extern List * PreprocessAlterTableStmt(Node *node, const char *alterTableCommand,
extern List *PreprocessAlterTableStmt(Node *node, const char *alterTableCommand,
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,
extern List *PreprocessAlterTableSchemaStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern void SkipForeignKeyValidationIfConstraintIsFkey(AlterTableStmt *alterTableStmt,
bool processLocalRelation);
@ -626,15 +582,15 @@ extern void ErrorUnsupportedAlterTableAddColumn(Oid relationId, AlterTableCmd *c
extern void ErrorIfUnsupportedConstraint(Relation relation, char distributionMethod,
char referencingReplicationModel,
Var *distributionColumn, uint32 colocationId);
extern List * InterShardDDLTaskList(Oid leftRelationId, Oid rightRelationId,
extern List *InterShardDDLTaskList(Oid leftRelationId, Oid rightRelationId,
const char *commandString);
extern List * AlterTableSchemaStmtObjectAddress(Node *stmt,
extern List *AlterTableSchemaStmtObjectAddress(Node *stmt,
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 bool ConstrTypeUsesIndex(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);
extern void ErrorIfTableHasIdentityColumn(Oid relationId);
@ -642,131 +598,115 @@ extern void ConvertNewTableIfNecessary(Node *createStmt);
extern void ConvertToTenantTableIfNecessary(AlterObjectSchemaStmt *alterObjectSchemaStmt);
/* text_search.c - forward declarations */
extern List * GetCreateTextSearchConfigStatements(const ObjectAddress *address);
extern List * GetCreateTextSearchDictionaryStatements(const ObjectAddress *address);
extern List * CreateTextSearchConfigDDLCommandsIdempotent(const ObjectAddress *address);
extern List * CreateTextSearchDictDDLCommandsIdempotent(const ObjectAddress *address);
extern List * CreateTextSearchConfigurationObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * CreateTextSearchDictObjectAddress(Node *node,
extern List *GetCreateTextSearchConfigStatements(const ObjectAddress *address);
extern List *GetCreateTextSearchDictionaryStatements(const ObjectAddress *address);
extern List *CreateTextSearchConfigDDLCommandsIdempotent(const ObjectAddress *address);
extern List *CreateTextSearchDictDDLCommandsIdempotent(const ObjectAddress *address);
extern List *CreateTextSearchConfigurationObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
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,
extern List *CreateTextSearchDictObjectAddress(Node *node,
bool missing_ok, bool isPostprocess);
extern List * AlterTextSearchConfigurationOwnerObjectAddress(Node *node,
bool missing_ok, bool
isPostprocess);
extern List * AlterTextSearchDictOwnerObjectAddress(Node *node,
extern List *RenameTextSearchConfigurationStmtObjectAddress(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);
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);
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 */
extern void PreprocessTruncateStatement(TruncateStmt *truncateStatement);
/* type.c - forward declarations */
extern List * PreprocessRenameTypeAttributeStmt(Node *stmt, const char *queryString,
extern List *PreprocessRenameTypeAttributeStmt(Node *stmt, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern Node * CreateTypeStmtByObjectAddress(const ObjectAddress *address);
extern List * CompositeTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * CreateEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * AlterTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List * AlterEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List * RenameTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool
isPostprocess);
extern List * AlterTypeSchemaStmtObjectAddress(Node *stmt,
extern Node *CreateTypeStmtByObjectAddress(const ObjectAddress *address);
extern List *CompositeTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *CreateEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *AlterTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *AlterEnumStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *RenameTypeStmtObjectAddress(Node *stmt, bool missing_ok, bool isPostprocess);
extern List *AlterTypeSchemaStmtObjectAddress(Node *stmt,
bool missing_ok, bool isPostprocess);
extern List * RenameTypeAttributeStmtObjectAddress(Node *stmt,
extern List *RenameTypeAttributeStmtObjectAddress(Node *stmt,
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);
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 */
extern List * CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress);
extern char * GetFunctionDDLCommand(const RegProcedure funcOid, bool useCreateOrReplace);
extern char * GenerateBackupNameForProcCollision(const ObjectAddress *address);
extern ObjectWithArgs * ObjectWithArgsFromOid(Oid funcOid);
extern List *CreateFunctionDDLCommandsIdempotent(const ObjectAddress *functionAddress);
extern char *GetFunctionDDLCommand(const RegProcedure funcOid, bool useCreateOrReplace);
extern char *GenerateBackupNameForProcCollision(const ObjectAddress *address);
extern ObjectWithArgs *ObjectWithArgsFromOid(Oid funcOid);
extern void UpdateFunctionDistributionInfo(const ObjectAddress *distAddress,
int *distribution_argument_index,
int *colocationId,
bool *forceDelegation);
/* vacuum.c - forward declarations */
extern List * PostprocessVacuumStmt(Node *node, const char *vacuumCommand);
extern List *PostprocessVacuumStmt(Node *node, const char *vacuumCommand);
/* view.c - forward declarations */
extern List * PreprocessViewStmt(Node *node, const char *queryString,
extern List *PreprocessViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessViewStmt(Node *node, const char *queryString);
extern List * ViewStmtObjectAddress(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 *PostprocessViewStmt(Node *node, const char *queryString);
extern List *ViewStmtObjectAddress(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,
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 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,
extern List *CreateViewDDLCommandsIdempotent(Oid viewOid);
extern List *PreprocessAlterViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessAlterViewStmt(Node *node, const char *queryString);
extern List * PreprocessRenameViewStmt(Node *node, const char *queryString,
extern List *PostprocessAlterViewStmt(Node *node, const char *queryString);
extern List *PreprocessRenameViewStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * RenameViewStmtObjectAddress(Node *node, bool missing_ok, bool
isPostprocess);
extern List * PreprocessAlterViewSchemaStmt(Node *node, const char *queryString,
extern List *RenameViewStmtObjectAddress(Node *node, bool missing_ok, bool 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 List *PostprocessAlterViewSchemaStmt(Node *node, const char *queryString);
extern List *AlterViewSchemaStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess);
extern bool IsViewRenameStmt(RenameStmt *renameStmt);
/* trigger.c - forward declarations */
extern List * GetExplicitTriggerCommandList(Oid relationId);
extern List *GetExplicitTriggerCommandList(Oid relationId);
extern HeapTuple GetTriggerTupleById(Oid triggerId, bool missingOk);
extern List * GetExplicitTriggerIdList(Oid relationId);
extern List * PostprocessCreateTriggerStmt(Node *node, const char *queryString);
extern List * CreateTriggerStmtObjectAddress(Node *node, bool missingOk, bool
isPostprocess);
extern List *GetExplicitTriggerIdList(Oid relationId);
extern List *PostprocessCreateTriggerStmt(Node *node, const char *queryString);
extern List *CreateTriggerStmtObjectAddress(Node *node, bool missingOk, bool isPostprocess);
extern void CreateTriggerEventExtendNames(CreateTrigStmt *createTriggerStmt,
char *schemaName, uint64 shardId);
extern List * PreprocessAlterTriggerRenameStmt(Node *node, const char *queryString,
extern List *PreprocessAlterTriggerRenameStmt(Node *node, const char *queryString,
ProcessUtilityContext processUtilityContext);
extern List * PostprocessAlterTriggerRenameStmt(Node *node, const char *queryString);
extern List *PostprocessAlterTriggerRenameStmt(Node *node, const char *queryString);
extern void AlterTriggerRenameEventExtendNames(RenameStmt *renameTriggerStmt,
char *schemaName, uint64 shardId);
extern List * PostprocessAlterTriggerDependsStmt(Node *node, const char *queryString);
extern List * PreprocessAlterTriggerDependsStmt(Node *node, const char *queryString,
extern List *PostprocessAlterTriggerDependsStmt(Node *node, const char *queryString);
extern List *PreprocessAlterTriggerDependsStmt(Node *node, const char *queryString,
ProcessUtilityContext
processUtilityContext);
extern void AlterTriggerDependsEventExtendNames(
@ -774,11 +714,11 @@ extern void AlterTriggerDependsEventExtendNames(
char *schemaName, uint64 shardId);
extern void ErrorOutForTriggerIfNotSupported(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);
extern void DropTriggerEventExtendNames(DropStmt *dropTriggerStmt, char *schemaName,
uint64 shardId);
extern List * CitusCreateTriggerCommandDDLJob(Oid relationId, char *triggerName,
extern List *CitusCreateTriggerCommandDDLJob(Oid relationId, char *triggerName,
const char *queryString);
extern Oid GetTriggerFunctionId(Oid triggerId);
@ -811,7 +751,7 @@ extern void CascadeOperationForRelationIdList(List *relationIdList, LOCKMODE loc
CascadeOperationType cascadeOperationType);
extern void ErrorIfAnyPartitionRelationInvolvedInNonInheritedFKey(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 SetLocalEnableLocalReferenceForeignKeys(bool state);
extern void ExecuteAndLogUtilityCommandListInTableTypeConversionViaSPI(
@ -825,7 +765,7 @@ extern void ExecuteForeignKeyCreateCommandList(List *ddlCommandList,
extern void CreateCitusLocalTable(Oid relationId, bool cascadeViaForeignKeys,
bool autoConverted);
extern bool ShouldAddNewTableToMetadata(Oid relationId);
extern List * GetExplicitIndexOidList(Oid relationId);
extern List *GetExplicitIndexOidList(Oid relationId);
extern bool ShouldPropagateSetCommand(VariableSetStmt *setStmt);
extern void PostprocessVariableSetStmt(VariableSetStmt *setStmt, const char *setCommand);

View File

@ -227,6 +227,9 @@ extern char * DeparseGrantOnDatabaseStmt(Node *node);
extern char * DeparseAlterDatabaseStmt(Node *node);
extern char * DeparseAlterDatabaseRefreshCollStmt(Node *node);
extern char * DeparseAlterDatabaseSetStmt(Node *node);
extern char * DeparseCreateDatabaseStmt(Node *node);
extern char * DeparseDropDatabaseStmt(Node *node);
/* forward declaration for deparse_publication_stmts.c */

View File

@ -21,6 +21,7 @@
extern bool ObjectExists(const ObjectAddress *address);
extern bool CitusExtensionObject(const ObjectAddress *objectAddress);
extern bool IsAnyObjectDistributed(const List *addresses);
extern bool IsObjectDistributed(const ObjectAddress *address);
extern bool ClusterHasDistributedFunctionWithDistArgument(void);
extern void MarkObjectDistributed(const ObjectAddress *distAddress);
extern void MarkObjectDistributedViaSuperUser(const ObjectAddress *distAddress);