summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/path/allpaths.c
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/optimizer/path/allpaths.c
parent50e4c280f0661f3ef837d2c3beb5fcc100202324 (diff)
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/optimizer/path/allpaths.c')
-rw-r--r--src/backend/optimizer/path/allpaths.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index e9342097e52..358bb2aed6f 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -2053,9 +2053,8 @@ accumulate_append_subpath(Path *path, List **subpaths, List **special_subpaths)
*subpaths = list_concat(*subpaths,
list_copy_tail(apath->subpaths,
apath->first_partial_path));
- new_special_subpaths =
- list_truncate(list_copy(apath->subpaths),
- apath->first_partial_path);
+ new_special_subpaths = list_copy_head(apath->subpaths,
+ apath->first_partial_path);
*special_subpaths = list_concat(*special_subpaths,
new_special_subpaths);
return;
@@ -3086,8 +3085,8 @@ get_useful_pathkeys_for_relation(PlannerInfo *root, RelOptInfo *rel,
root->query_pathkeys);
else if (npathkeys > 0)
useful_pathkeys_list = lappend(useful_pathkeys_list,
- list_truncate(list_copy(root->query_pathkeys),
- npathkeys));
+ list_copy_head(root->query_pathkeys,
+ npathkeys));
}
return useful_pathkeys_list;