Refactoring in alter_table: in many plances generate_qualified_relation_name is used instead of generating the relation name from relationId through a sequence of function calls.

pull/7427/head
eaydingol 2024-01-18 06:39:22 +00:00
parent 5ec056a172
commit 5640ea4579
1 changed files with 25 additions and 47 deletions

View File

@ -209,12 +209,9 @@ static void ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommand
static bool HasAnyGeneratedStoredColumns(Oid relationId); static bool HasAnyGeneratedStoredColumns(Oid relationId);
static List * GetNonGeneratedStoredColumnNameList(Oid relationId); static List * GetNonGeneratedStoredColumnNameList(Oid relationId);
static void CheckAlterDistributedTableConversionParameters(TableConversionState *con); static void CheckAlterDistributedTableConversionParameters(TableConversionState *con);
static char * CreateWorkerChangeSequenceDependencyCommand(char *sequenceSchemaName, static char * CreateWorkerChangeSequenceDependencyCommand(char *qualifiedSequeceName,
char *sequenceName, char *qualifiedSourceName,
char *sourceSchemaName, char *qualifiedTargetName);
char *sourceName,
char *targetSchemaName,
char *targetName);
static void ErrorIfMatViewSizeExceedsTheLimit(Oid matViewOid); static void ErrorIfMatViewSizeExceedsTheLimit(Oid matViewOid);
static char * CreateMaterializedViewDDLCommand(Oid matViewOid); static char * CreateMaterializedViewDDLCommand(Oid matViewOid);
static char * GetAccessMethodForMatViewIfExists(Oid viewOid); static char * GetAccessMethodForMatViewIfExists(Oid viewOid);
@ -791,13 +788,15 @@ ConvertTableInternal(TableConversionState *con)
justBeforeDropCommands = lappend(justBeforeDropCommands, detachFromParentCommand); justBeforeDropCommands = lappend(justBeforeDropCommands, detachFromParentCommand);
} }
char *qualifiedRelationName = quote_qualified_identifier(con->schemaName,
con->relationName);
if (PartitionedTable(con->relationId)) if (PartitionedTable(con->relationId))
{ {
if (!con->suppressNoticeMessages) if (!con->suppressNoticeMessages)
{ {
ereport(NOTICE, (errmsg("converting the partitions of %s", ereport(NOTICE, (errmsg("converting the partitions of %s",
quote_qualified_identifier(con->schemaName, qualifiedRelationName)));
con->relationName))));
} }
List *partitionList = PartitionList(con->relationId); List *partitionList = PartitionList(con->relationId);
@ -870,9 +869,7 @@ ConvertTableInternal(TableConversionState *con)
if (!con->suppressNoticeMessages) if (!con->suppressNoticeMessages)
{ {
ereport(NOTICE, (errmsg("creating a new table for %s", ereport(NOTICE, (errmsg("creating a new table for %s", qualifiedRelationName)));
quote_qualified_identifier(con->schemaName,
con->relationName))));
} }
TableDDLCommand *tableCreationCommand = NULL; TableDDLCommand *tableCreationCommand = NULL;
@ -999,8 +996,6 @@ ConvertTableInternal(TableConversionState *con)
{ {
continue; continue;
} }
char *qualifiedRelationName = quote_qualified_identifier(con->schemaName,
con->relationName);
TableConversionParameters cascadeParam = { TableConversionParameters cascadeParam = {
.relationId = colocatedTableId, .relationId = colocatedTableId,
@ -1750,9 +1745,7 @@ CreateMaterializedViewDDLCommand(Oid matViewOid)
{ {
StringInfo query = makeStringInfo(); StringInfo query = makeStringInfo();
char *viewName = get_rel_name(matViewOid); char *qualifiedViewName = generate_qualified_relation_name(matViewOid);
char *schemaName = get_namespace_name(get_rel_namespace(matViewOid));
char *qualifiedViewName = quote_qualified_identifier(schemaName, viewName);
/* here we need to get the access method of the view to recreate it */ /* here we need to get the access method of the view to recreate it */
char *accessMethodName = GetAccessMethodForMatViewIfExists(matViewOid); char *accessMethodName = GetAccessMethodForMatViewIfExists(matViewOid);
@ -1801,9 +1794,8 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
bool suppressNoticeMessages) bool suppressNoticeMessages)
{ {
char *sourceName = get_rel_name(sourceId); char *sourceName = get_rel_name(sourceId);
char *targetName = get_rel_name(targetId); char *qualifiedSourceName = generate_qualified_relation_name(sourceId);
Oid schemaId = get_rel_namespace(sourceId); char *qualifiedTargetName = generate_qualified_relation_name(targetId);
char *schemaName = get_namespace_name(schemaId);
StringInfo query = makeStringInfo(); StringInfo query = makeStringInfo();
@ -1811,8 +1803,7 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
{ {
if (!suppressNoticeMessages) if (!suppressNoticeMessages)
{ {
ereport(NOTICE, (errmsg("moving the data of %s", ereport(NOTICE, (errmsg("moving the data of %s", qualifiedSourceName)));
quote_qualified_identifier(schemaName, sourceName))));
} }
if (!HasAnyGeneratedStoredColumns(sourceId)) if (!HasAnyGeneratedStoredColumns(sourceId))
@ -1822,8 +1813,7 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
* "INSERT INTO .. SELECT *"". * "INSERT INTO .. SELECT *"".
*/ */
appendStringInfo(query, "INSERT INTO %s SELECT * FROM %s", appendStringInfo(query, "INSERT INTO %s SELECT * FROM %s",
quote_qualified_identifier(schemaName, targetName), qualifiedTargetName, qualifiedSourceName);
quote_qualified_identifier(schemaName, sourceName));
} }
else else
{ {
@ -1838,9 +1828,8 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
char *insertColumnString = StringJoin(nonStoredColumnNameList, ','); char *insertColumnString = StringJoin(nonStoredColumnNameList, ',');
appendStringInfo(query, appendStringInfo(query,
"INSERT INTO %s (%s) OVERRIDING SYSTEM VALUE SELECT %s FROM %s", "INSERT INTO %s (%s) OVERRIDING SYSTEM VALUE SELECT %s FROM %s",
quote_qualified_identifier(schemaName, targetName), qualifiedTargetName, insertColumnString,
insertColumnString, insertColumnString, insertColumnString, qualifiedSourceName);
quote_qualified_identifier(schemaName, sourceName));
} }
ExecuteQueryViaSPI(query->data, SPI_OK_INSERT); ExecuteQueryViaSPI(query->data, SPI_OK_INSERT);
@ -1864,14 +1853,9 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
*/ */
if (ShouldSyncTableMetadata(targetId)) if (ShouldSyncTableMetadata(targetId))
{ {
Oid sequenceSchemaOid = get_rel_namespace(sequenceOid); char *qualifiedSequenceName = generate_qualified_relation_name(sequenceOid);
char *sequenceSchemaName = get_namespace_name(sequenceSchemaOid);
char *sequenceName = get_rel_name(sequenceOid);
char *workerChangeSequenceDependencyCommand = char *workerChangeSequenceDependencyCommand =
CreateWorkerChangeSequenceDependencyCommand(sequenceSchemaName, CreateWorkerChangeSequenceDependencyCommand(qualifiedSequenceName, qualifiedSourceName, qualifiedTargetName);
sequenceName,
schemaName, sourceName,
schemaName, targetName);
SendCommandToWorkersWithMetadata(workerChangeSequenceDependencyCommand); SendCommandToWorkersWithMetadata(workerChangeSequenceDependencyCommand);
} }
else if (ShouldSyncTableMetadata(sourceId)) else if (ShouldSyncTableMetadata(sourceId))
@ -1894,25 +1878,23 @@ ReplaceTable(Oid sourceId, Oid targetId, List *justBeforeDropCommands,
if (!suppressNoticeMessages) if (!suppressNoticeMessages)
{ {
ereport(NOTICE, (errmsg("dropping the old %s", ereport(NOTICE, (errmsg("dropping the old %s", qualifiedSourceName)));
quote_qualified_identifier(schemaName, sourceName))));
} }
resetStringInfo(query); resetStringInfo(query);
appendStringInfo(query, "DROP %sTABLE %s CASCADE", appendStringInfo(query, "DROP %sTABLE %s CASCADE",
IsForeignTable(sourceId) ? "FOREIGN " : "", IsForeignTable(sourceId) ? "FOREIGN " : "",
quote_qualified_identifier(schemaName, sourceName)); qualifiedSourceName);
ExecuteQueryViaSPI(query->data, SPI_OK_UTILITY); ExecuteQueryViaSPI(query->data, SPI_OK_UTILITY);
if (!suppressNoticeMessages) if (!suppressNoticeMessages)
{ {
ereport(NOTICE, (errmsg("renaming the new table to %s", ereport(NOTICE, (errmsg("renaming the new table to %s", qualifiedSourceName)));
quote_qualified_identifier(schemaName, sourceName))));
} }
resetStringInfo(query); resetStringInfo(query);
appendStringInfo(query, "ALTER TABLE %s RENAME TO %s", appendStringInfo(query, "ALTER TABLE %s RENAME TO %s",
quote_qualified_identifier(schemaName, targetName), qualifiedTargetName,
quote_identifier(sourceName)); quote_identifier(sourceName));
ExecuteQueryViaSPI(query->data, SPI_OK_UTILITY); ExecuteQueryViaSPI(query->data, SPI_OK_UTILITY);
} }
@ -2172,18 +2154,14 @@ CheckAlterDistributedTableConversionParameters(TableConversionState *con)
* worker_change_sequence_dependency query with the parameters. * worker_change_sequence_dependency query with the parameters.
*/ */
static char * static char *
CreateWorkerChangeSequenceDependencyCommand(char *sequenceSchemaName, char *sequenceName, CreateWorkerChangeSequenceDependencyCommand(char *qualifiedSequeceName,
char *sourceSchemaName, char *sourceName, char *qualifiedSourceName,
char *targetSchemaName, char *targetName) char *qualifiedTargetName)
{ {
char *qualifiedSchemaName = quote_qualified_identifier(sequenceSchemaName,
sequenceName);
char *qualifiedSourceName = quote_qualified_identifier(sourceSchemaName, sourceName);
char *qualifiedTargetName = quote_qualified_identifier(targetSchemaName, targetName);
StringInfo query = makeStringInfo(); StringInfo query = makeStringInfo();
appendStringInfo(query, "SELECT worker_change_sequence_dependency(%s, %s, %s)", appendStringInfo(query, "SELECT worker_change_sequence_dependency(%s, %s, %s)",
quote_literal_cstr(qualifiedSchemaName), quote_literal_cstr(qualifiedSequeceName),
quote_literal_cstr(qualifiedSourceName), quote_literal_cstr(qualifiedSourceName),
quote_literal_cstr(qualifiedTargetName)); quote_literal_cstr(qualifiedTargetName));