aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2022-07-13 15:03:47 +1200
committerDavid Rowley <drowley@postgresql.org>2022-07-13 15:03:47 +1200
commitc23e3e6beb273ae8c0f8e616edb7ed1acb0271c4 (patch)
treeb0e092c52196ba79555157a75b498b4ea9b8c4d9 /src/backend/commands
parent50e4c280f0661f3ef837d2c3beb5fcc100202324 (diff)
downloadpostgresql-c23e3e6beb273ae8c0f8e616edb7ed1acb0271c4.tar.gz
postgresql-c23e3e6beb273ae8c0f8e616edb7ed1acb0271c4.zip
Use list_copy_head() instead of list_truncate(list_copy(...), ...)
Truncating off the end of a freshly copied List is not a very efficient way of copying the first N elements of a List. In many of the cases that are updated here, the pattern was only being used to remove the final element of a List. That's about the best case for it, but there were many instances where the truncate trimming the List down much further. 4cc832f94 added list_copy_head(), so let's use it in cases where it's useful. Author: David Rowley Discussion: https://postgr.es/m/1986787.1657666922%40sss.pgh.pa.us
Diffstat (limited to 'src/backend/commands')
-rw-r--r--src/backend/commands/dropcmds.c15
-rw-r--r--src/backend/commands/sequence.c2
2 files changed, 8 insertions, 9 deletions
diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c
index c9b5732448e..26157eb4e3f 100644
--- a/src/backend/commands/dropcmds.c
+++ b/src/backend/commands/dropcmds.c
@@ -145,8 +145,7 @@ owningrel_does_not_exist_skipping(List *object, const char **msg, char **name)
List *parent_object;
RangeVar *parent_rel;
- parent_object = list_truncate(list_copy(object),
- list_length(object) - 1);
+ parent_object = list_copy_head(object, list_length(object) - 1);
if (schema_does_not_exist_skipping(parent_object, msg, name))
return true;
@@ -419,8 +418,8 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
{
msg = gettext_noop("trigger \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(castNode(List, object)));
- args = NameListToString(list_truncate(list_copy(castNode(List, object)),
- list_length(castNode(List, object)) - 1));
+ args = NameListToString(list_copy_head(castNode(List, object),
+ list_length(castNode(List, object)) - 1));
}
break;
case OBJECT_POLICY:
@@ -428,8 +427,8 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
{
msg = gettext_noop("policy \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(castNode(List, object)));
- args = NameListToString(list_truncate(list_copy(castNode(List, object)),
- list_length(castNode(List, object)) - 1));
+ args = NameListToString(list_copy_head(castNode(List, object),
+ list_length(castNode(List, object)) - 1));
}
break;
case OBJECT_EVENT_TRIGGER:
@@ -441,8 +440,8 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
{
msg = gettext_noop("rule \"%s\" for relation \"%s\" does not exist, skipping");
name = strVal(llast(castNode(List, object)));
- args = NameListToString(list_truncate(list_copy(castNode(List, object)),
- list_length(castNode(List, object)) - 1));
+ args = NameListToString(list_copy_head(castNode(List, object),
+ list_length(castNode(List, object)) - 1));
}
break;
case OBJECT_FDW:
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index 48d9d43dac6..b0b211891c3 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -1620,7 +1620,7 @@ process_owned_by(Relation seqrel, List *owned_by, bool for_identity)
RangeVar *rel;
/* Separate relname and attr name */
- relname = list_truncate(list_copy(owned_by), nnames - 1);
+ relname = list_copy_head(owned_by, nnames - 1);
attrname = strVal(llast(owned_by));
/* Open and lock rel to ensure it won't go away meanwhile */