diff options
| author | Tom Lane | 2019-07-16 17:12:24 +0000 |
|---|---|---|
| committer | Tom Lane | 2019-07-16 17:12:24 +0000 |
| commit | c245776906b065fcd59831a25c3b24ad3ddcd849 (patch) | |
| tree | 7bcc6c8dc1d4960e65592726a662d5952b318e3c /src/backend/nodes | |
| parent | 2f5b8eb5a28b4e6de9d20cc7d2c6028c6c7a8aa8 (diff) | |
Remove lappend_cell...() family of List functions.
It seems worth getting rid of these functions because they require the
caller to retain a ListCell pointer into a List that it's modifying,
which is a dangerous practice with the new List implementation.
(The only other List-modifying function that takes a ListCell pointer
as input is list_delete_cell, which nowadays is preferentially used
via the constrained API foreach_delete_current.)
There was only one remaining caller of these functions after commit
2f5b8eb5a, and that was some fairly ugly GEQO code that can be much
more clearly expressed using a list-index variable and list_insert_nth.
Hence, rewrite that code, and remove the functions.
Discussion: https://postgr.es/m/26193.1563228600@sss.pgh.pa.us
Diffstat (limited to 'src/backend/nodes')
| -rw-r--r-- | src/backend/nodes/list.c | 47 |
1 files changed, 0 insertions, 47 deletions
diff --git a/src/backend/nodes/list.c b/src/backend/nodes/list.c index 0b8686d262d..5584fa87c2d 100644 --- a/src/backend/nodes/list.c +++ b/src/backend/nodes/list.c @@ -439,53 +439,6 @@ list_insert_nth_oid(List *list, int pos, Oid datum) } /* - * Add a new cell to the list, in the position after 'prev_cell'. The - * data in the cell is left undefined, and must be filled in by the - * caller. 'list' is assumed to be non-NIL, and 'prev_cell' is assumed - * to be non-NULL and a member of 'list'. Returns address of new cell. - * - * Caution: prev_cell might no longer point into the list after this! - */ -static ListCell * -add_new_cell_after(List *list, ListCell *prev_cell) -{ - /* insert_new_cell will assert that this is in-range: */ - int pos = prev_cell - list->elements; - - return insert_new_cell(list, pos + 1); -} - -/* - * Add a new cell to the specified list (which must be non-NIL); - * it will be placed after the list cell 'prev' (which must be - * non-NULL and a member of 'list'). The data placed in the new cell - * is 'datum'. - */ -void -lappend_cell(List *list, ListCell *prev, void *datum) -{ - Assert(IsPointerList(list)); - lfirst(add_new_cell_after(list, prev)) = datum; - check_list_invariants(list); -} - -void -lappend_cell_int(List *list, ListCell *prev, int datum) -{ - Assert(IsIntegerList(list)); - lfirst_int(add_new_cell_after(list, prev)) = datum; - check_list_invariants(list); -} - -void -lappend_cell_oid(List *list, ListCell *prev, Oid datum) -{ - Assert(IsOidList(list)); - lfirst_oid(add_new_cell_after(list, prev)) = datum; - check_list_invariants(list); -} - -/* * Prepend a new element to the list. A pointer to the modified list * is returned. Note that this function may or may not destructively * modify the list; callers should always use this function's return |
