mirror of https://github.com/citusdata/citus.git
Miscellaneous cleanup in prep for collation propagation
parent
1ed05be82c
commit
b7fef5c31a
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "catalog/dependency.h"
|
#include "catalog/dependency.h"
|
||||||
#include "catalog/objectaddress.h"
|
#include "catalog/objectaddress.h"
|
||||||
|
#include "commands/extension.h"
|
||||||
#include "distributed/commands.h"
|
#include "distributed/commands.h"
|
||||||
#include "distributed/connection_management.h"
|
#include "distributed/connection_management.h"
|
||||||
#include "distributed/metadata/dependency.h"
|
#include "distributed/metadata/dependency.h"
|
||||||
|
@ -267,6 +268,55 @@ ReplicateAllDependenciesToNode(const char *nodeName, int nodePort)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ShouldPropagate determines if we should be propagating anything
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
ShouldPropagate(void)
|
||||||
|
{
|
||||||
|
if (creating_extension)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* extensions should be created separately on the workers, types cascading from an
|
||||||
|
* extension should therefore not be propagated.
|
||||||
|
*/
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!EnableDependencyCreation)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* we are configured to disable object propagation, should not propagate anything
|
||||||
|
*/
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ShouldPropagateObject determines if we should be propagating DDLs based
|
||||||
|
* on their object address.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
ShouldPropagateObject(const ObjectAddress *address)
|
||||||
|
{
|
||||||
|
if (!ShouldPropagate())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsObjectDistributed(address))
|
||||||
|
{
|
||||||
|
/* do not propagate for non-distributed types */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FilterObjectAddressListByPredicate takes a list of ObjectAddress *'s and returns a list
|
* FilterObjectAddressListByPredicate takes a list of ObjectAddress *'s and returns a list
|
||||||
* only containing the ObjectAddress *'s for which the predicate returned true.
|
* only containing the ObjectAddress *'s for which the predicate returned true.
|
||||||
|
|
|
@ -780,7 +780,7 @@ RecreateExtensionStmt(Oid extensionOid)
|
||||||
* AlterExtensionSchemaStmtObjectAddress returns the ObjectAddress of the extension that is
|
* AlterExtensionSchemaStmtObjectAddress returns the ObjectAddress of the extension that is
|
||||||
* the subject of the AlterObjectSchemaStmt. Errors if missing_ok is false.
|
* the subject of the AlterObjectSchemaStmt. Errors if missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterExtensionSchemaStmtObjectAddress(AlterObjectSchemaStmt *alterExtensionSchemaStmt,
|
AlterExtensionSchemaStmtObjectAddress(AlterObjectSchemaStmt *alterExtensionSchemaStmt,
|
||||||
bool missing_ok)
|
bool missing_ok)
|
||||||
{
|
{
|
||||||
|
@ -812,7 +812,7 @@ AlterExtensionSchemaStmtObjectAddress(AlterObjectSchemaStmt *alterExtensionSchem
|
||||||
* AlterExtensionUpdateStmtObjectAddress returns the ObjectAddress of the extension that is
|
* AlterExtensionUpdateStmtObjectAddress returns the ObjectAddress of the extension that is
|
||||||
* the subject of the AlterExtensionStmt. Errors if missing_ok is false.
|
* the subject of the AlterExtensionStmt. Errors if missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterExtensionUpdateStmtObjectAddress(AlterExtensionStmt *alterExtensionStmt,
|
AlterExtensionUpdateStmtObjectAddress(AlterExtensionStmt *alterExtensionStmt,
|
||||||
bool missing_ok)
|
bool missing_ok)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1256,7 +1256,7 @@ ProcessCreateFunctionStmt(CreateFunctionStmt *stmt, const char *queryString)
|
||||||
* CREATE [OR REPLACE] FUNCTION statement. If missing_ok is false it will error with the
|
* CREATE [OR REPLACE] FUNCTION statement. If missing_ok is false it will error with the
|
||||||
* normal postgres error for unfound functions.
|
* normal postgres error for unfound functions.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
CreateFunctionStmtObjectAddress(CreateFunctionStmt *stmt, bool missing_ok)
|
CreateFunctionStmtObjectAddress(CreateFunctionStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
ObjectType objectType = OBJECT_FUNCTION;
|
ObjectType objectType = OBJECT_FUNCTION;
|
||||||
|
@ -1281,7 +1281,15 @@ CreateFunctionStmtObjectAddress(CreateFunctionStmt *stmt, bool missing_ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const ObjectAddress *
|
/*
|
||||||
|
* DefineAggregateStmtObjectAddress finds the ObjectAddress for the composite type described
|
||||||
|
* by the DefineStmtObjectAddress. If missing_ok is false this function throws an error if the
|
||||||
|
* aggregate does not exist.
|
||||||
|
*
|
||||||
|
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
||||||
|
* to true.
|
||||||
|
*/
|
||||||
|
ObjectAddress *
|
||||||
DefineAggregateStmtObjectAddress(DefineStmt *stmt, bool missing_ok)
|
DefineAggregateStmtObjectAddress(DefineStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
ObjectWithArgs *objectWithArgs = NULL;
|
ObjectWithArgs *objectWithArgs = NULL;
|
||||||
|
@ -1609,7 +1617,7 @@ PlanAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt, const char *queryStri
|
||||||
* is the subject of an ALTER FUNCTION ... DEPENS ON EXTENSION ... statement. If
|
* is the subject of an ALTER FUNCTION ... DEPENS ON EXTENSION ... statement. If
|
||||||
* missing_ok is set to false the lookup will raise an error.
|
* missing_ok is set to false the lookup will raise an error.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterFunctionDependsStmtObjectAddress(AlterObjectDependsStmt *stmt, bool missing_ok)
|
AlterFunctionDependsStmtObjectAddress(AlterObjectDependsStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
AssertObjectTypeIsFunctional(stmt->objectType);
|
AssertObjectTypeIsFunctional(stmt->objectType);
|
||||||
|
@ -1647,7 +1655,7 @@ ProcessAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryStr
|
||||||
* AlterFunctionStmt. If missing_ok is set to false an error will be raised if postgres
|
* AlterFunctionStmt. If missing_ok is set to false an error will be raised if postgres
|
||||||
* was unable to find the function/procedure that was the target of the statement.
|
* was unable to find the function/procedure that was the target of the statement.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterFunctionStmtObjectAddress(AlterFunctionStmt *stmt, bool missing_ok)
|
AlterFunctionStmtObjectAddress(AlterFunctionStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
return FunctionToObjectAddress(stmt->objtype, stmt->func, missing_ok);
|
return FunctionToObjectAddress(stmt->objtype, stmt->func, missing_ok);
|
||||||
|
@ -1658,7 +1666,7 @@ AlterFunctionStmtObjectAddress(AlterFunctionStmt *stmt, bool missing_ok)
|
||||||
* RenameFunctionStmtObjectAddress returns the ObjectAddress of the function that is the
|
* RenameFunctionStmtObjectAddress returns the ObjectAddress of the function that is the
|
||||||
* subject of the RenameStmt. Errors if missing_ok is false.
|
* subject of the RenameStmt. Errors if missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
RenameFunctionStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
RenameFunctionStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
return FunctionToObjectAddress(stmt->renameType,
|
return FunctionToObjectAddress(stmt->renameType,
|
||||||
|
@ -1670,7 +1678,7 @@ RenameFunctionStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
* AlterFunctionOwnerObjectAddress returns the ObjectAddress of the function that is the
|
* AlterFunctionOwnerObjectAddress returns the ObjectAddress of the function that is the
|
||||||
* subject of the AlterOwnerStmt. Errors if missing_ok is false.
|
* subject of the AlterOwnerStmt. Errors if missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterFunctionOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
AlterFunctionOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
return FunctionToObjectAddress(stmt->objectType,
|
return FunctionToObjectAddress(stmt->objectType,
|
||||||
|
@ -1687,7 +1695,7 @@ AlterFunctionOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
||||||
* the new schema. Errors if missing_ok is false and the type cannot be found in either of
|
* the new schema. Errors if missing_ok is false and the type cannot be found in either of
|
||||||
* the schemas.
|
* the schemas.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterFunctionSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
AlterFunctionSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
ObjectWithArgs *objectWithArgs = NULL;
|
ObjectWithArgs *objectWithArgs = NULL;
|
||||||
|
|
|
@ -98,7 +98,6 @@ static CreateEnumStmt * RecreateEnumStmt(Oid typeOid);
|
||||||
static List * EnumValsList(Oid typeOid);
|
static List * EnumValsList(Oid typeOid);
|
||||||
|
|
||||||
static bool ShouldPropagateTypeCreate(void);
|
static bool ShouldPropagateTypeCreate(void);
|
||||||
static bool ShouldPropagateAlterType(const ObjectAddress *address);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -210,7 +209,7 @@ PlanAlterTypeStmt(AlterTableStmt *stmt, const char *queryString)
|
||||||
Assert(stmt->relkind == OBJECT_TYPE);
|
Assert(stmt->relkind == OBJECT_TYPE);
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
@ -332,7 +331,7 @@ PlanAlterEnumStmt(AlterEnumStmt *stmt, const char *queryString)
|
||||||
List *commands = NIL;
|
List *commands = NIL;
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +399,7 @@ ProcessAlterEnumStmt(AlterEnumStmt *stmt, const char *queryString)
|
||||||
const ObjectAddress *typeAddress = NULL;
|
const ObjectAddress *typeAddress = NULL;
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -473,20 +472,8 @@ PlanDropTypeStmt(DropStmt *stmt, const char *queryString)
|
||||||
List *distributedTypeAddresses = NIL;
|
List *distributedTypeAddresses = NIL;
|
||||||
List *commands = NIL;
|
List *commands = NIL;
|
||||||
|
|
||||||
if (creating_extension)
|
if (!ShouldPropagate())
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* extensions should be created separately on the workers, types cascading from an
|
|
||||||
* extension should therefor not be propagated here.
|
|
||||||
*/
|
|
||||||
return NIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EnableDependencyCreation)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* we are configured to disable object propagation, should not propagate anything
|
|
||||||
*/
|
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,7 +536,7 @@ PlanRenameTypeStmt(RenameStmt *stmt, const char *queryString)
|
||||||
List *commands = NIL;
|
List *commands = NIL;
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
@ -589,7 +576,7 @@ PlanRenameTypeAttributeStmt(RenameStmt *stmt, const char *queryString)
|
||||||
Assert(stmt->relationType == OBJECT_TYPE);
|
Assert(stmt->relationType == OBJECT_TYPE);
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
@ -623,7 +610,7 @@ PlanAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString)
|
||||||
Assert(stmt->objectType == OBJECT_TYPE);
|
Assert(stmt->objectType == OBJECT_TYPE);
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
@ -656,7 +643,7 @@ ProcessAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString)
|
||||||
Assert(stmt->objectType == OBJECT_TYPE);
|
Assert(stmt->objectType == OBJECT_TYPE);
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -667,8 +654,8 @@ ProcessAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt, const char *queryString)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PlanAlterTypeOwnerStmt is called for change of owner ship of types before the owner
|
* PlanAlterTypeOwnerStmt is called for change of ownership of types before the
|
||||||
* ship is changed on the local instance.
|
* ownership is changed on the local instance.
|
||||||
*
|
*
|
||||||
* If the type for which the owner is changed is distributed we execute the change on all
|
* If the type for which the owner is changed is distributed we execute the change on all
|
||||||
* the workers to keep the type in sync across the cluster.
|
* the workers to keep the type in sync across the cluster.
|
||||||
|
@ -683,7 +670,7 @@ PlanAlterTypeOwnerStmt(AlterOwnerStmt *stmt, const char *queryString)
|
||||||
Assert(stmt->objectType == OBJECT_TYPE);
|
Assert(stmt->objectType == OBJECT_TYPE);
|
||||||
|
|
||||||
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
typeAddress = GetObjectAddressFromParseTree((Node *) stmt, false);
|
||||||
if (!ShouldPropagateAlterType(typeAddress))
|
if (!ShouldPropagateObject(typeAddress))
|
||||||
{
|
{
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
@ -865,13 +852,13 @@ EnumValsList(Oid typeOid)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CompositeTypeStmtObjectAddress finds the ObjectAddress for the composite type described
|
* CompositeTypeStmtObjectAddress finds the ObjectAddress for the composite type described
|
||||||
* by the CompositeTypeStmt. If missing_ok is false this function throws an error if the
|
* by the CompositeTypeStmt. If missing_ok is false this function throws an error if the
|
||||||
* type does not exist.
|
* type does not exist.
|
||||||
*
|
*
|
||||||
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
||||||
* to true.
|
* to true.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
CompositeTypeStmtObjectAddress(CompositeTypeStmt *stmt, bool missing_ok)
|
CompositeTypeStmtObjectAddress(CompositeTypeStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -895,7 +882,7 @@ CompositeTypeStmtObjectAddress(CompositeTypeStmt *stmt, bool missing_ok)
|
||||||
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
||||||
* to true.
|
* to true.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
CreateEnumStmtObjectAddress(CreateEnumStmt *stmt, bool missing_ok)
|
CreateEnumStmtObjectAddress(CreateEnumStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -919,7 +906,7 @@ CreateEnumStmtObjectAddress(CreateEnumStmt *stmt, bool missing_ok)
|
||||||
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
||||||
* to true.
|
* to true.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterTypeStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok)
|
AlterTypeStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -939,9 +926,9 @@ AlterTypeStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AlterEnumStmtObjectAddress return the ObjectAddress of the enum type that is the
|
* AlterEnumStmtObjectAddress return the ObjectAddress of the enum type that is the
|
||||||
* subject of the AlterEnumStmt. Errors is missing_ok is false.
|
* object of the AlterEnumStmt. Errors is missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterEnumStmtObjectAddress(AlterEnumStmt *stmt, bool missing_ok)
|
AlterEnumStmtObjectAddress(AlterEnumStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -958,10 +945,10 @@ AlterEnumStmtObjectAddress(AlterEnumStmt *stmt, bool missing_ok)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RenameTypeStmtObjectAddress returns the ObjectAddress of the type that is the subject
|
* RenameTypeStmtObjectAddress returns the ObjectAddress of the type that is the object
|
||||||
* of the RenameStmt. Errors if missing_ok is false.
|
* of the RenameStmt. Errors if missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
RenameTypeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
RenameTypeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -981,14 +968,14 @@ RenameTypeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AlterTypeSchemaStmtObjectAddress returns the ObjectAddress of the type that is the
|
* AlterTypeSchemaStmtObjectAddress returns the ObjectAddress of the type that is the
|
||||||
* subject of the AlterObjectSchemaStmt. Errors if missing_ok is false.
|
* object of the AlterObjectSchemaStmt. Errors if missing_ok is false.
|
||||||
*
|
*
|
||||||
* This could be called both before or after it has been applied locally. It will look in
|
* This could be called both before or after it has been applied locally. It will look in
|
||||||
* the old schema first, if the type cannot be found in that schema it will look in the
|
* the old schema first, if the type cannot be found in that schema it will look in the
|
||||||
* new schema. Errors if missing_ok is false and the type cannot be found in either of the
|
* new schema. Errors if missing_ok is false and the type cannot be found in either of the
|
||||||
* schemas.
|
* schemas.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
ObjectAddress *address = NULL;
|
ObjectAddress *address = NULL;
|
||||||
|
@ -1021,9 +1008,9 @@ AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
* we don't error here either, as the error would be not a good user facing
|
* we don't error here either, as the error would be not a good user facing
|
||||||
* error if the type didn't exist in the first place.
|
* error if the type didn't exist in the first place.
|
||||||
*/
|
*/
|
||||||
names = list_make2(makeString(stmt->newschema), typeNameStr);
|
List *newNames = list_make2(makeString(stmt->newschema), typeNameStr);
|
||||||
typeName = makeTypeNameFromNameList(names);
|
TypeName *newTypeName = makeTypeNameFromNameList(newNames);
|
||||||
typeOid = LookupTypeNameOid(NULL, typeName, true);
|
typeOid = LookupTypeNameOid(NULL, newTypeName, true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if the type is still invalid we couldn't find the type, error with the same
|
* if the type is still invalid we couldn't find the type, error with the same
|
||||||
|
@ -1031,9 +1018,6 @@ AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
*/
|
*/
|
||||||
if (!missing_ok && typeOid == InvalidOid)
|
if (!missing_ok && typeOid == InvalidOid)
|
||||||
{
|
{
|
||||||
names = (List *) stmt->object;
|
|
||||||
typeName = makeTypeNameFromNameList(names);
|
|
||||||
|
|
||||||
ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT),
|
ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||||
errmsg("type \"%s\" does not exist",
|
errmsg("type \"%s\" does not exist",
|
||||||
TypeNameToString(typeName))));
|
TypeNameToString(typeName))));
|
||||||
|
@ -1049,13 +1033,13 @@ AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RenameTypeAttributeStmtObjectAddress returns the ObjectAddress of the type that is the
|
* RenameTypeAttributeStmtObjectAddress returns the ObjectAddress of the type that is the
|
||||||
* subject of the RenameStmt. Errors if missing_ok is false.
|
* object of the RenameStmt. Errors if missing_ok is false.
|
||||||
*
|
*
|
||||||
* The ObjectAddress is that of the type, not that of the attributed for which the name is
|
* The ObjectAddress is that of the type, not that of the attributed for which the name is
|
||||||
* changed as Attributes are not distributed on their own but as a side effect of the
|
* changed as Attributes are not distributed on their own but as a side effect of the
|
||||||
* whole type distribution.
|
* whole type distribution.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
RenameTypeAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
RenameTypeAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -1075,10 +1059,10 @@ RenameTypeAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AlterTypeOwnerObjectAddress returns the ObjectAddress of the type that is the subject
|
* AlterTypeOwnerObjectAddress returns the ObjectAddress of the type that is the object
|
||||||
* of the AlterOwnerStmt. Errors if missing_ok is false.
|
* of the AlterOwnerStmt. Errors if missing_ok is false.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
AlterTypeOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
AlterTypeOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
TypeName *typeName = NULL;
|
TypeName *typeName = NULL;
|
||||||
|
@ -1222,7 +1206,7 @@ FilterNameListForDistributedTypes(List *objects, bool missing_ok)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TypeNameListToObjectAddresses transforms a List * of TypeName *'s into a List * of
|
* TypeNameListToObjectAddresses transforms a List * of TypeName *'s into a List * of
|
||||||
* ObjectAddress *'s. For this to succeed all Types identiefied by the TypeName *'s should
|
* ObjectAddress *'s. For this to succeed all Types identified by the TypeName *'s should
|
||||||
* exist on this postgres, an error will be thrown otherwise.
|
* exist on this postgres, an error will be thrown otherwise.
|
||||||
*/
|
*/
|
||||||
static List *
|
static List *
|
||||||
|
@ -1287,7 +1271,7 @@ MakeTypeNameFromRangeVar(const RangeVar *relation)
|
||||||
* EnsureSequentialModeForTypeDDL makes sure that the current transaction is already in
|
* EnsureSequentialModeForTypeDDL makes sure that the current transaction is already in
|
||||||
* sequential mode, or can still safely be put in sequential mode, it errors if that is
|
* sequential mode, or can still safely be put in sequential mode, it errors if that is
|
||||||
* not possible. The error contains information for the user to retry the transaction with
|
* not possible. The error contains information for the user to retry the transaction with
|
||||||
* sequential mode set from the beginnig.
|
* sequential mode set from the begining.
|
||||||
*
|
*
|
||||||
* As types are node scoped objects there exists only 1 instance of the type used by
|
* As types are node scoped objects there exists only 1 instance of the type used by
|
||||||
* potentially multiple shards. To make sure all shards in the transaction can interact
|
* potentially multiple shards. To make sure all shards in the transaction can interact
|
||||||
|
@ -1338,11 +1322,8 @@ EnsureSequentialModeForTypeDDL(void)
|
||||||
static bool
|
static bool
|
||||||
ShouldPropagateTypeCreate()
|
ShouldPropagateTypeCreate()
|
||||||
{
|
{
|
||||||
if (!EnableDependencyCreation)
|
if (!ShouldPropagate())
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* we are configured to disable object propagation, should not propagate anything
|
|
||||||
*/
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1354,15 +1335,6 @@ ShouldPropagateTypeCreate()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (creating_extension)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* extensions should be created separately on the workers, types cascading from an
|
|
||||||
* extension should therefor not be propagated here.
|
|
||||||
*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* by not propagating in a transaction block we allow for parallelism to be used when
|
* by not propagating in a transaction block we allow for parallelism to be used when
|
||||||
* this type will be used as a column in a table that will be created and distributed
|
* this type will be used as a column in a table that will be created and distributed
|
||||||
|
@ -1375,37 +1347,3 @@ ShouldPropagateTypeCreate()
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ShouldPropagateAlterType determines if we should be propagating type alterations based
|
|
||||||
* on its object address.
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
ShouldPropagateAlterType(const ObjectAddress *address)
|
|
||||||
{
|
|
||||||
if (creating_extension)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* extensions should be created separately on the workers, types cascading from an
|
|
||||||
* extension should therefor not be propagated.
|
|
||||||
*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EnableDependencyCreation)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* we are configured to disable object propagation, should not propagate anything
|
|
||||||
*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsObjectDistributed(address))
|
|
||||||
{
|
|
||||||
/* do not propagate alter types for non-distributed types */
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
|
@ -467,8 +467,8 @@ multi_ProcessUtility(PlannedStmt *pstmt,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ALTER TABLE ... RENAME statements have their node type as RenameStmt and
|
* ALTER ... RENAME statements have their node type as RenameStmt.
|
||||||
* not AlterTableStmt. So, we intercept RenameStmt to tackle these commands.
|
* So intercept RenameStmt to tackle these commands.
|
||||||
*/
|
*/
|
||||||
if (IsA(parsetree, RenameStmt))
|
if (IsA(parsetree, RenameStmt))
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,13 +17,13 @@
|
||||||
|
|
||||||
#include "distributed/deparser.h"
|
#include "distributed/deparser.h"
|
||||||
|
|
||||||
static const char * DeparseDropStmt(DropStmt *stmt);
|
static char * DeparseDropStmt(DropStmt *stmt);
|
||||||
static const char * DeparseAlterTableStmt(AlterTableStmt *stmt);
|
static char * DeparseAlterTableStmt(AlterTableStmt *stmt);
|
||||||
static const char * DeparseRenameStmt(RenameStmt *stmt);
|
static char * DeparseRenameStmt(RenameStmt *stmt);
|
||||||
static const char * DeparseRenameAttributeStmt(RenameStmt *stmt);
|
static char * DeparseRenameAttributeStmt(RenameStmt *stmt);
|
||||||
static const char * DeparseAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt);
|
static char * DeparseAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt);
|
||||||
static const char * DeparseAlterOwnerStmt(AlterOwnerStmt *stmt);
|
static char * DeparseAlterOwnerStmt(AlterOwnerStmt *stmt);
|
||||||
static const char * DeparseAlterObjectDependsStmt(AlterObjectDependsStmt *stmt);
|
static char * DeparseAlterObjectDependsStmt(AlterObjectDependsStmt *stmt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DeparseTreeNode aims to be the inverse of postgres' ParseTreeNode. Currently with
|
* DeparseTreeNode aims to be the inverse of postgres' ParseTreeNode. Currently with
|
||||||
|
@ -31,10 +31,7 @@ static const char * DeparseAlterObjectDependsStmt(AlterObjectDependsStmt *stmt);
|
||||||
* required.
|
* required.
|
||||||
*
|
*
|
||||||
* Currently supported:
|
* Currently supported:
|
||||||
* - CREATE TYPE
|
* - CREATE TYPE, ALTER TYPE, DROP TYPE
|
||||||
* - ALTER TYPE
|
|
||||||
* - DROP TYPE
|
|
||||||
*
|
|
||||||
* - ALTER FUNCTION, ALTER PROCEDURE, ALTER AGGREGATE
|
* - ALTER FUNCTION, ALTER PROCEDURE, ALTER AGGREGATE
|
||||||
* - DROP FUNCTION, DROP PROCEDURE, DROP AGGREGATE
|
* - DROP FUNCTION, DROP PROCEDURE, DROP AGGREGATE
|
||||||
*
|
*
|
||||||
|
@ -42,7 +39,7 @@ static const char * DeparseAlterObjectDependsStmt(AlterObjectDependsStmt *stmt);
|
||||||
* - ALTER EXTENSION
|
* - ALTER EXTENSION
|
||||||
* - DROP EXTENSION
|
* - DROP EXTENSION
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseTreeNode(Node *stmt)
|
DeparseTreeNode(Node *stmt)
|
||||||
{
|
{
|
||||||
switch (nodeTag(stmt))
|
switch (nodeTag(stmt))
|
||||||
|
@ -126,7 +123,7 @@ DeparseTreeNode(Node *stmt)
|
||||||
* Currently with limited support. Check support before using, and add support for new
|
* Currently with limited support. Check support before using, and add support for new
|
||||||
* statements as required.
|
* statements as required.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
DeparseDropStmt(DropStmt *stmt)
|
DeparseDropStmt(DropStmt *stmt)
|
||||||
{
|
{
|
||||||
switch (stmt->removeType)
|
switch (stmt->removeType)
|
||||||
|
@ -165,7 +162,7 @@ DeparseDropStmt(DropStmt *stmt)
|
||||||
* Currently with limited support. Check support before using, and add support for new
|
* Currently with limited support. Check support before using, and add support for new
|
||||||
* statements as required.
|
* statements as required.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
DeparseAlterTableStmt(AlterTableStmt *stmt)
|
DeparseAlterTableStmt(AlterTableStmt *stmt)
|
||||||
{
|
{
|
||||||
switch (stmt->relkind)
|
switch (stmt->relkind)
|
||||||
|
@ -193,7 +190,7 @@ DeparseAlterTableStmt(AlterTableStmt *stmt)
|
||||||
* Currently with limited support. Check support before using, and add support for new
|
* Currently with limited support. Check support before using, and add support for new
|
||||||
* statements as required.
|
* statements as required.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
DeparseRenameStmt(RenameStmt *stmt)
|
DeparseRenameStmt(RenameStmt *stmt)
|
||||||
{
|
{
|
||||||
switch (stmt->renameType)
|
switch (stmt->renameType)
|
||||||
|
@ -223,7 +220,7 @@ DeparseRenameStmt(RenameStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const char *
|
static char *
|
||||||
DeparseRenameAttributeStmt(RenameStmt *stmt)
|
DeparseRenameAttributeStmt(RenameStmt *stmt)
|
||||||
{
|
{
|
||||||
Assert(stmt->renameType == OBJECT_ATTRIBUTE);
|
Assert(stmt->renameType == OBJECT_ATTRIBUTE);
|
||||||
|
@ -252,7 +249,7 @@ DeparseRenameAttributeStmt(RenameStmt *stmt)
|
||||||
* Currently with limited support. Check support before using, and add support for new
|
* Currently with limited support. Check support before using, and add support for new
|
||||||
* statements as required.
|
* statements as required.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
DeparseAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
|
DeparseAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
|
||||||
{
|
{
|
||||||
switch (stmt->objectType)
|
switch (stmt->objectType)
|
||||||
|
@ -290,7 +287,7 @@ DeparseAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
|
||||||
* Currently with limited support. Check support before using, and add support for new
|
* Currently with limited support. Check support before using, and add support for new
|
||||||
* statements as required.
|
* statements as required.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
DeparseAlterOwnerStmt(AlterOwnerStmt *stmt)
|
DeparseAlterOwnerStmt(AlterOwnerStmt *stmt)
|
||||||
{
|
{
|
||||||
switch (stmt->objectType)
|
switch (stmt->objectType)
|
||||||
|
@ -323,7 +320,7 @@ DeparseAlterOwnerStmt(AlterOwnerStmt *stmt)
|
||||||
* Currently with limited support. Check support before using, and add support for new
|
* Currently with limited support. Check support before using, and add support for new
|
||||||
* statements as required.
|
* statements as required.
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
DeparseAlterObjectDependsStmt(AlterObjectDependsStmt *stmt)
|
DeparseAlterObjectDependsStmt(AlterObjectDependsStmt *stmt)
|
||||||
{
|
{
|
||||||
switch (stmt->objectType)
|
switch (stmt->objectType)
|
||||||
|
|
|
@ -67,7 +67,7 @@ GetExtensionOption(List *extensionOptions, const char *defname)
|
||||||
* DeparseCreateExtensionStmt builds and returns a string representing the
|
* DeparseCreateExtensionStmt builds and returns a string representing the
|
||||||
* CreateExtensionStmt to be sent to worker nodes.
|
* CreateExtensionStmt to be sent to worker nodes.
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseCreateExtensionStmt(CreateExtensionStmt *createExtensionStmt)
|
DeparseCreateExtensionStmt(CreateExtensionStmt *createExtensionStmt)
|
||||||
{
|
{
|
||||||
StringInfoData sql = { 0 };
|
StringInfoData sql = { 0 };
|
||||||
|
@ -139,7 +139,7 @@ AppendCreateExtensionStmt(StringInfo buf, CreateExtensionStmt *createExtensionSt
|
||||||
* DeparseAlterExtensionStmt builds and returns a string representing the
|
* DeparseAlterExtensionStmt builds and returns a string representing the
|
||||||
* AlterExtensionStmt to be sent to worker nodes.
|
* AlterExtensionStmt to be sent to worker nodes.
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterExtensionStmt(AlterExtensionStmt *alterExtensionStmt)
|
DeparseAlterExtensionStmt(AlterExtensionStmt *alterExtensionStmt)
|
||||||
{
|
{
|
||||||
StringInfoData sql = { 0 };
|
StringInfoData sql = { 0 };
|
||||||
|
@ -181,7 +181,7 @@ AppendAlterExtensionStmt(StringInfo buf, AlterExtensionStmt *alterExtensionStmt)
|
||||||
/*
|
/*
|
||||||
* DeparseDropExtensionStmt builds and returns a string representing the DropStmt
|
* DeparseDropExtensionStmt builds and returns a string representing the DropStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseDropExtensionStmt(DropStmt *dropStmt)
|
DeparseDropExtensionStmt(DropStmt *dropStmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -248,7 +248,7 @@ AppendExtensionNameList(StringInfo str, List *objects)
|
||||||
* DeparseAlterExtensionSchemaStmt builds and returns a string representing the
|
* DeparseAlterExtensionSchemaStmt builds and returns a string representing the
|
||||||
* AlterObjectSchemaStmt (ALTER EXTENSION SET SCHEMA).
|
* AlterObjectSchemaStmt (ALTER EXTENSION SET SCHEMA).
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterExtensionSchemaStmt(AlterObjectSchemaStmt *alterExtensionSchemaStmt)
|
DeparseAlterExtensionSchemaStmt(AlterObjectSchemaStmt *alterExtensionSchemaStmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
|
|
||||||
/* forward declaration for deparse functions */
|
/* forward declaration for deparse functions */
|
||||||
static const char * ObjectTypeToKeyword(ObjectType objtype);
|
static char * ObjectTypeToKeyword(ObjectType objtype);
|
||||||
|
|
||||||
static void AppendAlterFunctionStmt(StringInfo buf, AlterFunctionStmt *stmt);
|
static void AppendAlterFunctionStmt(StringInfo buf, AlterFunctionStmt *stmt);
|
||||||
static void AppendDropFunctionStmt(StringInfo buf, DropStmt *stmt);
|
static void AppendDropFunctionStmt(StringInfo buf, DropStmt *stmt);
|
||||||
|
@ -68,7 +68,7 @@ static char * CopyAndConvertToUpperCase(const char *str);
|
||||||
/*
|
/*
|
||||||
* DeparseAlterFunctionStmt builds and returns a string representing the AlterFunctionStmt
|
* DeparseAlterFunctionStmt builds and returns a string representing the AlterFunctionStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterFunctionStmt(AlterFunctionStmt *stmt)
|
DeparseAlterFunctionStmt(AlterFunctionStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -84,7 +84,7 @@ DeparseAlterFunctionStmt(AlterFunctionStmt *stmt)
|
||||||
* ObjectTypeToKeyword returns an appropriate string for the given ObjectType
|
* ObjectTypeToKeyword returns an appropriate string for the given ObjectType
|
||||||
* Where the string will be one of "FUNCTION", "PROCEDURE", or "AGGREGATE"
|
* Where the string will be one of "FUNCTION", "PROCEDURE", or "AGGREGATE"
|
||||||
*/
|
*/
|
||||||
static const char *
|
static char *
|
||||||
ObjectTypeToKeyword(ObjectType objtype)
|
ObjectTypeToKeyword(ObjectType objtype)
|
||||||
{
|
{
|
||||||
switch (objtype)
|
switch (objtype)
|
||||||
|
@ -316,7 +316,7 @@ AppendDefElemSet(StringInfo buf, DefElem *def)
|
||||||
/*
|
/*
|
||||||
* DeparseRenameFunctionStmt builds and returns a string representing the RenameStmt
|
* DeparseRenameFunctionStmt builds and returns a string representing the RenameStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseRenameFunctionStmt(RenameStmt *stmt)
|
DeparseRenameFunctionStmt(RenameStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -347,7 +347,7 @@ AppendRenameFunctionStmt(StringInfo buf, RenameStmt *stmt)
|
||||||
/*
|
/*
|
||||||
* DeparseAlterFunctionSchemaStmt builds and returns a string representing the AlterObjectSchemaStmt
|
* DeparseAlterFunctionSchemaStmt builds and returns a string representing the AlterObjectSchemaStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt)
|
DeparseAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -378,7 +378,7 @@ AppendAlterFunctionSchemaStmt(StringInfo buf, AlterObjectSchemaStmt *stmt)
|
||||||
/*
|
/*
|
||||||
* DeparseAlterFunctionOwnerStmt builds and returns a string representing the AlterOwnerStmt
|
* DeparseAlterFunctionOwnerStmt builds and returns a string representing the AlterOwnerStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterFunctionOwnerStmt(AlterOwnerStmt *stmt)
|
DeparseAlterFunctionOwnerStmt(AlterOwnerStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -409,7 +409,7 @@ AppendAlterFunctionOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
|
||||||
/*
|
/*
|
||||||
* DeparseAlterFunctionDependsStmt builds and returns a string representing the AlterObjectDependsStmt
|
* DeparseAlterFunctionDependsStmt builds and returns a string representing the AlterObjectDependsStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt)
|
DeparseAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -440,7 +440,7 @@ AppendAlterFunctionDependsStmt(StringInfo buf, AlterObjectDependsStmt *stmt)
|
||||||
/*
|
/*
|
||||||
* DeparseDropFunctionStmt builds and returns a string representing the DropStmt
|
* DeparseDropFunctionStmt builds and returns a string representing the DropStmt
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseDropFunctionStmt(DropStmt *stmt)
|
DeparseDropFunctionStmt(DropStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
|
|
@ -26,7 +26,7 @@ static void AppendAlterRoleStmt(StringInfo buf, AlterRoleStmt *stmt);
|
||||||
* DeparseAlterRoleStmt builds and returns a string representing of the
|
* DeparseAlterRoleStmt builds and returns a string representing of the
|
||||||
* AlterRoleStmt for application on a remote server.
|
* AlterRoleStmt for application on a remote server.
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseAlterRoleStmt(AlterRoleStmt *stmt)
|
DeparseAlterRoleStmt(AlterRoleStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData buf = { 0 };
|
StringInfoData buf = { 0 };
|
||||||
|
|
|
@ -61,7 +61,7 @@ static void AppendAlterTypeOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt);
|
||||||
* DeparseCompositeTypeStmt builds and returns a string representing the
|
* DeparseCompositeTypeStmt builds and returns a string representing the
|
||||||
* CompositeTypeStmt for application on a remote server.
|
* CompositeTypeStmt for application on a remote server.
|
||||||
*/
|
*/
|
||||||
const char *
|
char *
|
||||||
DeparseCompositeTypeStmt(CompositeTypeStmt *stmt)
|
DeparseCompositeTypeStmt(CompositeTypeStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData sql = { 0 };
|
StringInfoData sql = { 0 };
|
||||||
|
@ -73,7 +73,7 @@ DeparseCompositeTypeStmt(CompositeTypeStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseCreateEnumStmt(CreateEnumStmt *stmt)
|
DeparseCreateEnumStmt(CreateEnumStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData sql = { 0 };
|
StringInfoData sql = { 0 };
|
||||||
|
@ -85,7 +85,7 @@ DeparseCreateEnumStmt(CreateEnumStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseAlterEnumStmt(AlterEnumStmt *stmt)
|
DeparseAlterEnumStmt(AlterEnumStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData sql = { 0 };
|
StringInfoData sql = { 0 };
|
||||||
|
@ -97,7 +97,7 @@ DeparseAlterEnumStmt(AlterEnumStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseDropTypeStmt(DropStmt *stmt)
|
DeparseDropTypeStmt(DropStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -111,7 +111,7 @@ DeparseDropTypeStmt(DropStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseAlterTypeStmt(AlterTableStmt *stmt)
|
DeparseAlterTypeStmt(AlterTableStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -398,7 +398,7 @@ AppendColumnDef(StringInfo str, ColumnDef *columnDef)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseRenameTypeStmt(RenameStmt *stmt)
|
DeparseRenameTypeStmt(RenameStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -422,7 +422,7 @@ AppendRenameTypeStmt(StringInfo buf, RenameStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseRenameTypeAttributeStmt(RenameStmt *stmt)
|
DeparseRenameTypeAttributeStmt(RenameStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -455,7 +455,7 @@ AppendRenameTypeAttributeStmt(StringInfo buf, RenameStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt)
|
DeparseAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
@ -482,7 +482,7 @@ AppendAlterTypeSchemaStmt(StringInfo buf, AlterObjectSchemaStmt *stmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
char *
|
||||||
DeparseAlterTypeOwnerStmt(AlterOwnerStmt *stmt)
|
DeparseAlterTypeOwnerStmt(AlterOwnerStmt *stmt)
|
||||||
{
|
{
|
||||||
StringInfoData str = { 0 };
|
StringInfoData str = { 0 };
|
||||||
|
|
|
@ -18,28 +18,25 @@
|
||||||
#include "catalog/objectaddress.h"
|
#include "catalog/objectaddress.h"
|
||||||
#include "catalog/pg_extension_d.h"
|
#include "catalog/pg_extension_d.h"
|
||||||
|
|
||||||
static const ObjectAddress * AlterTableStmtObjectAddress(AlterTableStmt *stmt,
|
static ObjectAddress * AlterTableStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok);
|
||||||
bool missing_ok);
|
static ObjectAddress * RenameStmtObjectAddress(RenameStmt *stmt, bool missing_ok);
|
||||||
static const ObjectAddress * RenameStmtObjectAddress(RenameStmt *stmt, bool missing_ok);
|
static ObjectAddress * AlterObjectSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt,
|
||||||
static const ObjectAddress * AlterObjectSchemaStmtObjectAddress(
|
bool missing_ok);
|
||||||
AlterObjectSchemaStmt *stmt, bool missing_ok);
|
static ObjectAddress * RenameAttributeStmtObjectAddress(RenameStmt *stmt, bool
|
||||||
static const ObjectAddress * RenameAttributeStmtObjectAddress(RenameStmt *stmt,
|
missing_ok);
|
||||||
bool missing_ok);
|
static ObjectAddress * AlterOwnerStmtObjectAddress(AlterOwnerStmt *stmt, bool missing_ok);
|
||||||
static const ObjectAddress * AlterOwnerStmtObjectAddress(AlterOwnerStmt *stmt,
|
static ObjectAddress * AlterObjectDependsStmtObjectAddress(AlterObjectDependsStmt *stmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
static const ObjectAddress * AlterObjectDependsStmtObjectAddress(
|
static ObjectAddress * CreateExtensionStmtObjectAddress(CreateExtensionStmt *stmt, bool
|
||||||
AlterObjectDependsStmt *stmt, bool missing_ok);
|
missing_ok);
|
||||||
static const ObjectAddress * CreateExtensionStmtObjectAddress(CreateExtensionStmt *stmt,
|
static ObjectAddress * AlterExtensionStmtObjectAddress(
|
||||||
bool missing_ok);
|
AlterExtensionStmt *alterExtensionStmt, bool missing_ok);
|
||||||
static const ObjectAddress * AlterExtensionStmtObjectAddress(
|
|
||||||
AlterExtensionStmt *alterExtensionStmt, bool
|
|
||||||
missing_ok);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GetObjectAddressFromParseTree returns the ObjectAdderss of the main target of the parse
|
* GetObjectAddressFromParseTree returns the ObjectAddress of the main target of the parse
|
||||||
* tree.
|
* tree.
|
||||||
*/
|
*/
|
||||||
const ObjectAddress *
|
ObjectAddress *
|
||||||
GetObjectAddressFromParseTree(Node *parseTree, bool missing_ok)
|
GetObjectAddressFromParseTree(Node *parseTree, bool missing_ok)
|
||||||
{
|
{
|
||||||
switch (parseTree->type)
|
switch (parseTree->type)
|
||||||
|
@ -141,7 +138,7 @@ GetObjectAddressFromParseTree(Node *parseTree, bool missing_ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
AlterTableStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok)
|
AlterTableStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
switch (stmt->relkind)
|
switch (stmt->relkind)
|
||||||
|
@ -160,7 +157,7 @@ AlterTableStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
RenameStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
RenameStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
switch (stmt->renameType)
|
switch (stmt->renameType)
|
||||||
|
@ -191,7 +188,7 @@ RenameStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
AlterObjectSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
AlterObjectSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
switch (stmt->objectType)
|
switch (stmt->objectType)
|
||||||
|
@ -222,7 +219,7 @@ AlterObjectSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt, bool missing_ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
RenameAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
RenameAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
Assert(stmt->renameType == OBJECT_ATTRIBUTE);
|
Assert(stmt->renameType == OBJECT_ATTRIBUTE);
|
||||||
|
@ -243,7 +240,7 @@ RenameAttributeStmtObjectAddress(RenameStmt *stmt, bool missing_ok)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
AlterOwnerStmtObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
AlterOwnerStmtObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
switch (stmt->objectType)
|
switch (stmt->objectType)
|
||||||
|
@ -279,7 +276,7 @@ AlterOwnerStmtObjectAddress(AlterOwnerStmt *stmt, bool missing_ok)
|
||||||
* If missing_ok is set to fails the object specific implementation is supposed to raise
|
* If missing_ok is set to fails the object specific implementation is supposed to raise
|
||||||
* an error explaining the user the object is not existing.
|
* an error explaining the user the object is not existing.
|
||||||
*/
|
*/
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
AlterObjectDependsStmtObjectAddress(AlterObjectDependsStmt *stmt, bool missing_ok)
|
AlterObjectDependsStmtObjectAddress(AlterObjectDependsStmt *stmt, bool missing_ok)
|
||||||
{
|
{
|
||||||
switch (stmt->objectType)
|
switch (stmt->objectType)
|
||||||
|
@ -307,7 +304,7 @@ AlterObjectDependsStmtObjectAddress(AlterObjectDependsStmt *stmt, bool missing_o
|
||||||
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
||||||
* to true.
|
* to true.
|
||||||
*/
|
*/
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
CreateExtensionStmtObjectAddress(CreateExtensionStmt *createExtensionStmt, bool
|
CreateExtensionStmtObjectAddress(CreateExtensionStmt *createExtensionStmt, bool
|
||||||
missing_ok)
|
missing_ok)
|
||||||
{
|
{
|
||||||
|
@ -339,7 +336,7 @@ CreateExtensionStmtObjectAddress(CreateExtensionStmt *createExtensionStmt, bool
|
||||||
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
* Never returns NULL, but the objid in the address could be invalid if missing_ok was set
|
||||||
* to true.
|
* to true.
|
||||||
*/
|
*/
|
||||||
static const ObjectAddress *
|
static ObjectAddress *
|
||||||
AlterExtensionStmtObjectAddress(AlterExtensionStmt *alterExtensionStmt, bool
|
AlterExtensionStmtObjectAddress(AlterExtensionStmt *alterExtensionStmt, bool
|
||||||
missing_ok)
|
missing_ok)
|
||||||
{
|
{
|
||||||
|
|
|
@ -125,10 +125,12 @@ QualifyRenameStmt(RenameStmt *stmt)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OBJECT_AGGREGATE:
|
||||||
case OBJECT_FUNCTION:
|
case OBJECT_FUNCTION:
|
||||||
case OBJECT_PROCEDURE:
|
case OBJECT_PROCEDURE:
|
||||||
{
|
{
|
||||||
QualifyRenameFunctionStmt(stmt);
|
QualifyRenameFunctionStmt(stmt);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -196,10 +198,12 @@ QualifyAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OBJECT_AGGREGATE:
|
||||||
case OBJECT_FUNCTION:
|
case OBJECT_FUNCTION:
|
||||||
case OBJECT_PROCEDURE:
|
case OBJECT_PROCEDURE:
|
||||||
{
|
{
|
||||||
QualifyAlterFunctionSchemaStmt(stmt);
|
QualifyAlterFunctionSchemaStmt(stmt);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -222,10 +226,12 @@ QualifyAlterOwnerStmt(AlterOwnerStmt *stmt)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case OBJECT_AGGREGATE:
|
||||||
case OBJECT_FUNCTION:
|
case OBJECT_FUNCTION:
|
||||||
case OBJECT_PROCEDURE:
|
case OBJECT_PROCEDURE:
|
||||||
{
|
{
|
||||||
QualifyAlterFunctionOwnerStmt(stmt);
|
QualifyAlterFunctionOwnerStmt(stmt);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -245,6 +251,7 @@ QualifyAlterObjectDependsStmt(AlterObjectDependsStmt *stmt)
|
||||||
case OBJECT_PROCEDURE:
|
case OBJECT_PROCEDURE:
|
||||||
{
|
{
|
||||||
QualifyAlterFunctionDependsStmt(stmt);
|
QualifyAlterFunctionDependsStmt(stmt);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -116,7 +116,7 @@ QualifyAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* QualifyFunction transforms a function in place and makes it's name fully qualified.
|
* QualifyFunction transforms a function in place and makes its name fully qualified.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
QualifyFunction(ObjectWithArgs *func, ObjectType type)
|
QualifyFunction(ObjectWithArgs *func, ObjectType type)
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "distributed/metadata/namespace.h"
|
#include "distributed/metadata/namespace.h"
|
||||||
#include "nodes/makefuncs.h"
|
#include "nodes/makefuncs.h"
|
||||||
#include "parser/parse_type.h"
|
#include "parser/parse_type.h"
|
||||||
|
#include "utils/syscache.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
|
|
||||||
static char * GetTypeNamespaceNameByNameList(List *names);
|
static char * GetTypeNamespaceNameByNameList(List *names);
|
||||||
|
@ -53,17 +54,20 @@ static Oid
|
||||||
TypeOidGetNamespaceOid(Oid typeOid)
|
TypeOidGetNamespaceOid(Oid typeOid)
|
||||||
{
|
{
|
||||||
Form_pg_type typeData = NULL;
|
Form_pg_type typeData = NULL;
|
||||||
Relation catalog = heap_open(TypeRelationId, AccessShareLock);
|
HeapTuple typeTuple = SearchSysCache1(TYPEOID, typeOid);
|
||||||
#if PG_VERSION_NUM >= 120000
|
Oid typnamespace = InvalidOid;
|
||||||
HeapTuple typeTuple = get_catalog_object_by_oid(catalog, Anum_pg_type_oid, typeOid);
|
|
||||||
#else
|
|
||||||
HeapTuple typeTuple = get_catalog_object_by_oid(catalog, typeOid);
|
|
||||||
#endif
|
|
||||||
heap_close(catalog, AccessShareLock);
|
|
||||||
|
|
||||||
|
if (!HeapTupleIsValid(typeTuple))
|
||||||
|
{
|
||||||
|
elog(ERROR, "citus cache lookup failed");
|
||||||
|
return InvalidOid;
|
||||||
|
}
|
||||||
typeData = (Form_pg_type) GETSTRUCT(typeTuple);
|
typeData = (Form_pg_type) GETSTRUCT(typeTuple);
|
||||||
|
typnamespace = typeData->typnamespace;
|
||||||
|
|
||||||
return typeData->typnamespace;
|
ReleaseSysCache(typeTuple);
|
||||||
|
|
||||||
|
return typnamespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1372,31 +1372,31 @@ simple_quote_literal(StringInfo buf, const char *val)
|
||||||
* CURRENT_USER - resolved to the user name of the current role being used
|
* CURRENT_USER - resolved to the user name of the current role being used
|
||||||
* SESSION_USER - resolved to the user name of the user that opened the session
|
* SESSION_USER - resolved to the user name of the user that opened the session
|
||||||
*
|
*
|
||||||
* withQuoteIdendifier is used, because if the results will be used in a query the quotes are needed but if not there
|
* withQuoteIdentifier is used, because if the results will be used in a query the quotes are needed but if not there
|
||||||
* should not be extra quotes.
|
* should not be extra quotes.
|
||||||
*/
|
*/
|
||||||
const char *
|
const char *
|
||||||
RoleSpecString(RoleSpec *spec, bool withQuoteIdendifier)
|
RoleSpecString(RoleSpec *spec, bool withQuoteIdentifier)
|
||||||
{
|
{
|
||||||
switch (spec->roletype)
|
switch (spec->roletype)
|
||||||
{
|
{
|
||||||
case ROLESPEC_CSTRING:
|
case ROLESPEC_CSTRING:
|
||||||
{
|
{
|
||||||
return withQuoteIdendifier ?
|
return withQuoteIdentifier ?
|
||||||
quote_identifier(spec->rolename) :
|
quote_identifier(spec->rolename) :
|
||||||
spec->rolename;
|
spec->rolename;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ROLESPEC_CURRENT_USER:
|
case ROLESPEC_CURRENT_USER:
|
||||||
{
|
{
|
||||||
return withQuoteIdendifier ?
|
return withQuoteIdentifier ?
|
||||||
quote_identifier(GetUserNameFromId(GetUserId(), false)) :
|
quote_identifier(GetUserNameFromId(GetUserId(), false)) :
|
||||||
GetUserNameFromId(GetUserId(), false);
|
GetUserNameFromId(GetUserId(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
case ROLESPEC_SESSION_USER:
|
case ROLESPEC_SESSION_USER:
|
||||||
{
|
{
|
||||||
return withQuoteIdendifier ?
|
return withQuoteIdentifier ?
|
||||||
quote_identifier(GetUserNameFromId(GetSessionUserId(), false)) :
|
quote_identifier(GetUserNameFromId(GetSessionUserId(), false)) :
|
||||||
GetUserNameFromId(GetSessionUserId(), false);
|
GetUserNameFromId(GetSessionUserId(), false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ extern char * pg_get_indexclusterdef_string(Oid indexRelationId);
|
||||||
extern List * pg_get_table_grants(Oid relationId);
|
extern List * pg_get_table_grants(Oid relationId);
|
||||||
extern bool contain_nextval_expression_walker(Node *node, void *context);
|
extern bool contain_nextval_expression_walker(Node *node, void *context);
|
||||||
extern char * pg_get_replica_identity_command(Oid tableRelationId);
|
extern char * pg_get_replica_identity_command(Oid tableRelationId);
|
||||||
extern const char * RoleSpecString(RoleSpec *spec, bool withQuoteIdendifier);
|
extern const char * RoleSpecString(RoleSpec *spec, bool withQuoteIdentifier);
|
||||||
|
|
||||||
/* Function declarations for version dependent PostgreSQL ruleutils functions */
|
/* Function declarations for version dependent PostgreSQL ruleutils functions */
|
||||||
extern void pg_get_query_def(Query *query, StringInfo buffer);
|
extern void pg_get_query_def(Query *query, StringInfo buffer);
|
||||||
|
|
|
@ -42,9 +42,9 @@ extern void ProcessAlterExtensionSchemaStmt(AlterObjectSchemaStmt *alterExtensio
|
||||||
extern List * PlanAlterExtensionUpdateStmt(AlterExtensionStmt *alterExtensionStmt, const
|
extern List * PlanAlterExtensionUpdateStmt(AlterExtensionStmt *alterExtensionStmt, const
|
||||||
char *queryString);
|
char *queryString);
|
||||||
extern List * CreateExtensionDDLCommand(const ObjectAddress *extensionAddress);
|
extern List * CreateExtensionDDLCommand(const ObjectAddress *extensionAddress);
|
||||||
extern const ObjectAddress * AlterExtensionSchemaStmtObjectAddress(
|
extern ObjectAddress * AlterExtensionSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt,
|
||||||
AlterObjectSchemaStmt *stmt, bool missing_ok);
|
bool missing_ok);
|
||||||
extern const ObjectAddress * AlterExtensionUpdateStmtObjectAddress(
|
extern ObjectAddress * AlterExtensionUpdateStmtObjectAddress(
|
||||||
AlterExtensionStmt *alterExtensionStmt,
|
AlterExtensionStmt *alterExtensionStmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
|
|
||||||
|
@ -69,30 +69,30 @@ extern bool ConstraintIsAForeignKey(char *constraintName, Oid relationId);
|
||||||
extern List * PlanCreateFunctionStmt(CreateFunctionStmt *stmt, const char *queryString);
|
extern List * PlanCreateFunctionStmt(CreateFunctionStmt *stmt, const char *queryString);
|
||||||
extern List * ProcessCreateFunctionStmt(CreateFunctionStmt *stmt, const
|
extern List * ProcessCreateFunctionStmt(CreateFunctionStmt *stmt, const
|
||||||
char *queryString);
|
char *queryString);
|
||||||
extern const ObjectAddress * CreateFunctionStmtObjectAddress(CreateFunctionStmt *stmt,
|
extern ObjectAddress * CreateFunctionStmtObjectAddress(CreateFunctionStmt *stmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
extern const ObjectAddress * DefineAggregateStmtObjectAddress(DefineStmt *stmt, bool
|
extern ObjectAddress * DefineAggregateStmtObjectAddress(DefineStmt *stmt, bool
|
||||||
missing_ok);
|
missing_ok);
|
||||||
extern List * PlanAlterFunctionStmt(AlterFunctionStmt *stmt, const char *queryString);
|
extern List * PlanAlterFunctionStmt(AlterFunctionStmt *stmt, const char *queryString);
|
||||||
extern const ObjectAddress * AlterFunctionStmtObjectAddress(AlterFunctionStmt *stmt,
|
extern ObjectAddress * AlterFunctionStmtObjectAddress(AlterFunctionStmt *stmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
extern List * PlanRenameFunctionStmt(RenameStmt *stmt, const char *queryString);
|
extern List * PlanRenameFunctionStmt(RenameStmt *stmt, const char *queryString);
|
||||||
extern const ObjectAddress * RenameFunctionStmtObjectAddress(RenameStmt *stmt,
|
extern ObjectAddress * RenameFunctionStmtObjectAddress(RenameStmt *stmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
extern List * PlanAlterFunctionOwnerStmt(AlterOwnerStmt *stmt, const char *queryString);
|
extern List * PlanAlterFunctionOwnerStmt(AlterOwnerStmt *stmt, const char *queryString);
|
||||||
extern const ObjectAddress * AlterFunctionOwnerObjectAddress(AlterOwnerStmt *stmt,
|
extern ObjectAddress * AlterFunctionOwnerObjectAddress(AlterOwnerStmt *stmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
extern List * PlanAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt,
|
extern List * PlanAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt,
|
||||||
const char *queryString);
|
const char *queryString);
|
||||||
extern const ObjectAddress * AlterFunctionSchemaStmtObjectAddress(
|
extern ObjectAddress * AlterFunctionSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt,
|
||||||
AlterObjectSchemaStmt *stmt, bool missing_ok);
|
bool missing_ok);
|
||||||
extern void ProcessAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt,
|
extern void ProcessAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt,
|
||||||
const char *queryString);
|
const char *queryString);
|
||||||
extern List * PlanDropFunctionStmt(DropStmt *stmt, const char *queryString);
|
extern List * PlanDropFunctionStmt(DropStmt *stmt, const char *queryString);
|
||||||
extern List * PlanAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt,
|
extern List * PlanAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt,
|
||||||
const char *queryString);
|
const char *queryString);
|
||||||
extern const ObjectAddress * AlterFunctionDependsStmtObjectAddress(
|
extern ObjectAddress * AlterFunctionDependsStmtObjectAddress(AlterObjectDependsStmt *stmt,
|
||||||
AlterObjectDependsStmt *stmt, bool missing_ok);
|
bool missing_ok);
|
||||||
|
|
||||||
|
|
||||||
/* grant.c - forward declarations */
|
/* grant.c - forward declarations */
|
||||||
|
@ -196,22 +196,17 @@ extern List * PlanAlterTypeOwnerStmt(AlterOwnerStmt *stmt, const char *queryStri
|
||||||
extern void ProcessAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt,
|
extern void ProcessAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt,
|
||||||
const char *queryString);
|
const char *queryString);
|
||||||
extern Node * CreateTypeStmtByObjectAddress(const ObjectAddress *address);
|
extern Node * CreateTypeStmtByObjectAddress(const ObjectAddress *address);
|
||||||
extern const ObjectAddress * CompositeTypeStmtObjectAddress(CompositeTypeStmt *stmt,
|
extern ObjectAddress * CompositeTypeStmtObjectAddress(CompositeTypeStmt *stmt, bool
|
||||||
bool missing_ok);
|
missing_ok);
|
||||||
extern const ObjectAddress * CreateEnumStmtObjectAddress(CreateEnumStmt *stmt,
|
extern ObjectAddress * CreateEnumStmtObjectAddress(CreateEnumStmt *stmt, bool missing_ok);
|
||||||
bool missing_ok);
|
extern ObjectAddress * AlterTypeStmtObjectAddress(AlterTableStmt *stmt, bool missing_ok);
|
||||||
extern const ObjectAddress * AlterTypeStmtObjectAddress(AlterTableStmt *stmt,
|
extern ObjectAddress * AlterEnumStmtObjectAddress(AlterEnumStmt *stmt, bool missing_ok);
|
||||||
|
extern ObjectAddress * RenameTypeStmtObjectAddress(RenameStmt *stmt, bool missing_ok);
|
||||||
|
extern ObjectAddress * AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt,
|
||||||
bool missing_ok);
|
bool missing_ok);
|
||||||
extern const ObjectAddress * AlterEnumStmtObjectAddress(AlterEnumStmt *stmt,
|
extern ObjectAddress * RenameTypeAttributeStmtObjectAddress(RenameStmt *stmt, bool
|
||||||
bool missing_ok);
|
missing_ok);
|
||||||
extern const ObjectAddress * RenameTypeStmtObjectAddress(RenameStmt *stmt,
|
extern ObjectAddress * AlterTypeOwnerObjectAddress(AlterOwnerStmt *stmt, bool missing_ok);
|
||||||
bool missing_ok);
|
|
||||||
extern const ObjectAddress * AlterTypeSchemaStmtObjectAddress(AlterObjectSchemaStmt *stmt,
|
|
||||||
bool missing_ok);
|
|
||||||
extern const ObjectAddress * RenameTypeAttributeStmtObjectAddress(RenameStmt *stmt,
|
|
||||||
bool missing_ok);
|
|
||||||
extern const ObjectAddress * AlterTypeOwnerObjectAddress(AlterOwnerStmt *stmt,
|
|
||||||
bool missing_ok);
|
|
||||||
extern List * CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress);
|
extern List * CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress);
|
||||||
extern char * GenerateBackupNameForTypeCollision(const ObjectAddress *address);
|
extern char * GenerateBackupNameForTypeCollision(const ObjectAddress *address);
|
||||||
|
|
||||||
|
|
|
@ -30,18 +30,18 @@ extern char * FormatCollateExtended(Oid collid, bits16 flags);
|
||||||
extern void AssertObjectTypeIsFunctional(ObjectType type);
|
extern void AssertObjectTypeIsFunctional(ObjectType type);
|
||||||
|
|
||||||
extern void QualifyTreeNode(Node *stmt);
|
extern void QualifyTreeNode(Node *stmt);
|
||||||
extern const char * DeparseTreeNode(Node *stmt);
|
extern char * DeparseTreeNode(Node *stmt);
|
||||||
|
|
||||||
/* forward declarations for deparse_type_stmts.c */
|
/* forward declarations for deparse_type_stmts.c */
|
||||||
extern const char * DeparseCompositeTypeStmt(CompositeTypeStmt *stmt);
|
extern char * DeparseCompositeTypeStmt(CompositeTypeStmt *stmt);
|
||||||
extern const char * DeparseCreateEnumStmt(CreateEnumStmt *stmt);
|
extern char * DeparseCreateEnumStmt(CreateEnumStmt *stmt);
|
||||||
extern const char * DeparseDropTypeStmt(DropStmt *stmt);
|
extern char * DeparseDropTypeStmt(DropStmt *stmt);
|
||||||
extern const char * DeparseAlterEnumStmt(AlterEnumStmt *stmt);
|
extern char * DeparseAlterEnumStmt(AlterEnumStmt *stmt);
|
||||||
extern const char * DeparseAlterTypeStmt(AlterTableStmt *stmt);
|
extern char * DeparseAlterTypeStmt(AlterTableStmt *stmt);
|
||||||
extern const char * DeparseRenameTypeStmt(RenameStmt *stmt);
|
extern char * DeparseRenameTypeStmt(RenameStmt *stmt);
|
||||||
extern const char * DeparseRenameTypeAttributeStmt(RenameStmt *stmt);
|
extern char * DeparseRenameTypeAttributeStmt(RenameStmt *stmt);
|
||||||
extern const char * DeparseAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt);
|
extern char * DeparseAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt);
|
||||||
extern const char * DeparseAlterTypeOwnerStmt(AlterOwnerStmt *stmt);
|
extern char * DeparseAlterTypeOwnerStmt(AlterOwnerStmt *stmt);
|
||||||
|
|
||||||
extern void QualifyRenameTypeStmt(RenameStmt *stmt);
|
extern void QualifyRenameTypeStmt(RenameStmt *stmt);
|
||||||
extern void QualifyRenameTypeAttributeStmt(RenameStmt *stmt);
|
extern void QualifyRenameTypeAttributeStmt(RenameStmt *stmt);
|
||||||
|
@ -52,17 +52,17 @@ extern void QualifyCreateEnumStmt(CreateEnumStmt *stmt);
|
||||||
extern void QualifyAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt);
|
extern void QualifyAlterTypeSchemaStmt(AlterObjectSchemaStmt *stmt);
|
||||||
extern void QualifyAlterTypeOwnerStmt(AlterOwnerStmt *stmt);
|
extern void QualifyAlterTypeOwnerStmt(AlterOwnerStmt *stmt);
|
||||||
|
|
||||||
extern const ObjectAddress * GetObjectAddressFromParseTree(Node *parseTree, bool
|
extern ObjectAddress * GetObjectAddressFromParseTree(Node *parseTree, bool
|
||||||
missing_ok);
|
missing_ok);
|
||||||
|
|
||||||
/* forward declarations for deparse_function_stmts.c */
|
/* forward declarations for deparse_function_stmts.c */
|
||||||
extern const char * DeparseDropFunctionStmt(DropStmt *stmt);
|
extern char * DeparseDropFunctionStmt(DropStmt *stmt);
|
||||||
extern const char * DeparseAlterFunctionStmt(AlterFunctionStmt *stmt);
|
extern char * DeparseAlterFunctionStmt(AlterFunctionStmt *stmt);
|
||||||
|
|
||||||
extern const char * DeparseRenameFunctionStmt(RenameStmt *stmt);
|
extern char * DeparseRenameFunctionStmt(RenameStmt *stmt);
|
||||||
extern const char * DeparseAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt);
|
extern char * DeparseAlterFunctionSchemaStmt(AlterObjectSchemaStmt *stmt);
|
||||||
extern const char * DeparseAlterFunctionOwnerStmt(AlterOwnerStmt *stmt);
|
extern char * DeparseAlterFunctionOwnerStmt(AlterOwnerStmt *stmt);
|
||||||
extern const char * DeparseAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt);
|
extern char * DeparseAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt);
|
||||||
|
|
||||||
extern void QualifyAlterFunctionStmt(AlterFunctionStmt *stmt);
|
extern void QualifyAlterFunctionStmt(AlterFunctionStmt *stmt);
|
||||||
extern void QualifyRenameFunctionStmt(RenameStmt *stmt);
|
extern void QualifyRenameFunctionStmt(RenameStmt *stmt);
|
||||||
|
@ -71,15 +71,15 @@ extern void QualifyAlterFunctionOwnerStmt(AlterOwnerStmt *stmt);
|
||||||
extern void QualifyAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt);
|
extern void QualifyAlterFunctionDependsStmt(AlterObjectDependsStmt *stmt);
|
||||||
|
|
||||||
/* forward declarations for deparse_role_stmts.c */
|
/* forward declarations for deparse_role_stmts.c */
|
||||||
extern const char * DeparseAlterRoleStmt(AlterRoleStmt *stmt);
|
extern char * DeparseAlterRoleStmt(AlterRoleStmt *stmt);
|
||||||
|
|
||||||
/* forward declarations for deparse_extension_stmts.c */
|
/* forward declarations for deparse_extension_stmts.c */
|
||||||
extern Value * GetExtensionOption(List *extensionOptions, const
|
extern Value * GetExtensionOption(List *extensionOptions, const
|
||||||
char *defname);
|
char *defname);
|
||||||
extern const char * DeparseCreateExtensionStmt(CreateExtensionStmt *stmt);
|
extern char * DeparseCreateExtensionStmt(CreateExtensionStmt *stmt);
|
||||||
extern const char * DeparseDropExtensionStmt(DropStmt *stmt);
|
extern char * DeparseDropExtensionStmt(DropStmt *stmt);
|
||||||
extern const char * DeparseAlterExtensionSchemaStmt(
|
extern char * DeparseAlterExtensionSchemaStmt(
|
||||||
AlterObjectSchemaStmt *alterExtensionSchemaStmt);
|
AlterObjectSchemaStmt *alterExtensionSchemaStmt);
|
||||||
extern const char * DeparseAlterExtensionStmt(AlterExtensionStmt *alterExtensionStmt);
|
extern char * DeparseAlterExtensionStmt(AlterExtensionStmt *alterExtensionStmt);
|
||||||
|
|
||||||
#endif /* CITUS_DEPARSER_H */
|
#endif /* CITUS_DEPARSER_H */
|
||||||
|
|
|
@ -133,6 +133,8 @@ extern void CreateDistributedTable(Oid relationId, Var *distributionColumn,
|
||||||
extern void CreateTruncateTrigger(Oid relationId);
|
extern void CreateTruncateTrigger(Oid relationId);
|
||||||
|
|
||||||
extern void EnsureDependenciesExistsOnAllNodes(const ObjectAddress *target);
|
extern void EnsureDependenciesExistsOnAllNodes(const ObjectAddress *target);
|
||||||
|
extern bool ShouldPropagate(void);
|
||||||
|
extern bool ShouldPropagateObject(const ObjectAddress *address);
|
||||||
extern void ReplicateAllDependenciesToNode(const char *nodeName, int nodePort);
|
extern void ReplicateAllDependenciesToNode(const char *nodeName, int nodePort);
|
||||||
|
|
||||||
/* Remaining metadata utility functions */
|
/* Remaining metadata utility functions */
|
||||||
|
|
Loading…
Reference in New Issue