From 353b080474e9a8f83d6139882fd6866aff19d011 Mon Sep 17 00:00:00 2001 From: Hanefi Onaldi Date: Mon, 8 Feb 2021 18:37:44 +0300 Subject: [PATCH] Fix Semmle errors (#4636) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Halil Ozan Akgül --- src/backend/distributed/commands/alter_table.c | 12 ++++++++++-- ...cascade_table_operation_for_connected_relations.c | 7 +++++++ src/backend/distributed/commands/index_pg_source.c | 6 +++--- src/backend/distributed/commands/utility_hook.c | 2 +- src/backend/distributed/metadata/metadata_cache.c | 2 +- src/backend/distributed/operations/citus_tools.c | 8 +++++++- .../planner/local_distributed_join_planner.c | 2 +- .../distributed/test/run_from_same_connection.c | 8 ++++++-- .../distributed/utils/multi_partitioning_utils.c | 9 +++++++-- 9 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/backend/distributed/commands/alter_table.c b/src/backend/distributed/commands/alter_table.c index 1849fb5cd..c69332b8e 100644 --- a/src/backend/distributed/commands/alter_table.c +++ b/src/backend/distributed/commands/alter_table.c @@ -1418,8 +1418,16 @@ CheckAlterDistributedTableConversionParameters(TableConversionState *con) Var *colocateWithPartKey = DistPartitionKey(colocateWithTableOid); - if (con->distributionColumn && - colocateWithPartKey->vartype != con->distributionKey->vartype) + if (colocateWithPartKey == NULL) + { + /* this should never happen */ + ereport(ERROR, (errmsg("cannot colocate %s with %s because %s doesn't have a " + "distribution column", + con->relationName, con->colocateWith, + con->colocateWith))); + } + else if (con->distributionColumn && + colocateWithPartKey->vartype != con->distributionKey->vartype) { ereport(ERROR, (errmsg("cannot colocate with %s and change distribution " "column to %s because data type of column %s is " diff --git a/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c b/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c index 73a365571..ce6a1348f 100644 --- a/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c +++ b/src/backend/distributed/commands/cascade_table_operation_for_connected_relations.c @@ -68,6 +68,13 @@ CascadeOperationForConnectedRelations(Oid relationId, LOCKMODE lockMode, InvalidateForeignKeyGraph(); List *fKeyConnectedRelationIdList = GetForeignKeyConnectedRelationIdList(relationId); + + /* early exit if there are no connected relations */ + if (fKeyConnectedRelationIdList == NIL) + { + return; + } + LockRelationsWithLockMode(fKeyConnectedRelationIdList, lockMode); /* diff --git a/src/backend/distributed/commands/index_pg_source.c b/src/backend/distributed/commands/index_pg_source.c index 279c3e09d..506bbbdb8 100644 --- a/src/backend/distributed/commands/index_pg_source.c +++ b/src/backend/distributed/commands/index_pg_source.c @@ -181,13 +181,13 @@ ChooseIndexColumnNames(List *indexElems) { break; /* found nonconflicting name */ } - sprintf(nbuf, "%d", i); + sprintf(nbuf, "%d", i); /* lgtm[cpp/banned-api-usage-required-any] */ /* Ensure generated names are shorter than NAMEDATALEN */ nlen = pg_mbcliplen(origname, strlen(origname), NAMEDATALEN - 1 - strlen(nbuf)); - memcpy(buf, origname, nlen); - strcpy(buf + nlen, nbuf); + memcpy(buf, origname, nlen); /* lgtm[cpp/banned-api-usage-required-any] */ + strcpy(buf + nlen, nbuf); /* lgtm[cpp/banned-api-usage-required-any] */ curname = buf; } diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index d24551005..525faa6b7 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -682,7 +682,7 @@ ProcessUtilityInternal(PlannedStmt *pstmt, * Ensure value is valid, we can't do some checks during CREATE * EXTENSION. This is important to register some invalidation callbacks. */ - CitusHasBeenLoaded(); + CitusHasBeenLoaded(); /* lgtm[cpp/return-value-ignored] */ } } diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index afdf5c21a..df228f252 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -849,7 +849,7 @@ InitializeTableCacheEntry(int64 shardId) Oid relationId = LookupShardRelationFromCatalog(shardId, missingOk); /* trigger building the cache for the shard id */ - GetCitusTableCacheEntry(relationId); + GetCitusTableCacheEntry(relationId); /* lgtm[cpp/return-value-ignored] */ } diff --git a/src/backend/distributed/operations/citus_tools.c b/src/backend/distributed/operations/citus_tools.c index e522afa5b..c7fdb8a5a 100644 --- a/src/backend/distributed/operations/citus_tools.c +++ b/src/backend/distributed/operations/citus_tools.c @@ -509,7 +509,13 @@ ExecuteRemoteQueryOrCommand(char *nodeName, uint32 nodePort, char *queryString, return false; } - SendRemoteCommand(connection, queryString); + if (!SendRemoteCommand(connection, queryString)) + { + appendStringInfo(queryResultString, "failed to send query to %s:%d", nodeName, + (int) nodePort); + return false; + } + PGresult *queryResult = GetRemoteCommandResult(connection, raiseInterrupts); bool success = EvaluateQueryResult(connection, queryResult, queryResultString); diff --git a/src/backend/distributed/planner/local_distributed_join_planner.c b/src/backend/distributed/planner/local_distributed_join_planner.c index 17eee2724..0920a70a6 100644 --- a/src/backend/distributed/planner/local_distributed_join_planner.c +++ b/src/backend/distributed/planner/local_distributed_join_planner.c @@ -237,7 +237,7 @@ ResultRTEIdentity(Query *query) int resultRTEIdentity = INVALID_RTE_IDENTITY; if (IsModifyCommand(query)) { - RangeTblEntry *resultRTE = ExtractResultRelationRTE(query); + RangeTblEntry *resultRTE = ExtractResultRelationRTEOrError(query); resultRTEIdentity = GetRTEIdentity(resultRTE); } return resultRTEIdentity; diff --git a/src/backend/distributed/test/run_from_same_connection.c b/src/backend/distributed/test/run_from_same_connection.c index 1e61ffc77..336815f75 100644 --- a/src/backend/distributed/test/run_from_same_connection.c +++ b/src/backend/distributed/test/run_from_same_connection.c @@ -200,10 +200,14 @@ GetRemoteProcessId() appendStringInfo(queryStringInfo, GET_PROCESS_ID); - ExecuteOptionalRemoteCommand(singleConnection, queryStringInfo->data, &result); + int queryResult = ExecuteOptionalRemoteCommand(singleConnection, + queryStringInfo->data, &result); + if (queryResult != RESPONSE_OKAY) + { + PG_RETURN_VOID(); + } int64 rowCount = PQntuples(result); - if (rowCount != 1) { PG_RETURN_VOID(); diff --git a/src/backend/distributed/utils/multi_partitioning_utils.c b/src/backend/distributed/utils/multi_partitioning_utils.c index ef9932c1a..ae26f1e7a 100644 --- a/src/backend/distributed/utils/multi_partitioning_utils.c +++ b/src/backend/distributed/utils/multi_partitioning_utils.c @@ -87,8 +87,13 @@ fix_pre_citus10_partitioned_table_constraint_names(PG_FUNCTION_ARGS) } List *taskList = CreateFixPartitionConstraintsTaskList(relationId); - bool localExecutionSupported = true; - ExecuteUtilityTaskList(taskList, localExecutionSupported); + + /* do not do anything if there are no constraints that should be fixed */ + if (taskList != NIL) + { + bool localExecutionSupported = true; + ExecuteUtilityTaskList(taskList, localExecutionSupported); + } PG_RETURN_VOID(); }