PostgreSQL Source Code  git master
pg_list.h File Reference
#include "nodes/nodes.h"
Include dependency graph for pg_list.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

union  ListCell
 
struct  List
 
struct  ForEachState
 
struct  ForBothState
 
struct  ForBothCellState
 
struct  ForThreeState
 
struct  ForFourState
 
struct  ForFiveState
 

Macros

#define NIL   ((List *) NULL)
 
#define lfirst(lc)   ((lc)->ptr_value)
 
#define lfirst_int(lc)   ((lc)->int_value)
 
#define lfirst_oid(lc)   ((lc)->oid_value)
 
#define lfirst_xid(lc)   ((lc)->xid_value)
 
#define lfirst_node(type, lc)   castNode(type, lfirst(lc))
 
#define linitial(l)   lfirst(list_nth_cell(l, 0))
 
#define linitial_int(l)   lfirst_int(list_nth_cell(l, 0))
 
#define linitial_oid(l)   lfirst_oid(list_nth_cell(l, 0))
 
#define linitial_node(type, l)   castNode(type, linitial(l))
 
#define lsecond(l)   lfirst(list_nth_cell(l, 1))
 
#define lsecond_int(l)   lfirst_int(list_nth_cell(l, 1))
 
#define lsecond_oid(l)   lfirst_oid(list_nth_cell(l, 1))
 
#define lsecond_node(type, l)   castNode(type, lsecond(l))
 
#define lthird(l)   lfirst(list_nth_cell(l, 2))
 
#define lthird_int(l)   lfirst_int(list_nth_cell(l, 2))
 
#define lthird_oid(l)   lfirst_oid(list_nth_cell(l, 2))
 
#define lthird_node(type, l)   castNode(type, lthird(l))
 
#define lfourth(l)   lfirst(list_nth_cell(l, 3))
 
#define lfourth_int(l)   lfirst_int(list_nth_cell(l, 3))
 
#define lfourth_oid(l)   lfirst_oid(list_nth_cell(l, 3))
 
#define lfourth_node(type, l)   castNode(type, lfourth(l))
 
#define llast(l)   lfirst(list_last_cell(l))
 
#define llast_int(l)   lfirst_int(list_last_cell(l))
 
#define llast_oid(l)   lfirst_oid(list_last_cell(l))
 
#define llast_xid(l)   lfirst_xid(list_last_cell(l))
 
#define llast_node(type, l)   castNode(type, llast(l))
 
#define list_make_ptr_cell(v)   ((ListCell) {.ptr_value = (v)})
 
#define list_make_int_cell(v)   ((ListCell) {.int_value = (v)})
 
#define list_make_oid_cell(v)   ((ListCell) {.oid_value = (v)})
 
#define list_make_xid_cell(v)   ((ListCell) {.xid_value = (v)})
 
#define list_make1(x1)    list_make1_impl(T_List, list_make_ptr_cell(x1))
 
#define list_make2(x1, x2)    list_make2_impl(T_List, list_make_ptr_cell(x1), list_make_ptr_cell(x2))
 
#define list_make3(x1, x2, x3)
 
#define list_make4(x1, x2, x3, x4)
 
#define list_make5(x1, x2, x3, x4, x5)
 
#define list_make1_int(x1)    list_make1_impl(T_IntList, list_make_int_cell(x1))
 
#define list_make2_int(x1, x2)    list_make2_impl(T_IntList, list_make_int_cell(x1), list_make_int_cell(x2))
 
#define list_make3_int(x1, x2, x3)
 
#define list_make4_int(x1, x2, x3, x4)
 
#define list_make5_int(x1, x2, x3, x4, x5)
 
#define list_make1_oid(x1)    list_make1_impl(T_OidList, list_make_oid_cell(x1))
 
#define list_make2_oid(x1, x2)    list_make2_impl(T_OidList, list_make_oid_cell(x1), list_make_oid_cell(x2))
 
#define list_make3_oid(x1, x2, x3)
 
#define list_make4_oid(x1, x2, x3, x4)
 
#define list_make5_oid(x1, x2, x3, x4, x5)
 
#define list_make1_xid(x1)    list_make1_impl(T_XidList, list_make_xid_cell(x1))
 
#define list_make2_xid(x1, x2)    list_make2_impl(T_XidList, list_make_xid_cell(x1), list_make_xid_cell(x2))
 
#define list_make3_xid(x1, x2, x3)
 
#define list_make4_xid(x1, x2, x3, x4)
 
#define list_make5_xid(x1, x2, x3, x4, x5)
 
#define list_nth_node(type, list, n)   castNode(type, list_nth(list, n))
 
#define foreach(cell, lst)
 
#define foreach_delete_current(lst, cell)
 
#define foreach_current_index(cell)   (cell##__state.i)
 
#define for_each_from(cell, lst, N)
 
#define for_each_cell(cell, lst, initcell)
 
#define forboth(cell1, list1, cell2, list2)
 
#define multi_for_advance_cell(cell, state, l, i)
 
#define for_both_cell(cell1, list1, initcell1, cell2, list2, initcell2)
 
#define forthree(cell1, list1, cell2, list2, cell3, list3)
 
#define forfour(cell1, list1, cell2, list2, cell3, list3, cell4, list4)
 
#define forfive(cell1, list1, cell2, list2, cell3, list3, cell4, list4, cell5, list5)
 

Typedefs

typedef union ListCell ListCell
 
typedef struct List List
 
typedef struct ForEachState ForEachState
 
typedef struct ForBothState ForBothState
 
typedef struct ForBothCellState ForBothCellState
 
typedef struct ForThreeState ForThreeState
 
typedef struct ForFourState ForFourState
 
typedef struct ForFiveState ForFiveState
 
typedef int(* list_sort_comparator) (const ListCell *a, const ListCell *b)
 

Functions

static ListCelllist_head (const List *l)
 
static ListCelllist_tail (const List *l)
 
static ListCelllist_second_cell (const List *l)
 
static int list_length (const List *l)
 
static ListCelllist_nth_cell (const List *list, int n)
 
static ListCelllist_last_cell (const List *list)
 
static void * list_nth (const List *list, int n)
 
static int list_nth_int (const List *list, int n)
 
static Oid list_nth_oid (const List *list, int n)
 
static int list_cell_number (const List *l, const ListCell *c)
 
static ListCelllnext (const List *l, const ListCell *c)
 
static ForEachState for_each_from_setup (const List *lst, int N)
 
static ForEachState for_each_cell_setup (const List *lst, const ListCell *initcell)
 
static ForBothCellState for_both_cell_setup (const List *list1, const ListCell *initcell1, const List *list2, const ListCell *initcell2)
 
Listlist_make1_impl (NodeTag t, ListCell datum1)
 
Listlist_make2_impl (NodeTag t, ListCell datum1, ListCell datum2)
 
Listlist_make3_impl (NodeTag t, ListCell datum1, ListCell datum2, ListCell datum3)
 
Listlist_make4_impl (NodeTag t, ListCell datum1, ListCell datum2, ListCell datum3, ListCell datum4)
 
Listlist_make5_impl (NodeTag t, ListCell datum1, ListCell datum2, ListCell datum3, ListCell datum4, ListCell datum5)
 
pg_nodiscard Listlappend (List *list, void *datum)
 
pg_nodiscard Listlappend_int (List *list, int datum)
 
pg_nodiscard Listlappend_oid (List *list, Oid datum)
 
pg_nodiscard Listlappend_xid (List *list, TransactionId datum)
 
pg_nodiscard Listlist_insert_nth (List *list, int pos, void *datum)
 
pg_nodiscard Listlist_insert_nth_int (List *list, int pos, int datum)
 
pg_nodiscard Listlist_insert_nth_oid (List *list, int pos, Oid datum)
 
pg_nodiscard Listlcons (void *datum, List *list)
 
pg_nodiscard Listlcons_int (int datum, List *list)
 
pg_nodiscard Listlcons_oid (Oid datum, List *list)
 
pg_nodiscard Listlist_concat (List *list1, const List *list2)
 
pg_nodiscard Listlist_concat_copy (const List *list1, const List *list2)
 
pg_nodiscard Listlist_truncate (List *list, int new_size)
 
bool list_member (const List *list, const void *datum)
 
bool list_member_ptr (const List *list, const void *datum)
 
bool list_member_int (const List *list, int datum)
 
bool list_member_oid (const List *list, Oid datum)
 
bool list_member_xid (const List *list, TransactionId datum)
 
pg_nodiscard Listlist_delete (List *list, void *datum)
 
pg_nodiscard Listlist_delete_ptr (List *list, void *datum)
 
pg_nodiscard Listlist_delete_int (List *list, int datum)
 
pg_nodiscard Listlist_delete_oid (List *list, Oid datum)
 
pg_nodiscard Listlist_delete_first (List *list)
 
pg_nodiscard Listlist_delete_last (List *list)
 
pg_nodiscard Listlist_delete_first_n (List *list, int n)
 
pg_nodiscard Listlist_delete_nth_cell (List *list, int n)
 
pg_nodiscard Listlist_delete_cell (List *list, ListCell *cell)
 
Listlist_union (const List *list1, const List *list2)
 
Listlist_union_ptr (const List *list1, const List *list2)
 
Listlist_union_int (const List *list1, const List *list2)
 
Listlist_union_oid (const List *list1, const List *list2)
 
Listlist_intersection (const List *list1, const List *list2)
 
Listlist_intersection_int (const List *list1, const List *list2)
 
Listlist_difference (const List *list1, const List *list2)
 
Listlist_difference_ptr (const List *list1, const List *list2)
 
Listlist_difference_int (const List *list1, const List *list2)
 
Listlist_difference_oid (const List *list1, const List *list2)
 
pg_nodiscard Listlist_append_unique (List *list, void *datum)
 
pg_nodiscard Listlist_append_unique_ptr (List *list, void *datum)
 
pg_nodiscard Listlist_append_unique_int (List *list, int datum)
 
pg_nodiscard Listlist_append_unique_oid (List *list, Oid datum)
 
pg_nodiscard Listlist_concat_unique (List *list1, const List *list2)
 
pg_nodiscard Listlist_concat_unique_ptr (List *list1, const List *list2)
 
pg_nodiscard Listlist_concat_unique_int (List *list1, const List *list2)
 
pg_nodiscard Listlist_concat_unique_oid (List *list1, const List *list2)
 
void list_deduplicate_oid (List *list)
 
void list_free (List *list)
 
void list_free_deep (List *list)
 
pg_nodiscard Listlist_copy (const List *oldlist)
 
pg_nodiscard Listlist_copy_head (const List *oldlist, int len)
 
pg_nodiscard Listlist_copy_tail (const List *oldlist, int nskip)
 
pg_nodiscard Listlist_copy_deep (const List *oldlist)
 
void list_sort (List *list, list_sort_comparator cmp)
 
int list_int_cmp (const ListCell *p1, const ListCell *p2)
 
int list_oid_cmp (const ListCell *p1, const ListCell *p2)
 

Macro Definition Documentation

◆ for_both_cell

#define for_both_cell (   cell1,
  list1,
  initcell1,
  cell2,
  list2,
  initcell2 
)
Value:
for (ForBothCellState cell1##__state = \
for_both_cell_setup(list1, initcell1, list2, initcell2); \
multi_for_advance_cell(cell1, cell1##__state, l1, i1), \
multi_for_advance_cell(cell2, cell1##__state, l2, i2), \
(cell1 != NULL && cell2 != NULL); \
cell1##__state.i1++, cell1##__state.i2++)
static ForBothCellState for_both_cell_setup(const List *list1, const ListCell *initcell1, const List *list2, const ListCell *initcell2)
Definition: pg_list.h:498

Definition at line 489 of file pg_list.h.

◆ for_each_cell

#define for_each_cell (   cell,
  lst,
  initcell 
)
Value:
for (ForEachState cell##__state = for_each_cell_setup(lst, initcell); \
(cell##__state.l != NIL && \
cell##__state.i < cell##__state.l->length) ? \
(cell = &cell##__state.l->elements[cell##__state.i], true) : \
(cell = NULL, false); \
cell##__state.i++)
#define NIL
Definition: pg_list.h:68
static ForEachState for_each_cell_setup(const List *lst, const ListCell *initcell)
Definition: pg_list.h:447

Definition at line 438 of file pg_list.h.

◆ for_each_from

#define for_each_from (   cell,
  lst,
 
)
Value:
for (ForEachState cell##__state = for_each_from_setup(lst, N); \
(cell##__state.l != NIL && \
cell##__state.i < cell##__state.l->length) ? \
(cell = &cell##__state.l->elements[cell##__state.i], true) : \
(cell = NULL, false); \
cell##__state.i++)
static ForEachState for_each_from_setup(const List *lst, int N)
Definition: pg_list.h:423

Definition at line 414 of file pg_list.h.

◆ forboth

#define forboth (   cell1,
  list1,
  cell2,
  list2 
)
Value:
for (ForBothState cell1##__state = {(list1), (list2), 0}; \
multi_for_advance_cell(cell1, cell1##__state, l1, i), \
multi_for_advance_cell(cell2, cell1##__state, l2, i), \
(cell1 != NULL && cell2 != NULL); \
cell1##__state.i++)
int i
Definition: isn.c:73

Definition at line 467 of file pg_list.h.

◆ foreach

#define foreach (   cell,
  lst 
)
Value:
for (ForEachState cell##__state = {(lst), 0}; \
(cell##__state.l != NIL && \
cell##__state.i < cell##__state.l->length) ? \
(cell = &cell##__state.l->elements[cell##__state.i], true) : \
(cell = NULL, false); \
cell##__state.i++)

Definition at line 373 of file pg_list.h.

◆ foreach_current_index

#define foreach_current_index (   cell)    (cell##__state.i)

Definition at line 403 of file pg_list.h.

◆ foreach_delete_current

#define foreach_delete_current (   lst,
  cell 
)
Value:
(cell##__state.i--, \
(List *) (cell##__state.l = list_delete_cell(lst, cell)))
pg_nodiscard List * list_delete_cell(List *list, ListCell *cell)
Definition: list.c:840
Definition: pg_list.h:54

Definition at line 390 of file pg_list.h.

◆ forfive

#define forfive (   cell1,
  list1,
  cell2,
  list2,
  cell3,
  list3,
  cell4,
  list4,
  cell5,
  list5 
)
Value:
for (ForFiveState cell1##__state = {(list1), (list2), (list3), (list4), (list5), 0}; \
multi_for_advance_cell(cell1, cell1##__state, l1, i), \
multi_for_advance_cell(cell2, cell1##__state, l2, i), \
multi_for_advance_cell(cell3, cell1##__state, l3, i), \
multi_for_advance_cell(cell4, cell1##__state, l4, i), \
multi_for_advance_cell(cell5, cell1##__state, l5, i), \
(cell1 != NULL && cell2 != NULL && cell3 != NULL && \
cell4 != NULL && cell5 != NULL); \
cell1##__state.i++)

Definition at line 537 of file pg_list.h.

◆ forfour

#define forfour (   cell1,
  list1,
  cell2,
  list2,
  cell3,
  list3,
  cell4,
  list4 
)
Value:
for (ForFourState cell1##__state = {(list1), (list2), (list3), (list4), 0}; \
multi_for_advance_cell(cell1, cell1##__state, l1, i), \
multi_for_advance_cell(cell2, cell1##__state, l2, i), \
multi_for_advance_cell(cell3, cell1##__state, l3, i), \
multi_for_advance_cell(cell4, cell1##__state, l4, i), \
(cell1 != NULL && cell2 != NULL && cell3 != NULL && cell4 != NULL); \
cell1##__state.i++)

Definition at line 524 of file pg_list.h.

◆ forthree

#define forthree (   cell1,
  list1,
  cell2,
  list2,
  cell3,
  list3 
)
Value:
for (ForThreeState cell1##__state = {(list1), (list2), (list3), 0}; \
multi_for_advance_cell(cell1, cell1##__state, l1, i), \
multi_for_advance_cell(cell2, cell1##__state, l2, i), \
multi_for_advance_cell(cell3, cell1##__state, l3, i), \
(cell1 != NULL && cell2 != NULL && cell3 != NULL); \
cell1##__state.i++)

Definition at line 512 of file pg_list.h.

◆ lfirst

#define lfirst (   lc)    ((lc)->ptr_value)

Definition at line 172 of file pg_list.h.

◆ lfirst_int

#define lfirst_int (   lc)    ((lc)->int_value)

Definition at line 173 of file pg_list.h.

◆ lfirst_node

#define lfirst_node (   type,
  lc 
)    castNode(type, lfirst(lc))

Definition at line 176 of file pg_list.h.

◆ lfirst_oid

#define lfirst_oid (   lc)    ((lc)->oid_value)

Definition at line 174 of file pg_list.h.

◆ lfirst_xid

#define lfirst_xid (   lc)    ((lc)->xid_value)

Definition at line 175 of file pg_list.h.

◆ lfourth

#define lfourth (   l)    lfirst(list_nth_cell(l, 3))

Definition at line 193 of file pg_list.h.

◆ lfourth_int

#define lfourth_int (   l)    lfirst_int(list_nth_cell(l, 3))

Definition at line 194 of file pg_list.h.

◆ lfourth_node

#define lfourth_node (   type,
 
)    castNode(type, lfourth(l))

Definition at line 196 of file pg_list.h.

◆ lfourth_oid

#define lfourth_oid (   l)    lfirst_oid(list_nth_cell(l, 3))

Definition at line 195 of file pg_list.h.

◆ linitial

#define linitial (   l)    lfirst(list_nth_cell(l, 0))

Definition at line 178 of file pg_list.h.

◆ linitial_int

#define linitial_int (   l)    lfirst_int(list_nth_cell(l, 0))

Definition at line 179 of file pg_list.h.

◆ linitial_node

#define linitial_node (   type,
 
)    castNode(type, linitial(l))

Definition at line 181 of file pg_list.h.

◆ linitial_oid

#define linitial_oid (   l)    lfirst_oid(list_nth_cell(l, 0))

Definition at line 180 of file pg_list.h.

◆ list_make1

#define list_make1 (   x1)     list_make1_impl(T_List, list_make_ptr_cell(x1))

Definition at line 212 of file pg_list.h.

◆ list_make1_int

#define list_make1_int (   x1)     list_make1_impl(T_IntList, list_make_int_cell(x1))

Definition at line 227 of file pg_list.h.

◆ list_make1_oid

#define list_make1_oid (   x1)     list_make1_impl(T_OidList, list_make_oid_cell(x1))

Definition at line 242 of file pg_list.h.

◆ list_make1_xid

#define list_make1_xid (   x1)     list_make1_impl(T_XidList, list_make_xid_cell(x1))

Definition at line 257 of file pg_list.h.

◆ list_make2

#define list_make2 (   x1,
  x2 
)     list_make2_impl(T_List, list_make_ptr_cell(x1), list_make_ptr_cell(x2))

Definition at line 214 of file pg_list.h.

◆ list_make2_int

#define list_make2_int (   x1,
  x2 
)     list_make2_impl(T_IntList, list_make_int_cell(x1), list_make_int_cell(x2))

Definition at line 229 of file pg_list.h.

◆ list_make2_oid

#define list_make2_oid (   x1,
  x2 
)     list_make2_impl(T_OidList, list_make_oid_cell(x1), list_make_oid_cell(x2))

Definition at line 244 of file pg_list.h.

◆ list_make2_xid

#define list_make2_xid (   x1,
  x2 
)     list_make2_impl(T_XidList, list_make_xid_cell(x1), list_make_xid_cell(x2))

Definition at line 259 of file pg_list.h.

◆ list_make3

#define list_make3 (   x1,
  x2,
  x3 
)
Value:
#define list_make_ptr_cell(v)
Definition: pg_list.h:207
List * list_make3_impl(NodeTag t, ListCell datum1, ListCell datum2, ListCell datum3)
Definition: list.c:256

Definition at line 216 of file pg_list.h.

◆ list_make3_int

#define list_make3_int (   x1,
  x2,
  x3 
)
Value:
#define list_make_int_cell(v)
Definition: pg_list.h:208

Definition at line 231 of file pg_list.h.

◆ list_make3_oid

#define list_make3_oid (   x1,
  x2,
  x3 
)
Value:
#define list_make_oid_cell(v)
Definition: pg_list.h:209

Definition at line 246 of file pg_list.h.

◆ list_make3_xid

#define list_make3_xid (   x1,
  x2,
  x3 
)
Value:
#define list_make_xid_cell(v)
Definition: pg_list.h:210

Definition at line 261 of file pg_list.h.

◆ list_make4

#define list_make4 (   x1,
  x2,
  x3,
  x4 
)
Value:
List * list_make4_impl(NodeTag t, ListCell datum1, ListCell datum2, ListCell datum3, ListCell datum4)
Definition: list.c:269

Definition at line 219 of file pg_list.h.

◆ list_make4_int

#define list_make4_int (   x1,
  x2,
  x3,
  x4 
)
Value:

Definition at line 234 of file pg_list.h.

◆ list_make4_oid

#define list_make4_oid (   x1,
  x2,
  x3,
  x4 
)
Value:

Definition at line 249 of file pg_list.h.

◆ list_make4_xid

#define list_make4_xid (   x1,
  x2,
  x3,
  x4 
)
Value:

Definition at line 264 of file pg_list.h.

◆ list_make5

#define list_make5 (   x1,
  x2,
  x3,
  x4,
  x5 
)
Value:
List * list_make5_impl(NodeTag t, ListCell datum1, ListCell datum2, ListCell datum3, ListCell datum4, ListCell datum5)
Definition: list.c:283

Definition at line 222 of file pg_list.h.

◆ list_make5_int

#define list_make5_int (   x1,
  x2,
  x3,
  x4,
  x5 
)
Value:

Definition at line 237 of file pg_list.h.

◆ list_make5_oid

#define list_make5_oid (   x1,
  x2,
  x3,
  x4,
  x5 
)
Value:

Definition at line 252 of file pg_list.h.

◆ list_make5_xid

#define list_make5_xid (   x1,
  x2,
  x3,
  x4,
  x5 
)
Value:

Definition at line 267 of file pg_list.h.

◆ list_make_int_cell

#define list_make_int_cell (   v)    ((ListCell) {.int_value = (v)})

Definition at line 208 of file pg_list.h.

◆ list_make_oid_cell

#define list_make_oid_cell (   v)    ((ListCell) {.oid_value = (v)})

Definition at line 209 of file pg_list.h.

◆ list_make_ptr_cell

#define list_make_ptr_cell (   v)    ((ListCell) {.ptr_value = (v)})

Definition at line 207 of file pg_list.h.

◆ list_make_xid_cell

#define list_make_xid_cell (   v)    ((ListCell) {.xid_value = (v)})

Definition at line 210 of file pg_list.h.

◆ list_nth_node

#define list_nth_node (   type,
  list,
 
)    castNode(type, list_nth(list, n))

Definition at line 327 of file pg_list.h.

◆ llast

#define llast (   l)    lfirst(list_last_cell(l))

Definition at line 198 of file pg_list.h.

◆ llast_int

#define llast_int (   l)    lfirst_int(list_last_cell(l))

Definition at line 199 of file pg_list.h.

◆ llast_node

#define llast_node (   type,
 
)    castNode(type, llast(l))

Definition at line 202 of file pg_list.h.

◆ llast_oid

#define llast_oid (   l)    lfirst_oid(list_last_cell(l))

Definition at line 200 of file pg_list.h.

◆ llast_xid

#define llast_xid (   l)    lfirst_xid(list_last_cell(l))

Definition at line 201 of file pg_list.h.

◆ lsecond

#define lsecond (   l)    lfirst(list_nth_cell(l, 1))

Definition at line 183 of file pg_list.h.

◆ lsecond_int

#define lsecond_int (   l)    lfirst_int(list_nth_cell(l, 1))

Definition at line 184 of file pg_list.h.

◆ lsecond_node

#define lsecond_node (   type,
 
)    castNode(type, lsecond(l))

Definition at line 186 of file pg_list.h.

◆ lsecond_oid

#define lsecond_oid (   l)    lfirst_oid(list_nth_cell(l, 1))

Definition at line 185 of file pg_list.h.

◆ lthird

#define lthird (   l)    lfirst(list_nth_cell(l, 2))

Definition at line 188 of file pg_list.h.

◆ lthird_int

#define lthird_int (   l)    lfirst_int(list_nth_cell(l, 2))

Definition at line 189 of file pg_list.h.

◆ lthird_node

#define lthird_node (   type,
 
)    castNode(type, lthird(l))

Definition at line 191 of file pg_list.h.

◆ lthird_oid

#define lthird_oid (   l)    lfirst_oid(list_nth_cell(l, 2))

Definition at line 190 of file pg_list.h.

◆ multi_for_advance_cell

#define multi_for_advance_cell (   cell,
  state,
  l,
  i 
)
Value:
(cell = (state.l != NIL && state.i < state.l->length) ? \
&state.l->elements[state.i] : NULL)
Definition: regguts.h:323

Definition at line 474 of file pg_list.h.

◆ NIL

#define NIL   ((List *) NULL)

Definition at line 68 of file pg_list.h.

Typedef Documentation

◆ ForBothCellState

◆ ForBothState

typedef struct ForBothState ForBothState

◆ ForEachState

typedef struct ForEachState ForEachState

◆ ForFiveState

typedef struct ForFiveState ForFiveState

◆ ForFourState

typedef struct ForFourState ForFourState

◆ ForThreeState

typedef struct ForThreeState ForThreeState

◆ List

typedef struct List List

◆ list_sort_comparator

typedef int(* list_sort_comparator) (const ListCell *a, const ListCell *b)

Definition at line 629 of file pg_list.h.

◆ ListCell

typedef union ListCell ListCell

Function Documentation

◆ for_both_cell_setup()

static ForBothCellState for_both_cell_setup ( const List list1,
const ListCell initcell1,
const List list2,
const ListCell initcell2 
)
inlinestatic

Definition at line 498 of file pg_list.h.

500 {
501  ForBothCellState r = {list1, list2,
502  initcell1 ? list_cell_number(list1, initcell1) : list_length(list1),
503  initcell2 ? list_cell_number(list2, initcell2) : list_length(list2)};
504 
505  return r;
506 }
static int list_length(const List *l)
Definition: pg_list.h:152
static int list_cell_number(const List *l, const ListCell *c)
Definition: pg_list.h:333

References list_cell_number(), and list_length().

◆ for_each_cell_setup()

static ForEachState for_each_cell_setup ( const List lst,
const ListCell initcell 
)
inlinestatic

Definition at line 447 of file pg_list.h.

448 {
449  ForEachState r = {lst,
450  initcell ? list_cell_number(lst, initcell) : list_length(lst)};
451 
452  return r;
453 }

References list_cell_number(), and list_length().

◆ for_each_from_setup()

static ForEachState for_each_from_setup ( const List lst,
int  N 
)
inlinestatic

Definition at line 423 of file pg_list.h.

424 {
425  ForEachState r = {lst, N};
426 
427  Assert(N >= 0);
428  return r;
429 }
Assert(fmt[strlen(fmt) - 1] !='\n')

References Assert().

◆ lappend()

pg_nodiscard List* lappend ( List list,
void *  datum 
)

Definition at line 338 of file list.c.

339 {
341 
342  if (list == NIL)
343  list = new_list(T_List, 1);
344  else
346 
347  llast(list) = datum;
349  return list;
350 }
static List * new_list(NodeTag type, int min_size)
Definition: list.c:90
#define check_list_invariants(l)
Definition: list.c:79
static void new_tail_cell(List *list)
Definition: list.c:322
#define IsPointerList(l)
Definition: list.c:54
#define llast(l)
Definition: pg_list.h:198

References Assert(), check_list_invariants, IsPointerList, sort-test::list, llast, new_list(), new_tail_cell(), and NIL.

Referenced by _SPI_make_plan_non_temp(), _SPI_prepare_oneshot_plan(), _SPI_prepare_plan(), _SPI_save_plan(), accumulate_append_subpath(), AcquireRewriteLocks(), add_column_to_pathtarget(), add_dummy_return(), add_eq_member(), add_join_clause_to_rels(), add_join_rel(), add_local_reloption(), add_merged_range_bounds(), add_outer_joins_to_relids(), add_part_relids(), add_paths_to_append_rel(), add_placeholders_to_base_rels(), add_placeholders_to_joinrel(), add_row_identity_var(), add_rte_to_flat_rtable(), add_security_quals(), add_to_flat_tlist(), add_unique_group_var(), add_vars_to_targetlist(), add_with_check_options(), addArc(), AddEventToPendingNotifies(), addFamilyMember(), addFkRecurseReferencing(), addKey(), addKeyToQueue(), addNSItemToQuery(), addRangeTableEntry(), addRangeTableEntryForCTE(), addRangeTableEntryForENR(), addRangeTableEntryForFunction(), addRangeTableEntryForJoin(), addRangeTableEntryForRelation(), addRangeTableEntryForSubquery(), addRangeTableEntryForTableFunc(), addRangeTableEntryForValues(), AddRelationNewConstraints(), AddRelationNotNullConstraints(), addRTEPermissionInfo(), addTargetToGroupList(), addTargetToSortList(), AlterPublicationTables(), AlterTableMoveAll(), AlterTSDictionary(), analyzeCTE(), analyzeCTETargetList(), append_pathkeys(), apply_child_basequals(), apply_handle_truncate(), apply_scanjoin_target_to_paths(), applyLockingClause(), ApplyRetrieveRule(), array_subscript_transform(), assign_param_for_placeholdervar(), assign_param_for_var(), ATAddCheckNNConstraint(), ATExecAddColumn(), ATExecValidateConstraint(), ATGetQueueEntry(), ATParseTransformCmd(), ATPostAlterTypeParse(), ATPrepAddPrimaryKey(), ATPrepAlterColumnType(), ATPrepCmd(), BaseBackupAddTarget(), btcostestimate(), build_aggregate_finalfn_expr(), build_aggregate_transfn_expr(), build_coercion_expression(), build_index_pathkeys(), build_index_paths(), build_index_tlist(), build_join_rel(), build_joinrel_tlist(), build_partition_pathkeys(), build_path_tlist(), build_physical_tlist(), build_remote_returning(), build_subplan(), BuildEventTriggerCache(), BuildOnConflictExcludedTargetlist(), buildRelationAliases(), cached_scansel(), calc_joinrel_size_estimate(), can_minmax_aggs(), check_index_predicates(), check_selective_binary_conversion(), check_sql_fn_retval(), check_tuple_attribute(), checkInsertTargets(), checkSharedDependencies(), checkWellFormedRecursionWalker(), choose_bitmap_and(), ChooseIndexColumnNames(), classifyConditions(), clauselist_apply_dependencies(), CloneFkReferenced(), CloneFkReferencing(), CloneRowTriggersToPartition(), coerce_fn_result_column(), coerce_record_to_complex(), compute_common_attribute(), compute_semi_anti_join_factors(), compute_semijoin_info(), ComputeIndexAttrs(), ComputePartitionAttrs(), consider_groupingsets_paths(), consider_new_or_clause(), convert_ANY_sublink_to_join(), convert_EXISTS_to_ANY(), convert_subquery_pathkeys(), CopyMultiInsertInfoFlush(), CopyMultiInsertInfoSetupBuffer(), cost_incremental_sort(), create_append_plan(), create_bitmap_scan_plan(), create_bitmap_subplan(), create_ctas_nodata(), create_customscan_plan(), create_degenerate_grouping_paths(), create_edata_for_relation(), create_groupingsets_plan(), create_hashjoin_plan(), create_index_paths(), create_indexscan_plan(), create_join_clause(), create_merge_append_plan(), create_nestloop_path(), create_partitionwise_grouping_paths(), create_tidrangescan_plan(), create_tidscan_plan(), create_unique_plan(), CreateStatistics(), database_to_xmlschema_internal(), deconstruct_distribute(), deconstruct_recurse(), DefineRelation(), DefineSequence(), DefineTSDictionary(), DefineView(), DefineVirtualRelation(), deparseParam(), deparseVar(), deserialize_deflist(), determineRecursiveColTypes(), distribute_qual_to_rels(), distribute_restrictinfo_to_rels(), distribute_row_identity_vars(), do_pg_backup_start(), DoCopy(), dropconstraint_internal(), DropRole(), estimate_multivariate_ndistinct(), estimate_num_groups(), eval_const_expressions_mutator(), EvalPlanQualStart(), EventTriggerAlterTableEnd(), EventTriggerCollectAlterDefPrivs(), EventTriggerCollectAlterOpFam(), EventTriggerCollectAlterTableSubcmd(), EventTriggerCollectAlterTSConfig(), EventTriggerCollectCreateOpClass(), EventTriggerCollectGrant(), EventTriggerCollectSimpleCommand(), Exec_ListenCommit(), ExecAllocTableSlot(), ExecEvalXmlExpr(), ExecGetAncestorResultRels(), ExecGetTriggerResultRel(), ExecInitExprList(), ExecInitExprRec(), ExecInitInsertProjection(), ExecInitLockRows(), ExecInitMerge(), ExecInitModifyTable(), ExecInitNode(), ExecInitPartitionInfo(), ExecInitResultRelation(), ExecInitSubPlan(), ExecInsert(), ExecPrepareExprList(), ExecPushExprSetupSteps(), ExecSerializePlan(), ExecuteGrantStmt(), ExecuteTruncate(), ExecuteTruncateGuts(), expand_grouping_sets(), expand_groupingset_node(), expand_inherited_rtentry(), expand_insert_targetlist(), expand_single_inheritance_child(), expand_vacuum_rel(), expandNSItemAttrs(), expandNSItemVars(), ExpandRowReference(), expandRTE(), expandTableLikeClause(), expandTupleDesc(), ExplainNode(), ExportSnapshot(), expr_setup_walker(), expression_tree_mutator_impl(), extract_actual_clauses(), extract_actual_join_clauses(), extract_jsp_path_expr_nodes(), extract_lateral_references(), extract_nonindex_conditions(), extract_or_clause(), extract_rollup_sets(), extractRemainingColumns(), fetch_remote_table_info(), fetch_statentries_for_relation(), fetch_table_list(), fetch_upper_rel(), FetchTableStates(), file_fdw_validator(), fill_hba_line(), find_duplicate_ors(), find_hash_columns(), find_indexpath_quals(), find_list_position(), find_mergeclauses_for_outer_pathkeys(), find_partition_scheme(), find_placeholder_info(), find_window_functions_walker(), find_window_run_conditions(), findTargetlistEntrySQL99(), fireRIRrules(), fireRules(), fix_indexorderby_references(), fix_indexqual_references(), flatten_grouping_sets(), flatten_join_alias_vars_mutator(), flatten_simple_union_all(), fmgr_sql_validator(), foreign_grouping_ok(), foreign_join_ok(), format_operator_parts(), format_procedure_parts(), func_get_detail(), gen_partprune_steps_internal(), gen_prune_step_combine(), gen_prune_step_op(), gen_prune_steps_from_opexps(), generate_append_tlist(), generate_base_implied_equalities_const(), generate_bitmap_or_paths(), generate_implied_equalities_for_column(), generate_join_implied_equalities_broken(), generate_join_implied_equalities_normal(), generate_matching_part_pairs(), generate_orderedappend_paths(), generate_partitionwise_join_paths(), generate_setop_tlist(), generate_subquery_params(), generate_subquery_vars(), generate_union_paths(), generateClonedExtStatsStmt(), generateClonedIndexStmt(), generateSerialExtraStmts(), get_actual_clauses(), get_all_vacuum_rels(), get_appendrel_parampathinfo(), get_baserel_parampathinfo(), get_database_list(), get_eclass_for_sort_expr(), get_ext_ver_info(), get_ext_ver_list(), get_file_fdw_attribute_options(), get_foreign_key_join_selectivity(), get_func_expr(), get_index_clause_from_support(), get_index_paths(), get_insert_query_def(), get_join_index_paths(), get_joinrel_parampathinfo(), get_matching_part_pairs(), get_merge_query_def(), get_op_btree_interpretation(), get_policies_for_relation(), get_qual_for_hash(), get_qual_for_list(), get_qual_for_range(), get_quals_from_indexclauses(), get_range_nulltest(), get_rel_sync_entry(), get_relation_constraints(), get_relation_foreign_keys(), get_relation_statistics_worker(), get_rels_with_domain(), get_required_extension(), get_sortgrouplist_exprs(), get_steps_using_prefix_recurse(), get_subscription_list(), get_switched_clauses(), get_tables_to_cluster(), get_tables_to_cluster_partitioned(), get_tlist_exprs(), get_update_query_targetlist_def(), get_useful_ecs_for_relation(), get_useful_pathkeys_for_relation(), get_windowfunc_expr_helper(), GetAfterTriggersTableData(), getObjectIdentityParts(), getState(), GetSubscriptionRelations(), gistFindPath(), gistfixsplit(), gistplacetopage(), grouping_planner(), hash_inner_and_outer(), hashagg_spill_finish(), heap_truncate(), identify_current_nestloop_params(), identify_opfamily_groups(), index_concurrently_create_copy(), infer_arbiter_indexes(), init_execution_state(), init_sql_fcache(), initialize_target_list(), InitPlan(), innerrel_is_unique(), interpret_AS_clause(), interpret_function_parameter_list(), intorel_startup(), is_innerrel_unique_for(), join_is_removable(), jsonb_ops__extract_nodes(), jsonb_path_ops__extract_nodes(), jsonb_subscript_transform(), JsonValueListAppend(), list_append_unique(), list_append_unique_ptr(), list_concat_unique(), list_concat_unique_ptr(), list_difference(), list_difference_ptr(), list_intersection(), list_union(), list_union_ptr(), llvm_compile_module(), load_hba(), load_ident(), LoadPublications(), Lock_AF_UNIX(), logicalrep_workers_find(), make_canonical_pathkey(), make_copy_attnamelist(), make_group_input_target(), make_inh_translation_list(), make_inner_pathkeys_for_merge(), make_modifytable(), make_partial_grouping_target(), make_partition_op_expr(), make_partition_pruneinfo(), make_partitionedrel_pruneinfo(), make_path_rowexpr(), make_pathkeys_for_sortclauses_extended(), make_pathtarget_from_tlist(), make_rel_from_joinlist(), make_row_comparison_op(), make_setop_translation_list(), make_sort_input_target(), make_sub_restrictinfos(), make_tlist_from_pathtarget(), make_window_input_target(), makeDependencyGraphWalker(), MarkGUCPrefixReserved(), markRelsAsNulledBy(), match_clause_to_index(), match_clause_to_partition_key(), match_foreign_keys_to_quals(), match_join_clauses_to_index(), match_network_subset(), match_pathkeys_to_index(), match_pattern_prefix(), matchLocks(), mbms_add_member(), mbms_add_members(), merge_clump(), merge_list_bounds(), merge_publications(), MergeAttributes(), negate_clause(), next_field_expand(), nodeRead(), ObjectsInPublicationToOids(), OpenTableList(), order_qual_clauses(), pa_launch_parallel_worker(), paraminfo_get_equal_hashops(), parse_hba_line(), parseCheckAggregates(), ParseFuncOrColumn(), PartConstraintImpliedByRelConstraint(), perform_base_backup(), pg_get_object_address(), pg_get_publication_tables(), pg_logical_slot_get_changes_guts(), pg_plan_queries(), pg_rewrite_query(), pgfdw_abort_cleanup_begin(), pgfdw_finish_abort_cleanup(), pgfdw_finish_pre_commit_cleanup(), pgfdw_subxact_callback(), pgfdw_xact_callback(), pgoutput_row_filter_init(), plan_union_children(), populate_typ_list(), postgresGetForeignPaths(), postgresGetForeignPlan(), postgresImportForeignSchema(), prep_domain_constraints(), prepare_sort_from_pathkeys(), preprocess_aggref(), preprocess_groupclause(), preprocess_grouping_sets(), preprocess_rowmarks(), preprocess_targetlist(), process_duplicate_ors(), process_equivalence(), process_pipe_input(), process_sublinks_mutator(), process_subquery_nestloop_params(), ProcessStartupPacket(), pull_ands(), pull_ors(), pull_up_simple_values(), pull_up_sublinks_jointree_recurse(), pull_up_sublinks_qual_recurse(), pull_up_union_leaf_queries(), pull_var_clause_walker(), pull_vars_walker(), query_tree_mutator_impl(), QueryRewrite(), queue_listen(), range_table_mutator_impl(), read_tablespace_map(), rebuild_fdw_scan_tlist(), RebuildConstraintComment(), record_plan_function_dependency(), record_plan_type_dependency(), reduce_outer_joins_pass1(), register_ENR(), register_label_provider(), register_reloptions_validator(), ReindexRelationConcurrently(), relation_excluded_by_constraints(), relation_has_unique_index_for(), RelationCacheInvalidate(), RelationGetDummyIndexExpressions(), RelationGetFKeyList(), RelationGetNotNullConstraints(), remap_to_groupclause_idx(), RememberConstraintForRebuilding(), RememberIndexForRebuilding(), RememberStatisticsForRebuilding(), RememberSyncRequest(), remove_rel_from_joinlist(), remove_useless_groupby_columns(), RemoveInheritance(), reorder_function_arguments(), reparameterize_path(), reparameterize_path_by_child(), reparameterize_pathlist_by_child(), replace_empty_jointree(), replace_nestloop_param_placeholdervar(), replace_nestloop_param_var(), replace_outer_agg(), replace_outer_grouping(), report_reduced_full_join(), resolve_unique_index_expr(), RewriteQuery(), rewriteSearchAndCycle(), rewriteTargetListIU(), rewriteTargetView(), rewriteValuesRTE(), rewriteValuesRTEToNulls(), RI_Initial_Check(), ScanSourceDatabasePgClassPage(), schema_to_xmlschema_internal(), SearchCatCacheList(), select_active_windows(), select_mergejoin_clauses(), select_outer_pathkeys_for_merge(), sepgsql_set_client_label(), sequence_options(), set_append_rel_pathlist(), set_append_rel_size(), set_cheapest(), set_deparse_for_query(), set_dummy_tlist_references(), set_indexonlyscan_references(), set_joinrel_partition_key_exprs(), set_plan_references(), set_plan_refs(), set_rtable_names(), set_simple_column_names(), set_subquery_pathlist(), set_upper_references(), set_using_names(), show_eval_params(), show_grouping_set_keys(), show_incremental_sort_group_info(), show_modifytable_info(), show_plan_tlist(), show_sort_group_keys(), show_tablesample(), simplify_and_arguments(), simplify_or_arguments(), split_pathtarget_at_srfs(), split_pathtarget_walker(), SplitDirectoriesString(), SplitGUCList(), SplitIdentifierString(), SS_make_initplan_from_plan(), SS_process_ctes(), statext_is_compatible_clause_internal(), statext_mcv_clauselist_selectivity(), stringToQualifiedNameList(), subquery_planner(), table_slot_create(), textarray_to_stringlist(), textarray_to_strvaluelist(), textToQualifiedNameList(), TidExprListCreate(), TidRangeQualFromRestrictInfoList(), tokenize_auth_file(), tokenize_expand_file(), transform_MERGE_to_join(), transformAExprIn(), transformAggregateCall(), transformAlterTableStmt(), transformArrayExpr(), transformAssignmentIndirection(), transformBoolExpr(), transformCallStmt(), transformCaseExpr(), transformCoalesceExpr(), transformColumnDefinition(), transformCreateSchemaStmtElements(), transformCreateStmt(), transformDistinctClause(), transformDistinctOnClause(), transformExpressionList(), transformFKConstraints(), transformFkeyGetPrimaryKey(), transformFromClause(), transformFromClauseItem(), transformFuncCall(), transformGenericOptions(), transformGroupClause(), transformGroupClauseExpr(), transformGroupingFunc(), transformGroupingSet(), TransformGUCArray(), transformIndexConstraint(), transformIndexConstraints(), transformIndirection(), transformInsertRow(), transformInsertStmt(), transformJoinUsingClause(), transformJsonArrayConstructor(), transformJsonObjectConstructor(), transformMergeStmt(), transformMinMaxExpr(), transformMultiAssignRef(), transformOfType(), transformPartitionBound(), transformPartitionRangeBounds(), transformPartitionSpec(), transformPLAssignStmt(), transformRangeFunction(), transformRangeTableFunc(), transformRangeTableSample(), transformRowExpr(), transformRuleStmt(), transformSetOperationStmt(), transformSetOperationTree(), transformSubLink(), transformTableConstraint(), transformTableLikeClause(), transformTargetList(), transformValuesClause(), transformWindowDefinitions(), transformWindowFuncCall(), transformWithClause(), transformXmlExpr(), trim_mergeclauses_for_inner_pathkeys(), TS_execute_locations_recurse(), untransformRelOptions(), UpdateLogicalMappings(), WaitForLockersMultiple(), and xmlelement().

◆ lappend_int()

pg_nodiscard List* lappend_int ( List list,
int  datum 
)

Definition at line 356 of file list.c.

357 {
359 
360  if (list == NIL)
361  list = new_list(T_IntList, 1);
362  else
364 
365  llast_int(list) = datum;
367  return list;
368 }
#define IsIntegerList(l)
Definition: list.c:55
#define llast_int(l)
Definition: pg_list.h:199

References Assert(), check_list_invariants, IsIntegerList, sort-test::list, llast_int, new_list(), new_tail_cell(), and NIL.

Referenced by add_merged_range_bounds(), addRangeTableEntryForCTE(), addRangeTableEntryForENR(), addRangeTableEntryForFunction(), addRangeTableEntryForSubquery(), AddRelationNotNullConstraints(), adjust_inherited_attnums(), adjust_partition_colnos_using_map(), analyzeCTETargetList(), ATRewriteTable(), build_merged_partition_bounds(), build_subplan(), check_ungrouped_columns_walker(), checkInsertTargets(), convert_EXISTS_to_ANY(), CopyGetAttnums(), deparseAnalyzeSql(), deparseExplicitTargetList(), deparseTargetList(), dropconstraint_internal(), ExecBuildAggTrans(), ExecBuildGroupingEqual(), ExecBuildParamSetEqual(), ExecInitExprRec(), ExecInitQual(), ExecInitSubscriptingRef(), expand_indexqual_rowcompare(), extract_update_targetlist_colnos(), extractRemainingColumns(), fetch_statentries_for_relation(), finalize_grouping_exprs_walker(), find_all_inheritors(), find_compatible_agg(), fix_expr_common(), gen_partprune_steps_internal(), generate_subquery_params(), grouping_planner(), list_append_unique_int(), list_concat_unique_int(), list_difference_int(), list_intersection_int(), list_union_int(), match_pathkeys_to_index(), merge_list_bounds(), nodeRead(), postgresBeginForeignInsert(), postgresPlanForeignModify(), rel_is_distinct_for(), remap_to_groupclause_idx(), RemoveInheritance(), reorder_grouping_sets(), rewriteSearchAndCycle(), set_plan_refs(), split_pathtarget_at_srfs(), SS_process_ctes(), TerminateOtherDBBackends(), transformDistinctOnClause(), transformFromClauseItem(), transformGroupClauseList(), transformRangeTableFunc(), transformSetOperationTree(), transformValuesClause(), and translate_sub_tlist().

◆ lappend_oid()

pg_nodiscard List* lappend_oid ( List list,
Oid  datum 
)

Definition at line 374 of file list.c.

375 {
377 
378  if (list == NIL)
379  list = new_list(T_OidList, 1);
380  else
382 
383  llast_oid(list) = datum;
385  return list;
386 }
#define IsOidList(l)
Definition: list.c:56
#define llast_oid(l)
Definition: pg_list.h:200

References Assert(), check_list_invariants, IsOidList, sort-test::list, llast_oid, new_list(), new_tail_cell(), and NIL.

Referenced by add_rte_to_flat_rtable(), addRangeTableEntryForCTE(), addRangeTableEntryForENR(), addRangeTableEntryForFunction(), addRangeTableEntryForSubquery(), AfterTriggerSetState(), AlterTableMoveAll(), analyzeCTETargetList(), apply_handle_truncate(), ApplyExtensionUpdates(), assign_collations_walker(), assign_param_for_placeholdervar(), assign_param_for_var(), assign_special_exec_param(), ATExecSetNotNull(), binary_upgrade_create_empty_extension(), check_functional_grouping(), CheckAttributeType(), CloneFkReferenced(), CloneFkReferencing(), compute_semijoin_info(), convert_EXISTS_to_ANY(), create_hashjoin_plan(), create_indexscan_plan(), CreateExtensionInternal(), CreateFunction(), DefineRelation(), do_autovacuum(), dropconstraint_internal(), EventTriggerCommonSetup(), ExecAlterDefaultPrivilegesStmt(), ExecInitPartitionInfo(), ExecInsertIndexTuples(), ExecuteGrantStmt(), ExecuteTruncate(), ExecuteTruncateGuts(), expand_indexqual_rowcompare(), extract_query_dependencies_walker(), ExtractExtensionList(), find_all_inheritors(), find_inheritance_children_extended(), find_typed_table_dependencies(), fireRIRrules(), fix_expr_common(), generate_new_exec_param(), get_index_ref_constraints(), get_mergejoin_opfamilies(), get_partition_ancestors_worker(), get_steps_using_prefix_recurse(), GetAllTablesPublicationRelations(), GetAllTablesPublications(), getAutoExtensionsOfObject(), getOwnedSequences_internal(), GetParentedForeignKeyRefs(), GetPublicationSchemas(), GetPubPartitionOptionRelations(), GetRelationPublications(), getRelationsInNamespace(), GetSchemaPublicationRelations(), GetSchemaPublications(), heap_truncate_check_FKs(), heap_truncate_find_FKs(), index_concurrently_swap(), infer_arbiter_indexes(), inline_function(), interpret_function_parameter_list(), list_append_unique_oid(), list_concat_unique_oid(), list_difference_oid(), list_union_oid(), LockViewRecurse(), logicalrep_read_truncate(), make_row_comparison_op(), nodeRead(), objectNamesToOids(), objectsInSchemaToOids(), oid_array_to_list(), OpenTableList(), paraminfo_get_equal_hashops(), PreCommit_on_commit_actions(), query_to_oid_list(), recomputeNamespacePath(), ReindexMultipleTables(), ReindexPartitions(), ReindexRelationConcurrently(), rel_is_distinct_for(), relation_is_updatable(), RelationGetIndexList(), RelationGetStatExtList(), RememberConstraintForRebuilding(), RememberIndexForRebuilding(), RememberStatisticsForRebuilding(), remove_dbtablespaces(), replace_outer_agg(), replace_outer_grouping(), RestoreReindexState(), rewriteSearchAndCycle(), roleSpecsToIds(), transformAggregateCall(), transformRangeTableFunc(), transformSetOperationTree(), transformValuesClause(), TryReuseForeignKey(), and typeInheritsFrom().

◆ lappend_xid()

pg_nodiscard List* lappend_xid ( List list,
TransactionId  datum 
)

Definition at line 392 of file list.c.

393 {
395 
396  if (list == NIL)
397  list = new_list(T_XidList, 1);
398  else
400 
401  llast_xid(list) = datum;
403  return list;
404 }
#define IsXidList(l)
Definition: list.c:57
#define llast_xid(l)
Definition: pg_list.h:201

References Assert(), check_list_invariants, IsXidList, sort-test::list, llast_xid, new_list(), new_tail_cell(), and NIL.

Referenced by nodeRead(), pa_start_subtrans(), and set_schema_sent_in_streamed_txn().

◆ lcons()

pg_nodiscard List* lcons ( void *  datum,
List list 
)

Definition at line 494 of file list.c.

495 {
497 
498  if (list == NIL)
499  list = new_list(T_List, 1);
500  else
502 
503  linitial(list) = datum;
505  return list;
506 }
static void new_head_cell(List *list)
Definition: list.c:304
#define linitial(l)
Definition: pg_list.h:178

References Assert(), check_list_invariants, IsPointerList, linitial, sort-test::list, new_head_cell(), new_list(), and NIL.

Referenced by build_minmax_path(), checkWellFormedRecursionWalker(), consider_groupingsets_paths(), CreateExprContextInternal(), CreateLockFile(), ExecInitModifyTable(), expandTableLikeClause(), ExplainNode(), ExplainSubPlans(), extract_rollup_sets(), find_expr_references_walker(), find_update_path(), generateSerialExtraStmts(), get_name_for_var_field(), get_object_address_rv(), get_query_def(), get_relation_info(), gistEmptyAllBuffers(), gistFindPath(), gistGetNodeBuffer(), gistPushItupToNodeBuffer(), load_domaintype_info(), makeDependencyGraphWalker(), pg_get_object_address(), plan_union_children(), PLy_subtransaction_enter(), PrepareClientEncoding(), push_child_plan(), pushOperator(), pushStop(), pushValue_internal(), readTimeLineHistory(), register_on_commit_action(), RelationBuildRowSecurity(), RelationCacheInvalidate(), reorder_grouping_sets(), RewriteQuery(), rewriteSearchAndCycle(), rewriteTargetView(), sepgsql_avc_compute(), set_cheapest(), show_agg_keys(), show_group_keys(), sort_inner_and_outer(), and transformCaseExpr().

◆ lcons_int()

pg_nodiscard List* lcons_int ( int  datum,
List list 
)

Definition at line 512 of file list.c.

513 {
515 
516  if (list == NIL)
517  list = new_list(T_IntList, 1);
518  else
520 
521  linitial_int(list) = datum;
523  return list;
524 }
#define linitial_int(l)
Definition: pg_list.h:179

References Assert(), check_list_invariants, IsIntegerList, linitial_int, sort-test::list, new_head_cell(), new_list(), and NIL.

Referenced by ExecInitAgg(), ExplainBeginOutput(), ExplainOpenGroup(), ExplainOpenSetAsideGroup(), and ExplainRestoreGroup().

◆ lcons_oid()

pg_nodiscard List* lcons_oid ( Oid  datum,
List list 
)

Definition at line 530 of file list.c.

531 {
533 
534  if (list == NIL)
535  list = new_list(T_OidList, 1);
536  else
538 
539  linitial_oid(list) = datum;
541  return list;
542 }
#define linitial_oid(l)
Definition: pg_list.h:180

References Assert(), check_list_invariants, IsOidList, linitial_oid, sort-test::list, new_head_cell(), new_list(), and NIL.

Referenced by pg_partition_ancestors(), recomputeNamespacePath(), and ReindexMultipleTables().

◆ list_append_unique()

pg_nodiscard List* list_append_unique ( List list,
void *  datum 
)

Definition at line 1342 of file list.c.

1343 {
1344  if (list_member(list, datum))
1345  return list;
1346  else
1347  return lappend(list, datum);
1348 }
List * lappend(List *list, void *datum)
Definition: list.c:338
bool list_member(const List *list, const void *datum)
Definition: list.c:660

References lappend(), sort-test::list, and list_member().

Referenced by add_security_quals(), add_with_check_options(), check_publications_origin(), and create_index_paths().

◆ list_append_unique_int()

pg_nodiscard List* list_append_unique_int ( List list,
int  datum 
)

Definition at line 1367 of file list.c.

1368 {
1369  if (list_member_int(list, datum))
1370  return list;
1371  else
1372  return lappend_int(list, datum);
1373 }
List * lappend_int(List *list, int datum)
Definition: list.c:356
bool list_member_int(const List *list, int datum)
Definition: list.c:701

References lappend_int(), sort-test::list, and list_member_int().

◆ list_append_unique_oid()

pg_nodiscard List* list_append_unique_oid ( List list,
Oid  datum 
)

Definition at line 1379 of file list.c.

1380 {
1381  if (list_member_oid(list, datum))
1382  return list;
1383  else
1384  return lappend_oid(list, datum);
1385 }
List * lappend_oid(List *list, Oid datum)
Definition: list.c:374
bool list_member_oid(const List *list, Oid datum)
Definition: list.c:721

References lappend_oid(), sort-test::list, and list_member_oid().

Referenced by ATExecAlterConstrRecurse(), btvalidate(), hashvalidate(), heap_truncate_find_FKs(), LogicalRepWorkersWakeupAtCommit(), map_sql_typecoll_to_xmlschema_types(), ObjectsInPublicationToOids(), and roles_is_member_of().

◆ list_append_unique_ptr()

pg_nodiscard List* list_append_unique_ptr ( List list,
void *  datum 
)

Definition at line 1355 of file list.c.

1356 {
1357  if (list_member_ptr(list, datum))
1358  return list;
1359  else
1360  return lappend(list, datum);
1361 }
bool list_member_ptr(const List *list, const void *datum)
Definition: list.c:681

References lappend(), sort-test::list, and list_member_ptr().

Referenced by get_useful_ecs_for_relation(), postgresGetForeignPaths(), subbuild_joinrel_joinlist(), and subbuild_joinrel_restrictlist().

◆ list_cell_number()

static int list_cell_number ( const List l,
const ListCell c 
)
inlinestatic

Definition at line 333 of file pg_list.h.

334 {
335  Assert(c >= &l->elements[0] && c < &l->elements[l->length]);
336  return c - l->elements;
337 }
char * c
int length
Definition: pg_list.h:56
ListCell * elements
Definition: pg_list.h:58

References Assert(), List::elements, and List::length.

Referenced by for_both_cell_setup(), for_each_cell_setup(), push_ancestor_plan(), and SyncPostCheckpoint().

◆ list_concat()

pg_nodiscard List* list_concat ( List list1,
const List list2 
)

Definition at line 560 of file list.c.

561 {
562  int new_len;
563 
564  if (list1 == NIL)
565  return list_copy(list2);
566  if (list2 == NIL)
567  return list1;
568 
569  Assert(list1->type == list2->type);
570 
571  new_len = list1->length + list2->length;
572  /* Enlarge array if necessary */
573  if (new_len > list1->max_length)
574  enlarge_list(list1, new_len);
575 
576  /* Even if list1 == list2, using memcpy should be safe here */
577  memcpy(&list1->elements[list1->length], &list2->elements[0],
578  list2->length * sizeof(ListCell));
579  list1->length = new_len;
580 
581  check_list_invariants(list1);
582  return list1;
583 }
static void enlarge_list(List *list, int min_size)
Definition: list.c:154
List * list_copy(const List *oldlist)
Definition: list.c:1572
int max_length
Definition: pg_list.h:57
NodeTag type
Definition: pg_list.h:55

References Assert(), check_list_invariants, List::elements, enlarge_list(), List::length, list_copy(), List::max_length, NIL, and List::type.

Referenced by accumulate_append_subpath(), add_predicate_to_index_quals(), addRangeTableEntryForJoin(), addRangeTableEntryForTableFunc(), ATExecAttachPartition(), ATParseTransformCmd(), ATPostAlterTypeParse(), AtSubCommit_Notify(), build_joinrel_restrictlist(), build_paths_for_OR(), check_index_predicates(), choose_bitmap_and(), clean_up_removed_plan_level(), CombineRangeTables(), consider_groupingsets_paths(), ConstraintImpliedByRelConstraint(), cost_index(), create_append_path(), create_append_plan(), create_bitmap_subplan(), create_index_paths(), create_join_plan(), create_one_window_path(), deconstruct_distribute(), deconstruct_recurse(), DefineRelation(), deparseDirectDeleteSql(), deparseDirectUpdateSql(), deparseFromExprForRel(), estimate_path_cost_size(), expand_groupingset_node(), ExpandAllTables(), expandRTE(), extract_or_clause(), extract_rollup_sets(), fileBeginForeignScan(), fileGetOptions(), find_indexpath_quals(), find_mergeclauses_for_outer_pathkeys(), fireRIRrules(), flatten_grouping_sets(), foreign_grouping_ok(), foreign_join_ok(), gen_partprune_steps_internal(), gen_prune_steps_from_opexps(), generate_bitmap_or_paths(), generate_join_implied_equalities(), generate_join_implied_equalities_for_ecs(), generate_join_implied_equalities_normal(), generate_partition_qual(), get_baserel_parampathinfo(), get_batch_size_option(), get_foreign_key_join_selectivity(), get_from_clause_item(), get_index_paths(), get_join_index_paths(), get_joinrel_parampathinfo(), get_relation_constraints(), get_rels_with_domain(), get_steps_using_prefix_recurse(), GetAllSchemaPublicationRelations(), GetPubPartitionOptionRelations(), is_parallel_safe(), objectsInSchemaToOids(), optimize_window_clauses(), process_equivalence(), process_sublinks_mutator(), ProcessUtilitySlow(), pull_ands(), pull_ors(), pull_up_simple_subquery(), reduce_unique_semijoins(), remove_useless_results_recurse(), reorder_grouping_sets(), RewriteQuery(), rewriteRuleAction(), rewriteTargetListIU(), selectColorTrigrams(), set_joinrel_partition_key_exprs(), set_plan_refs(), split_pathtarget_at_srfs(), split_pathtarget_walker(), TidQualFromRestrictInfoList(), transformAExprIn(), transformAlterTableStmt(), transformCreateSchemaStmtElements(), transformCreateStmt(), transformExpressionList(), transformExtendedStatistics(), transformFromClause(), transformFromClauseItem(), transformIndexConstraints(), transformTargetList(), TS_execute_locations_recurse(), and vacuum().

◆ list_concat_copy()

pg_nodiscard List* list_concat_copy ( const List list1,
const List list2 
)

Definition at line 597 of file list.c.

598 {
599  List *result;
600  int new_len;
601 
602  if (list1 == NIL)
603  return list_copy(list2);
604  if (list2 == NIL)
605  return list_copy(list1);
606 
607  Assert(list1->type == list2->type);
608 
609  new_len = list1->length + list2->length;
610  result = new_list(list1->type, new_len);
611  memcpy(result->elements, list1->elements,
612  list1->length * sizeof(ListCell));
613  memcpy(result->elements + list1->length, list2->elements,
614  list2->length * sizeof(ListCell));
615 
616  check_list_invariants(result);
617  return result;
618 }

References Assert(), check_list_invariants, List::elements, List::length, list_copy(), new_list(), NIL, and List::type.

Referenced by add_function_defaults(), btadjustmembers(), build_paths_for_OR(), choose_bitmap_and(), cost_subqueryscan(), create_scan_plan(), DefineIndex(), gen_partprune_steps(), generate_bitmap_or_paths(), get_parameterized_baserel_size(), hashadjustmembers(), max_parallel_hazard_walker(), preprocess_targetlist(), process_matched_tle(), set_joinrel_partition_key_exprs(), simplify_and_arguments(), and simplify_or_arguments().

◆ list_concat_unique()

pg_nodiscard List* list_concat_unique ( List list1,
const List list2 
)

Definition at line 1404 of file list.c.

1405 {
1406  ListCell *cell;
1407 
1408  Assert(IsPointerList(list1));
1409  Assert(IsPointerList(list2));
1410 
1411  foreach(cell, list2)
1412  {
1413  if (!list_member(list1, lfirst(cell)))
1414  list1 = lappend(list1, lfirst(cell));
1415  }
1416 
1417  check_list_invariants(list1);
1418  return list1;
1419 }
#define lfirst(lc)
Definition: pg_list.h:172

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, and list_member().

Referenced by create_bitmap_subplan(), and select_active_windows().

◆ list_concat_unique_int()

pg_nodiscard List* list_concat_unique_int ( List list1,
const List list2 
)

Definition at line 1447 of file list.c.

1448 {
1449  ListCell *cell;
1450 
1451  Assert(IsIntegerList(list1));
1452  Assert(IsIntegerList(list2));
1453 
1454  foreach(cell, list2)
1455  {
1456  if (!list_member_int(list1, lfirst_int(cell)))
1457  list1 = lappend_int(list1, lfirst_int(cell));
1458  }
1459 
1460  check_list_invariants(list1);
1461  return list1;
1462 }
#define lfirst_int(lc)
Definition: pg_list.h:173

References Assert(), check_list_invariants, IsIntegerList, lappend_int(), lfirst_int, and list_member_int().

◆ list_concat_unique_oid()

pg_nodiscard List* list_concat_unique_oid ( List list1,
const List list2 
)

Definition at line 1468 of file list.c.

1469 {
1470  ListCell *cell;
1471 
1472  Assert(IsOidList(list1));
1473  Assert(IsOidList(list2));
1474 
1475  foreach(cell, list2)
1476  {
1477  if (!list_member_oid(list1, lfirst_oid(cell)))
1478  list1 = lappend_oid(list1, lfirst_oid(cell));
1479  }
1480 
1481  check_list_invariants(list1);
1482  return list1;
1483 }
#define lfirst_oid(lc)
Definition: pg_list.h:174

References Assert(), check_list_invariants, IsOidList, lappend_oid(), lfirst_oid, and list_member_oid().

Referenced by AlterPublicationOptions(), GetSchemaPublicationRelations(), pg_get_publication_tables(), and RelationBuildPublicationDesc().

◆ list_concat_unique_ptr()

pg_nodiscard List* list_concat_unique_ptr ( List list1,
const List list2 
)

Definition at line 1426 of file list.c.

1427 {
1428  ListCell *cell;
1429 
1430  Assert(IsPointerList(list1));
1431  Assert(IsPointerList(list2));
1432 
1433  foreach(cell, list2)
1434  {
1435  if (!list_member_ptr(list1, lfirst(cell)))
1436  list1 = lappend(list1, lfirst(cell));
1437  }
1438 
1439  check_list_invariants(list1);
1440  return list1;
1441 }

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, and list_member_ptr().

◆ list_copy()

pg_nodiscard List* list_copy ( const List oldlist)

Definition at line 1572 of file list.c.

1573 {
1574  List *newlist;
1575 
1576  if (oldlist == NIL)
1577  return NIL;
1578 
1579  newlist = new_list(oldlist->type, oldlist->length);
1580  memcpy(newlist->elements, oldlist->elements,
1581  newlist->length * sizeof(ListCell));
1582 
1583  check_list_invariants(newlist);
1584  return newlist;
1585 }

References check_list_invariants, List::elements, List::length, new_list(), NIL, and List::type.

Referenced by addRangeTableEntryForCTE(), adjust_group_pathkeys_for_groupagg(), arrayconst_startup_fn(), arrayexpr_startup_fn(), build_subplan(), check_index_predicates(), check_publications(), consider_groupingsets_paths(), ConstraintImpliedByRelConstraint(), copy_pathtarget(), copyObjectImpl(), CopySearchPathMatcher(), EventTriggerCollectGrant(), ExecuteTruncateGuts(), expression_tree_mutator_impl(), fetch_search_path(), generate_mergejoin_paths(), generateSerialExtraStmts(), get_eclass_for_sort_expr(), get_foreign_key_join_selectivity(), get_query_def(), get_required_extension(), get_steps_using_prefix_recurse(), get_switched_clauses(), get_useful_pathkeys_for_relation(), GetSearchPathMatcher(), heap_truncate_find_FKs(), list_concat(), list_concat_copy(), list_difference(), list_difference_int(), list_difference_oid(), list_difference_ptr(), list_union(), list_union_int(), list_union_oid(), list_union_ptr(), merge_publications(), preprocess_groupclause(), recomputeNamespacePath(), RelationGetIndexList(), RelationGetStatExtList(), remove_rel_from_query(), reorder_grouping_sets(), roles_is_member_of(), select_active_windows(), select_outer_pathkeys_for_merge(), set_joinrel_partition_key_exprs(), set_using_names(), SetReindexPending(), simplify_and_arguments(), simplify_or_arguments(), sort_inner_and_outer(), standard_qp_callback(), transformPLAssignStmt(), and transformWithClause().

◆ list_copy_deep()

pg_nodiscard List* list_copy_deep ( const List oldlist)

Definition at line 1638 of file list.c.

1639 {
1640  List *newlist;
1641 
1642  if (oldlist == NIL)
1643  return NIL;
1644 
1645  /* This is only sensible for pointer Lists */
1646  Assert(IsA(oldlist, List));
1647 
1648  newlist = new_list(oldlist->type, oldlist->length);
1649  for (int i = 0; i < newlist->length; i++)
1650  lfirst(&newlist->elements[i]) =
1651  copyObjectImpl(lfirst(&oldlist->elements[i]));
1652 
1653  check_list_invariants(newlist);
1654  return newlist;
1655 }
void * copyObjectImpl(const void *from)
Definition: copyfuncs.c:177
#define IsA(nodeptr, _type_)
Definition: nodes.h:179

References Assert(), check_list_invariants, copyObjectImpl(), List::elements, i, IsA, List::length, lfirst, new_list(), NIL, and List::type.

Referenced by copyObjectImpl().

◆ list_copy_head()

pg_nodiscard List* list_copy_head ( const List oldlist,
int  len 
)

Definition at line 1592 of file list.c.

1593 {
1594  List *newlist;
1595 
1596  if (oldlist == NIL || len <= 0)
1597  return NIL;
1598 
1599  len = Min(oldlist->length, len);
1600 
1601  newlist = new_list(oldlist->type, len);
1602  memcpy(newlist->elements, oldlist->elements, len * sizeof(ListCell));
1603 
1604  check_list_invariants(newlist);
1605  return newlist;
1606 }
#define Min(x, y)
Definition: c.h:993
const void size_t len

References check_list_invariants, List::elements, len, List::length, Min, new_list(), NIL, and List::type.

Referenced by accumulate_append_subpath(), build_index_paths(), create_append_plan(), create_merge_append_plan(), does_not_exist_skipping(), expand_indexqual_rowcompare(), get_object_address_attrdef(), get_object_address_attribute(), get_object_address_opf_member(), get_object_address_relobject(), get_useful_pathkeys_for_relation(), owningrel_does_not_exist_skipping(), process_owned_by(), select_outer_pathkeys_for_merge(), and truncate_useless_pathkeys().

◆ list_copy_tail()

pg_nodiscard List* list_copy_tail ( const List oldlist,
int  nskip 
)

Definition at line 1612 of file list.c.

1613 {
1614  List *newlist;
1615 
1616  if (nskip < 0)
1617  nskip = 0; /* would it be better to elog? */
1618 
1619  if (oldlist == NIL || nskip >= oldlist->length)
1620  return NIL;
1621 
1622  newlist = new_list(oldlist->type, oldlist->length - nskip);
1623  memcpy(newlist->elements, &oldlist->elements[nskip],
1624  newlist->length * sizeof(ListCell));
1625 
1626  check_list_invariants(newlist);
1627  return newlist;
1628 }

References check_list_invariants, List::elements, List::length, new_list(), NIL, and List::type.

Referenced by accumulate_append_subpath(), addRangeTableEntryForJoin(), addRangeTableEntryForTableFunc(), does_not_exist_skipping(), expandRTE(), get_name_for_var_field(), get_object_address_opcf(), ParseFuncOrColumn(), push_ancestor_plan(), and transformAggregateCall().

◆ list_deduplicate_oid()

void list_deduplicate_oid ( List list)

Definition at line 1494 of file list.c.

1495 {
1496  int len;
1497 
1498  Assert(IsOidList(list));
1499  len = list_length(list);
1500  if (len > 1)
1501  {
1502  ListCell *elements = list->elements;
1503  int i = 0;
1504 
1505  for (int j = 1; j < len; j++)
1506  {
1507  if (elements[i].oid_value != elements[j].oid_value)
1508  elements[++i].oid_value = elements[j].oid_value;
1509  }
1510  list->length = i + 1;
1511  }
1513 }
int j
Definition: isn.c:74
Oid oid_value
Definition: pg_list.h:49

References Assert(), check_list_invariants, i, IsOidList, j, len, sort-test::list, list_length(), and ListCell::oid_value.

Referenced by GetPublicationRelations(), and heap_truncate_find_FKs().

◆ list_delete()

pg_nodiscard List* list_delete ( List list,
void *  datum 
)

Definition at line 852 of file list.c.

853 {
854  ListCell *cell;
855 
858 
859  foreach(cell, list)
860  {
861  if (equal(lfirst(cell), datum))
862  return list_delete_cell(list, cell);
863  }
864 
865  /* Didn't find a match: return the list unmodified */
866  return list;
867 }
bool equal(const void *a, const void *b)
Definition: equalfuncs.c:223
List * list_delete_cell(List *list, ListCell *cell)
Definition: list.c:840

References Assert(), check_list_invariants, equal(), IsPointerList, lfirst, sort-test::list, and list_delete_cell().

Referenced by check_publications(), postgresGetForeignPlan(), and unregister_ENR().

◆ list_delete_cell()

pg_nodiscard List* list_delete_cell ( List list,
ListCell cell 
)

Definition at line 840 of file list.c.

841 {
842  return list_delete_nth_cell(list, cell - list->elements);
843 }
List * list_delete_nth_cell(List *list, int n)
Definition: list.c:766

References sort-test::list, and list_delete_nth_cell().

Referenced by list_delete(), list_delete_int(), list_delete_oid(), list_delete_ptr(), remove_useless_joins(), and transformGenericOptions().

◆ list_delete_first()

◆ list_delete_first_n()

pg_nodiscard List* list_delete_first_n ( List list,
int  n 
)

Definition at line 982 of file list.c.

983 {
985 
986  /* No-op request? */
987  if (n <= 0)
988  return list;
989 
990  /* Delete whole list? */
991  if (n >= list_length(list))
992  {
993  list_free(list);
994  return NIL;
995  }
996 
997  /*
998  * Otherwise, we normally just collapse out the removed elements. But for
999  * debugging purposes, move the whole list contents someplace else.
1000  *
1001  * (Note that we *must* keep the contents in the same memory context.)
1002  */
1003 #ifndef DEBUG_LIST_MEMORY_USAGE
1004  memmove(&list->elements[0], &list->elements[n],
1005  (list->length - n) * sizeof(ListCell));
1006  list->length -= n;
1007 #else
1008  {
1009  ListCell *newelems;
1010  int newmaxlen = list->length - n;
1011 
1012  newelems = (ListCell *)
1014  newmaxlen * sizeof(ListCell));
1015  memcpy(newelems, &list->elements[n], newmaxlen * sizeof(ListCell));
1016  if (list->elements != list->initial_elements)
1017  pfree(list->elements);
1018  else
1019  {
1020  /*
1021  * As in enlarge_list(), clear the initial_elements[] space and/or
1022  * mark it inaccessible.
1023  */
1024 #ifdef CLOBBER_FREED_MEMORY
1025  wipe_mem(list->initial_elements,
1026  list->max_length * sizeof(ListCell));
1027 #else
1028  VALGRIND_MAKE_MEM_NOACCESS(list->initial_elements,
1029  list->max_length * sizeof(ListCell));
1030 #endif
1031  }
1032  list->elements = newelems;
1033  list->max_length = newmaxlen;
1034  list->length = newmaxlen;
1036  }
1037 #endif
1038 
1039  return list;
1040 }
void list_free(List *list)
Definition: list.c:1545
void pfree(void *pointer)
Definition: mcxt.c:1456
MemoryContext GetMemoryChunkContext(void *pointer)
Definition: mcxt.c:616
void * MemoryContextAlloc(MemoryContext context, Size size)
Definition: mcxt.c:1021
#define VALGRIND_MAKE_MEM_NOACCESS(addr, size)
Definition: memdebug.h:27
union ListCell ListCell

References check_list_invariants, GetMemoryChunkContext(), sort-test::list, list_free(), list_length(), MemoryContextAlloc(), NIL, pfree(), and VALGRIND_MAKE_MEM_NOACCESS.

Referenced by add_function_defaults(), func_get_detail(), and SyncPostCheckpoint().

◆ list_delete_int()

pg_nodiscard List* list_delete_int ( List list,
int  datum 
)

Definition at line 890 of file list.c.

891 {
892  ListCell *cell;
893 
896 
897  foreach(cell, list)
898  {
899  if (lfirst_int(cell) == datum)
900  return list_delete_cell(list, cell);
901  }
902 
903  /* Didn't find a match: return the list unmodified */
904  return list;
905 }

References Assert(), check_list_invariants, IsIntegerList, lfirst_int, sort-test::list, and list_delete_cell().

Referenced by reorder_grouping_sets().

◆ list_delete_last()

pg_nodiscard List* list_delete_last ( List list)

Definition at line 956 of file list.c.

957 {
959 
960  if (list == NIL)
961  return NIL; /* would an error be better? */
962 
963  /* list_truncate won't free list if it goes to empty, but this should */
964  if (list_length(list) <= 1)
965  {
966  list_free(list);
967  return NIL;
968  }
969 
970  return list_truncate(list, list_length(list) - 1);
971 }
List * list_truncate(List *list, int new_size)
Definition: list.c:630

References check_list_invariants, sort-test::list, list_free(), list_length(), list_truncate(), and NIL.

Referenced by agg_refill_hash_table(), CheckAttributeType(), fireRIRrules(), inline_function(), LockViewRecurse(), relation_is_updatable(), RewriteQuery(), transformMultiAssignRef(), and transformOnConflictClause().

◆ list_delete_nth_cell()

pg_nodiscard List* list_delete_nth_cell ( List list,
int  n 
)

Definition at line 766 of file list.c.

767 {
769 
770  Assert(n >= 0 && n < list->length);
771 
772  /*
773  * If we're about to delete the last node from the list, free the whole
774  * list instead and return NIL, which is the only valid representation of
775  * a zero-length list.
776  */
777  if (list->length == 1)
778  {
779  list_free(list);
780  return NIL;
781  }
782 
783  /*
784  * Otherwise, we normally just collapse out the removed element. But for
785  * debugging purposes, move the whole list contents someplace else.
786  *
787  * (Note that we *must* keep the contents in the same memory context.)
788  */
789 #ifndef DEBUG_LIST_MEMORY_USAGE
790  memmove(&list->elements[n], &list->elements[n + 1],
791  (list->length - 1 - n) * sizeof(ListCell));
792  list->length--;
793 #else
794  {
795  ListCell *newelems;
796  int newmaxlen = list->length - 1;
797 
798  newelems = (ListCell *)
800  newmaxlen * sizeof(ListCell));
801  memcpy(newelems, list->elements, n * sizeof(ListCell));
802  memcpy(&newelems[n], &list->elements[n + 1],
803  (list->length - 1 - n) * sizeof(ListCell));
804  if (list->elements != list->initial_elements)
805  pfree(list->elements);
806  else
807  {
808  /*
809  * As in enlarge_list(), clear the initial_elements[] space and/or
810  * mark it inaccessible.
811  */
812 #ifdef CLOBBER_FREED_MEMORY
813  wipe_mem(list->initial_elements,
814  list->max_length * sizeof(ListCell));
815 #else
816  VALGRIND_MAKE_MEM_NOACCESS(list->initial_elements,
817  list->max_length * sizeof(ListCell));
818 #endif
819  }
820  list->elements = newelems;
821  list->max_length = newmaxlen;
822  list->length--;
824  }
825 #endif
826 
827  return list;
828 }

References Assert(), check_list_invariants, GetMemoryChunkContext(), sort-test::list, list_free(), MemoryContextAlloc(), NIL, pfree(), and VALGRIND_MAKE_MEM_NOACCESS.

Referenced by AddRelationNotNullConstraints(), generateSerialExtraStmts(), list_delete_cell(), list_delete_first(), MergeAttributes(), process_equivalence(), reconsider_full_join_clause(), and sort_inner_and_outer().

◆ list_delete_oid()

pg_nodiscard List* list_delete_oid ( List list,
Oid  datum 
)

Definition at line 909 of file list.c.

910 {
911  ListCell *cell;
912 
915 
916  foreach(cell, list)
917  {
918  if (lfirst_oid(cell) == datum)
919  return list_delete_cell(list, cell);
920  }
921 
922  /* Didn't find a match: return the list unmodified */
923  return list;
924 }

References Assert(), check_list_invariants, IsOidList, lfirst_oid, sort-test::list, and list_delete_cell().

Referenced by RemoveReindexPending().

◆ list_delete_ptr()

pg_nodiscard List* list_delete_ptr ( List list,
void *  datum 
)

Definition at line 871 of file list.c.

872 {
873  ListCell *cell;
874 
877 
878  foreach(cell, list)
879  {
880  if (lfirst(cell) == datum)
881  return list_delete_cell(list, cell);
882  }
883 
884  /* Didn't find a match: return the list unmodified */
885  return list;
886 }

References Assert(), check_list_invariants, IsPointerList, lfirst, sort-test::list, and list_delete_cell().

Referenced by FreeExprContext(), pa_free_worker_info(), and remove_join_clause_from_rels().

◆ list_difference()

List* list_difference ( const List list1,
const List list2 
)

Definition at line 1236 of file list.c.

1237 {
1238  const ListCell *cell;
1239  List *result = NIL;
1240 
1241  Assert(IsPointerList(list1));
1242  Assert(IsPointerList(list2));
1243 
1244  if (list2 == NIL)
1245  return list_copy(list1);
1246 
1247  foreach(cell, list1)
1248  {
1249  if (!list_member(list2, lfirst(cell)))
1250  result = lappend(result, lfirst(cell));
1251  }
1252 
1253  check_list_invariants(result);
1254  return result;
1255 }

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, list_copy(), list_member(), and NIL.

Referenced by create_hashjoin_plan(), create_mergejoin_plan(), create_tidscan_plan(), infer_arbiter_indexes(), and process_duplicate_ors().

◆ list_difference_int()

List* list_difference_int ( const List list1,
const List list2 
)

Definition at line 1287 of file list.c.

1288 {
1289  const ListCell *cell;
1290  List *result = NIL;
1291 
1292  Assert(IsIntegerList(list1));
1293  Assert(IsIntegerList(list2));
1294 
1295  if (list2 == NIL)
1296  return list_copy(list1);
1297 
1298  foreach(cell, list1)
1299  {
1300  if (!list_member_int(list2, lfirst_int(cell)))
1301  result = lappend_int(result, lfirst_int(cell));
1302  }
1303 
1304  check_list_invariants(result);
1305  return result;
1306 }

References Assert(), check_list_invariants, IsIntegerList, lappend_int(), lfirst_int, list_copy(), list_member_int(), and NIL.

Referenced by reorder_grouping_sets().

◆ list_difference_oid()

List* list_difference_oid ( const List list1,
const List list2 
)

Definition at line 1312 of file list.c.

1313 {
1314  const ListCell *cell;
1315  List *result = NIL;
1316 
1317  Assert(IsOidList(list1));
1318  Assert(IsOidList(list2));
1319 
1320  if (list2 == NIL)
1321  return list_copy(list1);
1322 
1323  foreach(cell, list1)
1324  {
1325  if (!list_member_oid(list2, lfirst_oid(cell)))
1326  result = lappend_oid(result, lfirst_oid(cell));
1327  }
1328 
1329  check_list_invariants(result);
1330  return result;
1331 }

References Assert(), check_list_invariants, IsOidList, lappend_oid(), lfirst_oid, list_copy(), list_member_oid(), and NIL.

Referenced by AlterPublicationSchemas().

◆ list_difference_ptr()

List* list_difference_ptr ( const List list1,
const List list2 
)

Definition at line 1262 of file list.c.

1263 {
1264  const ListCell *cell;
1265  List *result = NIL;
1266 
1267  Assert(IsPointerList(list1));
1268  Assert(IsPointerList(list2));
1269 
1270  if (list2 == NIL)
1271  return list_copy(list1);
1272 
1273  foreach(cell, list1)
1274  {
1275  if (!list_member_ptr(list2, lfirst(cell)))
1276  result = lappend(result, lfirst(cell));
1277  }
1278 
1279  check_list_invariants(result);
1280  return result;
1281 }

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, list_copy(), list_member_ptr(), and NIL.

Referenced by create_bitmap_scan_plan(), and ExecuteTruncateGuts().

◆ list_free()

void list_free ( List list)

Definition at line 1545 of file list.c.

1546 {
1547  list_free_private(list, false);
1548 }
static void list_free_private(List *list, bool deep)
Definition: list.c:1519

References sort-test::list, and list_free_private().

Referenced by AfterTriggerSetState(), AlterIndexNamespaces(), arrayconst_cleanup_fn(), arrayexpr_cleanup_fn(), ATCheckPartitionsNotInUse(), ATExecChangeOwner(), ATExecSetTableSpace(), build_base_rel_tlists(), build_remote_returning(), BuildRelationExtStatistics(), calc_joinrel_size_estimate(), calculate_indexes_size(), calculate_toast_table_size(), check_createrole_self_grant(), check_datestyle(), check_debug_io_direct(), check_log_destination(), check_search_path(), check_temp_tablespaces(), check_wal_consistency_checking(), choose_bitmap_and(), compute_semi_anti_join_factors(), CopyFrom(), CopyMultiInsertBufferFlush(), CopyMultiInsertInfoCleanup(), CreateExtensionInternal(), CreateTriggerFiringOn(), current_schema(), current_schemas(), DefineIndex(), DefineRelation(), distribute_qual_to_rels(), do_analyze_rel(), DropSubscription(), EventTriggerDDLCommandEnd(), EventTriggerDDLCommandStart(), EventTriggerSQLDrop(), EventTriggerTableRewrite(), ExecInitPartitionInfo(), ExecInsert(), ExecOpenIndices(), ExecPendingInserts(), ExecRefreshMatView(), ExecResetTupleTable(), ExecSimpleRelationInsert(), ExecSimpleRelationUpdate(), ExecUpdateEpilogue(), extract_lateral_references(), ExtractExtensionList(), find_all_inheritors(), find_compatible_agg(), find_computable_ec_member(), find_hash_columns(), find_placeholders_in_expr(), fix_placeholder_input_needed_levels(), generate_base_implied_equalities_no_const(), generate_partitionwise_join_paths(), get_rel_sync_entry(), get_relation_info(), get_relation_statistics(), get_steps_using_prefix_recurse(), get_windowclause_startup_tuples(), GetTopMostAncestorInPublication(), heap_truncate_find_FKs(), index_concurrently_swap(), index_get_partition(), index_unchanged_by_update(), infer_arbiter_indexes(), list_delete_first_n(), list_delete_last(), list_delete_nth_cell(), llvm_release_context(), make_group_input_target(), make_partial_grouping_target(), make_sort_input_target(), make_window_input_target(), max_parallel_hazard_walker(), merge_list_bounds(), merge_range_bounds(), ObjectsInPublicationToOids(), OpenTableList(), paraminfo_get_equal_hashops(), parse_hba_auth_opt(), pg_partition_root(), plpgsql_extra_checks_check_hook(), pop_ancestor_plan(), PostmasterMain(), PrepareTempTablespaces(), preprocess_targetlist(), process_implied_equality(), ProcessGUCArray(), processState(), ProcessUtilitySlow(), qual_is_pushdown_safe(), recomputeNamespacePath(), refresh_by_match_merge(), RelationCacheInvalidate(), RelationDestroyRelation(), RelationGetIndexAttrBitmap(), RelationGetIndexList(), RelationGetPrimaryKeyIndex(), RelationGetReplicaIndex(), RelationGetStatExtList(), relationHasPrimaryKey(), remove_dbtablespaces(), reorder_grouping_sets(), reparameterize_pathlist_by_child(), roles_is_member_of(), sepgsql_dml_privileges(), simplify_and_arguments(), simplify_or_arguments(), statext_mcv_clauselist_selectivity(), stringToQualifiedNameList(), textToQualifiedNameList(), toast_open_indexes(), transformFkeyCheckAttrs(), transformFkeyGetPrimaryKey(), transformTableLikeClause(), transformValuesClause(), triggered_change_notification(), typeInheritsFrom(), vac_open_indexes(), and WaitForLockers().

◆ list_free_deep()

◆ list_head()

static ListCell* list_head ( const List l)
inlinestatic

Definition at line 128 of file pg_list.h.

129 {
130  return l ? &l->elements[0] : NULL;
131 }

References List::elements.

Referenced by analyzeCTE(), appendTypeNameToBuffer(), arrayexpr_startup_fn(), assign_hypothetical_collations(), ATAddForeignKeyConstraint(), boolexpr_startup_fn(), build_index_tlist(), buildRelationAliases(), CheckRADIUSAuth(), checkWellFormedRecursionWalker(), coerce_record_to_complex(), compare_tlist_datatypes(), ComputeIndexAttrs(), consider_groupingsets_paths(), ConstructTupleDescriptor(), cost_bitmap_and_node(), cost_bitmap_or_node(), create_ctas_nodata(), create_mergejoin_plan(), DefineView(), deparseSubscriptingRef(), deparseTruncateSql(), do_analyze_rel(), dump_getdiag(), examine_variable(), exec_stmt_raise(), ExecInitJunkFilterConversion(), expand_insert_targetlist(), expandRTE(), extract_rollup_sets(), fix_indexqual_operand(), flatten_set_variable_args(), FormIndexDatum(), FormPartitionKeyDatum(), funcname_signature_string(), gen_prune_steps_from_opexps(), generate_append_tlist(), generate_setop_grouplist(), generateClonedIndexStmt(), get_param_path_clause_serials(), get_qual_for_hash(), get_qual_for_range(), get_range_nulltest(), get_steps_using_prefix(), get_update_query_targetlist_def(), GetIndexInputType(), has_partition_attrs(), intorel_startup(), jsonb_path_query_internal(), list_startup_fn(), make_inner_pathkeys_for_merge(), makeDependencyGraphWalker(), match_index_to_operand(), NameListToQuotedString(), NameListToString(), parse_hba_line(), parse_ident_line(), perform_pruning_base_step(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), postprocess_setop_tlist(), PreCommit_Notify(), print_function_arguments(), printSubscripts(), process_startup_options(), query_is_distinct_for(), RelationBuildPartitionKey(), SearchPathMatchesCurrentEnvironment(), SendRowDescriptionMessage(), set_baserel_partition_key_exprs(), sort_inner_and_outer(), tfuncLoadRows(), tlist_matches_tupdesc(), tlist_same_collations(), tlist_same_datatypes(), transformAssignedExpr(), transformPLAssignStmt(), transformUpdateTargetList(), trim_mergeclauses_for_inner_pathkeys(), try_partitionwise_join(), and TypeNameListToString().

◆ list_insert_nth()

pg_nodiscard List* list_insert_nth ( List list,
int  pos,
void *  datum 
)

Definition at line 438 of file list.c.

439 {
440  if (list == NIL)
441  {
442  Assert(pos == 0);
443  return list_make1(datum);
444  }
446  lfirst(insert_new_cell(list, pos)) = datum;
448  return list;
449 }
static ListCell * insert_new_cell(List *list, int pos)
Definition: list.c:414
#define list_make1(x1)
Definition: pg_list.h:212

References Assert(), check_list_invariants, insert_new_cell(), IsPointerList, lfirst, sort-test::list, list_make1, and NIL.

Referenced by add_partial_path(), add_path(), and merge_clump().

◆ list_insert_nth_int()

pg_nodiscard List* list_insert_nth_int ( List list,
int  pos,
int  datum 
)

Definition at line 452 of file list.c.

453 {
454  if (list == NIL)
455  {
456  Assert(pos == 0);
457  return list_make1_int(datum);
458  }
460  lfirst_int(insert_new_cell(list, pos)) = datum;
462  return list;
463 }
#define list_make1_int(x1)
Definition: pg_list.h:227

References Assert(), check_list_invariants, insert_new_cell(), IsIntegerList, lfirst_int, sort-test::list, list_make1_int, and NIL.

◆ list_insert_nth_oid()

pg_nodiscard List* list_insert_nth_oid ( List list,
int  pos,
Oid  datum 
)

Definition at line 466 of file list.c.

467 {
468  if (list == NIL)
469  {
470  Assert(pos == 0);
471  return list_make1_oid(datum);
472  }
474  lfirst_oid(insert_new_cell(list, pos)) = datum;
476  return list;
477 }
#define list_make1_oid(x1)
Definition: pg_list.h:242

References Assert(), check_list_invariants, insert_new_cell(), IsOidList, lfirst_oid, sort-test::list, list_make1_oid, and NIL.

◆ list_int_cmp()

int list_int_cmp ( const ListCell p1,
const ListCell p2 
)

Definition at line 1690 of file list.c.

1691 {
1692  int v1 = lfirst_int(p1);
1693  int v2 = lfirst_int(p2);
1694 
1695  if (v1 < v2)
1696  return -1;
1697  if (v1 > v2)
1698  return 1;
1699  return 0;
1700 }

References lfirst_int, and p2.

Referenced by expand_grouping_sets().

◆ list_intersection()

List* list_intersection ( const List list1,
const List list2 
)

Definition at line 1173 of file list.c.

1174 {
1175  List *result;
1176  const ListCell *cell;
1177 
1178  if (list1 == NIL || list2 == NIL)
1179  return NIL;
1180 
1181  Assert(IsPointerList(list1));
1182  Assert(IsPointerList(list2));
1183 
1184  result = NIL;
1185  foreach(cell, list1)
1186  {
1187  if (list_member(list2, lfirst(cell)))
1188  result = lappend(result, lfirst(cell));
1189  }
1190 
1191  check_list_invariants(result);
1192  return result;
1193 }

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, list_member(), and NIL.

◆ list_intersection_int()

List* list_intersection_int ( const List list1,
const List list2 
)

Definition at line 1199 of file list.c.

1200 {
1201  List *result;
1202  const ListCell *cell;
1203 
1204  if (list1 == NIL || list2 == NIL)
1205  return NIL;
1206 
1207  Assert(IsIntegerList(list1));
1208  Assert(IsIntegerList(list2));
1209 
1210  result = NIL;
1211  foreach(cell, list1)
1212  {
1213  if (list_member_int(list2, lfirst_int(cell)))
1214  result = lappend_int(result, lfirst_int(cell));
1215  }
1216 
1217  check_list_invariants(result);
1218  return result;
1219 }

References Assert(), check_list_invariants, IsIntegerList, lappend_int(), lfirst_int, list_member_int(), and NIL.

Referenced by parseCheckAggregates().

◆ list_last_cell()

static ListCell* list_last_cell ( const List list)
inlinestatic

Definition at line 288 of file pg_list.h.

289 {
290  Assert(list != NIL);
291  return &list->elements[list->length - 1];
292 }

References Assert(), sort-test::list, and NIL.

◆ list_length()

static int list_length ( const List l)
inlinestatic

Definition at line 152 of file pg_list.h.

153 {
154  return l ? l->length : 0;
155 }

References List::length.

Referenced by _outForeignKeyOptInfo(), _SPI_execute_plan(), acquire_inherited_sample_rows(), add_child_join_rel_equivalences(), add_child_rel_equivalences(), add_column_to_pathtarget(), add_function_defaults(), add_paths_to_append_rel(), add_paths_with_pathkeys_for_rel(), add_row_identity_var(), add_security_quals(), add_sp_item_to_pathtarget(), add_to_flat_tlist(), add_with_check_options(), AddEventToPendingNotifies(), addRangeTableEntry(), addRangeTableEntryForCTE(), addRangeTableEntryForENR(), addRangeTableEntryForFunction(), addRangeTableEntryForJoin(), addRangeTableEntryForRelation(), addRangeTableEntryForSubquery(), addRangeTableEntryForTableFunc(), addRangeTableEntryForValues(), AddRelationNewConstraints(), AddRelationNotNullConstraints(), AddRoleMems(), addRTEPermissionInfo(), adjust_appendrel_attrs_mutator(), adjust_inherited_attnums(), adjust_paths_for_srfs(), AlterDatabase(), AlterSubscription_refresh(), analyzeCTETargetList(), apply_tlist_labeling(), ApplyRetrieveRule(), array_subscript_transform(), assign_hypothetical_collations(), assign_ordered_set_collations(), assign_param_for_placeholdervar(), assign_param_for_var(), assign_special_exec_param(), ATAddCheckNNConstraint(), ATAddForeignKeyConstraint(), ATExecAddColumn(), ATExecAlterColumnType(), AttachPartitionEnsureIndexes(), basebackup_progress_wait_wal_archive(), bbsink_end_backup(), bbsink_progress_begin_backup(), bbsink_progress_end_archive(), BeginCopyFrom(), BeginCopyTo(), btvalidate(), build_expr_data(), build_index_paths(), build_local_reloptions(), build_merged_partition_bounds(), build_pertrans_for_aggref(), build_remote_returning(), build_simple_rel(), build_subplan(), build_tlist_index(), build_tlist_index_other_vars(), BuildDescForRelation(), BuildDescFromLists(), buildNSItemFromLists(), buildNSItemFromTupleDesc(), buildRelationAliases(), BuildRelationExtStatistics(), cached_plan_cost(), can_minmax_aggs(), check_and_push_window_quals(), check_hashjoinable(), check_memoizable(), check_mergejoinable(), check_publications(), check_publications_origin(), check_selective_binary_conversion(), check_sql_fn_retval(), check_temp_tablespaces(), check_ungrouped_columns_walker(), CheckIndexCompatible(), CheckRADIUSAuth(), choose_best_statistics(), choose_bitmap_and(), choose_hashed_setop(), ChoosePortalStrategy(), classify_index_clause_usage(), clause_is_strict_for(), clauselist_selectivity_ext(), cmp_list_len_asc(), coerce_fn_result_column(), CombineRangeTables(), common_prefix_cmp(), commute_restrictinfo(), CommuteOpExpr(), compute_partition_bounds(), compute_semijoin_info(), ComputeIndexAttrs(), connect_pg_server(), consider_groupingsets_paths(), consider_index_join_clauses(), consider_index_join_outer_rels(), conversion_error_callback(), convert_ANY_sublink_to_join(), convert_EXISTS_sublink_to_join(), convert_requires_to_datum(), convert_subquery_pathkeys(), convert_testexpr_mutator(), cookConstraint(), copy_pathtarget(), CopyFrom(), CopyMultiInsertInfoFlush(), CopyOneRowTo(), CopyReadAttributesCSV(), CopyReadAttributesText(), cost_agg(), cost_incremental_sort(), cost_windowagg(), count_rowexpr_columns(), create_agg_path(), create_agg_plan(), create_append_path(), create_append_plan(), create_bitmap_subplan(), create_ctescan_plan(), create_degenerate_grouping_paths(), create_final_distinct_paths(), create_foreign_modify(), create_group_path(), create_group_plan(), create_groupingsets_path(), create_groupingsets_plan(), create_hashjoin_plan(), create_indexscan_plan(), create_limit_plan(), create_memoize_plan(), create_merge_append_path(), create_merge_append_plan(), create_mergejoin_plan(), create_modifytable_path(), create_one_window_path(), create_ordered_paths(), create_partial_distinct_paths(), create_setop_path(), create_tidscan_plan(), create_unique_path(), create_unique_plan(), create_windowagg_plan(), CreateFunction(), CreatePartitionPruneState(), CreateStatistics(), CreateTriggerFiringOn(), current_schemas(), currtid_for_view(), deconstruct_recurse(), DeconstructQualifiedName(), DefineAggregate(), DefineCollation(), DefineDomain(), DefineIndex(), DefineQueryRewrite(), DefineRelation(), DefineVirtualRelation(), DelRoleMems(), deparse_context_for_plan_tree(), deparseDistinctExpr(), deparseOpExpr(), deparseRangeTblRef(), deparseScalarArrayOpExpr(), dependencies_clauselist_selectivity(), dependency_is_compatible_clause(), dependency_is_compatible_expression(), do_analyze_rel(), DoCopyTo(), does_not_exist_skipping(), eclass_useful_for_merging(), EnumValuesCreate(), equalRSDesc(), estimate_array_length(), estimate_hashagg_tablesize(), estimate_multivariate_ndistinct(), estimate_path_cost_size(), EstimateReindexStateSpace(), eval_const_expressions_mutator(), EvalPlanQualBegin(), EvalPlanQualStart(), EvaluateParams(), examine_opclause_args(), examine_simple_variable(), exec_eval_using_params(), exec_parse_message(), exec_save_simple_expr(), exec_simple_check_plan(), exec_simple_query(), ExecBuildAggTrans(), ExecBuildParamSetEqual(), ExecBuildUpdateProjection(), ExecCheckPermissions(), ExecCreateTableAs(), ExecEvalXmlExpr(), ExecHashTableCreate(), ExecIndexBuildScanKeys(), ExecInitAgg(), ExecInitAppend(), ExecInitBitmapAnd(), ExecInitBitmapOr(), ExecInitExprRec(), ExecInitFunc(), ExecInitFunctionScan(), ExecInitIndexScan(), ExecInitMergeAppend(), ExecInitMergeJoin(), ExecInitModifyTable(), ExecInitPartitionInfo(), ExecInitProjectSet(), ExecInitRangeTable(), ExecInitSubPlan(), ExecInitSubscriptingRef(), ExecInitValuesScan(), ExecInitWindowAgg(), ExecMakeTableFunctionResult(), ExecOpenIndices(), ExecRefreshMatView(), ExecScanSubPlan(), ExecSecLabelStmt(), ExecSupportsMarkRestore(), ExecTargetListLength(), ExecTypeFromExprList(), execute_extension_script(), ExecuteCallStmt(), ExecuteQuery(), ExecuteTruncateGuts(), expand_function_arguments(), expand_grouping_sets(), expand_groupingset_node(), expand_indexqual_rowcompare(), expand_inherited_rtentry(), expand_single_inheritance_child(), ExpandColumnRefStar(), ExpandIndirectionStar(), expandRecordVariable(), expandRTE(), expandTupleDesc(), ExplainCustomChildren(), ExplainNode(), ExplainOneUtility(), ExplainPrintTriggers(), ExplainTargetRel(), ExportSnapshot(), exprIsLengthCoercion(), extract_grouping_collations(), extract_grouping_cols(), extract_grouping_ops(), extract_jsp_path_expr(), extract_rollup_sets(), filter_list_to_array(), final_cost_mergejoin(), finalize_plan(), find_all_inheritors(), find_duplicate_ors(), find_expr_references_walker(), find_install_path(), find_join_rel(), find_minmax_agg_replacement_param(), find_modifytable_subplan(), findTargetlistEntrySQL92(), fireRIRrules(), fix_indexqual_clause(), fix_param_node(), flatten_join_alias_vars_mutator(), flatten_set_variable_args(), flatten_simple_union_all(), for_both_cell_setup(), for_each_cell_setup(), foreign_expr_walker(), foreign_grouping_ok(), foreign_join_ok(), func_get_detail(), funcname_signature_string(), gather_grouping_paths(), gen_partprune_steps_internal(), gen_prune_step_op(), generate_append_tlist(), generate_base_implied_equalities(), generate_base_implied_equalities_const(), generate_implied_equalities_for_column(), generate_join_implied_equalities(), generate_join_implied_equalities_for_ecs(), generate_mergejoin_paths(), generate_new_exec_param(), generate_nonunion_paths(), generate_orderedappend_paths(), generate_series_int4_support(), generate_series_int8_support(), generate_union_paths(), genericcostestimate(), geqo_eval(), get_agg_expr_helper(), get_aggregate_argtypes(), get_call_expr_arg_stable(), get_call_expr_argtype(), get_eclass_for_sort_expr(), get_expr_result_type(), get_foreign_key_join_selectivity(), get_from_clause_item(), get_func_expr(), get_func_sql_syntax(), get_join_variables(), get_matching_partitions(), get_memoize_path(), get_name_for_var_field(), get_number_of_groups(), get_object_address_attrdef(), get_object_address_attribute(), get_object_address_defacl(), get_object_address_opf_member(), get_object_address_relobject(), get_oper_expr(), get_partition_qual_relid(), get_qual_for_range(), get_query_def(), get_rel_sync_entry(), get_relation_foreign_keys(), get_restriction_variable(), get_rightop(), get_rtable_name(), get_rte_attribute_is_dropped(), get_rte_attribute_name(), get_rule_expr(), get_rule_groupingset(), get_simple_binary_op_name(), get_simple_values_rte(), get_singleton_append_subpath(), get_steps_using_prefix_recurse(), get_update_query_targetlist_def(), get_useful_pathkeys_for_relation(), get_variable(), get_view_query(), get_windowfunc_expr_helper(), getIdentitySequence(), getInsertSelectQuery(), GetRTEByRangeTablePosn(), getRTEPermissionInfo(), getTokenTypes(), gimme_tree(), gincostestimate(), gistbufferinginserttuples(), gistfinishsplit(), gistRelocateBuildBuffersOnSplit(), grouping_planner(), has_relevant_eclass_joinclause(), hash_ok_operator(), hashvalidate(), have_relevant_eclass_joinclause(), have_relevant_joinclause(), hstore_subscript_transform(), identify_join_columns(), init_sexpr(), initial_cost_hashjoin(), initialize_peragg(), InitPartitionPruneContext(), inline_function(), inline_set_returning_function(), interpret_AS_clause(), interpret_function_parameter_list(), interval_support(), InvalidatePublicationRels(), is_safe_append_member(), is_simple_values(), is_strict_saop(), IsBinaryTidClause(), IsTidEqualAnyClause(), IsTransactionExitStmtList(), IsTransactionStmtList(), JsonValueListLength(), like_regex_support(), list_deduplicate_oid(), list_delete_first_n(), list_delete_last(), list_sort(), list_truncate(), lookup_var_attr_stats(), LookupFuncWithArgs(), LookupOperWithArgs(), LookupTypeNameExtended(), make_ands_explicit(), make_build_data(), make_callstmt_target(), make_jsp_expr_node_args(), make_memoize(), make_modifytable(), make_partition_op_expr(), make_partition_pruneinfo(), make_path_rowexpr(), make_pathtarget_from_tlist(), make_recursive_union(), make_rel_from_joinlist(), make_restrictinfo_internal(), make_row_comparison_op(), make_row_distinct_op(), make_ruledef(), make_setop(), make_setop_translation_list(), make_sort_from_groupcols(), make_sort_from_sortclauses(), make_sort_input_target(), make_union_unique(), make_unique_from_pathkeys(), make_unique_from_sortclauses(), make_viewdef(), MakeConfigurationMapping(), makeRangeVarFromNameList(), makeWholeRowVar(), markNullableIfNeeded(), markRelsAsNulledBy(), markRTEForSelectPriv(), markTargetListOrigin(), match_clause_to_partition_key(), match_foreign_keys_to_quals(), match_opclause_to_indexcol(), MatchNamedCall(), mbms_add_member(), mbms_add_members(), mbms_int_members(), mbms_is_member(), mcv_get_match_bitmap(), merge_clump(), merge_list_bounds(), merge_range_bounds(), MergeAttributes(), MJExamineQuals(), network_subset_support(), NextCopyFrom(), NextCopyFromRawFields(), numeric_support(), operator_predicate_proof(), optimize_window_clauses(), order_qual_clauses(), ordered_set_startup(), owningrel_does_not_exist_skipping(), pa_free_worker(), pa_stream_abort(), paraminfo_get_equal_hashops(), parse_hba_line(), parse_tsquery(), parseCheckAggregates(), ParseFuncOrColumn(), parseLocalRelOptions(), pathkeys_count_contained_in(), perform_pruning_base_step(), PerformCursorOpen(), pg_get_function_arg_default(), pg_get_object_address(), pg_get_publication_tables(), pg_get_statisticsobj_worker(), pg_listening_channels(), pg_partition_ancestors(), pg_partition_tree(), plpgsql_parse_cwordrowtype(), plpgsql_parse_cwordtype(), PLy_abort_open_subtransactions(), PLy_procedure_call(), policy_role_list_to_array(), postgresBeginDirectModify(), postgresBeginForeignScan(), postgresExplainForeignScan(), postgresGetForeignModifyBatchSize(), predicate_classify(), predicate_implied_by(), predicate_implied_by_simple_clause(), predicate_refuted_by(), prepare_sort_from_pathkeys(), PrepareQuery(), PrepareTempTablespaces(), preprocess_aggref(), preprocess_groupclause(), preprocess_grouping_sets(), preprocess_minmax_aggregates(), preprocess_targetlist(), print_expr(), print_function_arguments(), ProcedureCreate(), process_duplicate_ors(), process_owned_by(), processIndirection(), processTypesSpec(), ProcessUtilitySlow(), prune_append_rel_partitions(), publication_translate_columns(), publicationListToArray(), pull_up_constant_function(), pull_up_simple_subquery(), pull_up_simple_union_all(), pull_up_simple_values(), pull_up_sublinks_qual_recurse(), pullup_replace_vars_callback(), query_is_distinct_for(), query_planner(), rebuild_fdw_scan_tlist(), ReceiveCopyBegin(), recheck_cast_function_args(), reconsider_full_join_clause(), reduce_outer_joins_pass2(), refresh_matview_datafill(), regnamespacein(), regrolein(), relation_excluded_by_constraints(), relation_has_unique_index_for(), RelationBuildPartitionDesc(), remap_groupColIdx(), remove_dbtablespaces(), remove_useless_groupby_columns(), remove_useless_results_recurse(), RemoveRelations(), reorder_function_arguments(), reorder_grouping_sets(), replace_domain_constraint_value(), replace_empty_jointree(), replace_outer_agg(), replace_outer_grouping(), resolve_column_ref(), resolve_special_varno(), RewriteQuery(), rewriteRuleAction(), rewriteSearchAndCycle(), rewriteTargetView(), rewriteValuesRTE(), RI_Initial_Check(), scalararraysel(), SearchCatCacheList(), select_active_windows(), select_outer_pathkeys_for_merge(), selectColorTrigrams(), SendCopyBegin(), SendNegotiateProtocolVersion(), SerializeReindexState(), set_append_references(), set_cte_pathlist(), set_deparse_context_plan(), set_deparse_for_query(), set_join_column_names(), set_mergeappend_references(), set_plan_references(), set_plan_refs(), set_relation_column_names(), set_rtable_names(), set_simple_column_names(), set_subquery_pathlist(), set_using_names(), set_values_size_estimates(), setup_simple_rel_arrays(), show_grouping_sets(), show_incremental_sort_group_info(), show_memoize_info(), show_plan_tlist(), show_sort_group_keys(), show_tablesample(), show_upper_qual(), simplify_boolean_equality(), sort_inner_and_outer(), SPI_cursor_open_internal(), SPI_is_cursor_plan(), SPI_plan_get_cached_plan(), split_pathtarget_walker(), sql_fn_post_column_ref(), SS_make_initplan_from_plan(), SS_process_ctes(), standard_ExecutorStart(), standard_join_search(), standard_planner(), standard_qp_callback(), statext_is_compatible_clause_internal(), statext_mcv_clauselist_selectivity(), StoreRelCheck(), strlist_to_textarray(), subquery_planner(), tablesample_init(), TemporalSimplify(), test_opexpr_is_hashable(), test_predtest(), TidExprListCreate(), TidListEval(), tlist_same_exprs(), toast_open_indexes(), tokenize_auth_file(), transform_MERGE_to_join(), transformAExprBetween(), transformAExprIn(), transformAExprOp(), transformAggregateCall(), transformCallStmt(), transformColumnDefinition(), transformColumnRef(), transformFromClauseItem(), transformGroupingFunc(), transformGroupingSet(), transformIndexConstraint(), transformIndexStmt(), transformInsertRow(), transformInsertStmt(), transformJoinUsingClause(), transformMergeStmt(), transformMultiAssignRef(), transformPartitionBound(), transformPartitionRangeBounds(), transformPartitionSpec(), transformPLAssignStmt(), transformRangeFunction(), transformRangeTableFunc(), transformRangeTableSample(), transformRowExpr(), transformRuleStmt(), transformSetOperationStmt(), transformSetOperationTree(), transformStatsStmt(), transformSubLink(), transformValuesClause(), transformWholeRowRef(), transformWindowDefinitions(), transformWindowFuncCall(), transformWithClause(), trivial_subqueryscan(), truncate_useless_pathkeys(), tsvector_update_trigger(), TypeGetTupleDesc(), typenameTypeMod(), typeStringToTypeName(), unify_hypothetical_args(), vac_open_indexes(), vacuum(), ValuesNext(), varbit_support(), varchar_support(), view_cols_are_auto_updatable(), and view_query_is_auto_updatable().

◆ list_make1_impl()

List* list_make1_impl ( NodeTag  t,
ListCell  datum1 
)

Definition at line 235 of file list.c.

236 {
237  List *list = new_list(t, 1);
238 
239  list->elements[0] = datum1;
241  return list;
242 }

References check_list_invariants, sort-test::list, and new_list().

◆ list_make2_impl()

List* list_make2_impl ( NodeTag  t,
ListCell  datum1,
ListCell  datum2 
)

Definition at line 245 of file list.c.

246 {
247  List *list = new_list(t, 2);
248 
249  list->elements[0] = datum1;
250  list->elements[1] = datum2;
252  return list;
253 }

References check_list_invariants, sort-test::list, and new_list().

◆ list_make3_impl()

List* list_make3_impl ( NodeTag  t,
ListCell  datum1,
ListCell  datum2,
ListCell  datum3 
)

Definition at line 256 of file list.c.

258 {
259  List *list = new_list(t, 3);
260 
261  list->elements[0] = datum1;
262  list->elements[1] = datum2;
263  list->elements[2] = datum3;
265  return list;
266 }

References check_list_invariants, sort-test::list, and new_list().

◆ list_make4_impl()

List* list_make4_impl ( NodeTag  t,
ListCell  datum1,
ListCell  datum2,
ListCell  datum3,
ListCell  datum4 
)

Definition at line 269 of file list.c.

271 {
272  List *list = new_list(t, 4);
273 
274  list->elements[0] = datum1;
275  list->elements[1] = datum2;
276  list->elements[2] = datum3;
277  list->elements[3] = datum4;
279  return list;
280 }

References check_list_invariants, sort-test::list, and new_list().

◆ list_make5_impl()

List* list_make5_impl ( NodeTag  t,
ListCell  datum1,
ListCell  datum2,
ListCell  datum3,
ListCell  datum4,
ListCell  datum5 
)

Definition at line 283 of file list.c.

285 {
286  List *list = new_list(t, 5);
287 
288  list->elements[0] = datum1;
289  list->elements[1] = datum2;
290  list->elements[2] = datum3;
291  list->elements[3] = datum4;
292  list->elements[4] = datum5;
294  return list;
295 }

References check_list_invariants, sort-test::list, and new_list().

◆ list_member()

◆ list_member_int()

◆ list_member_oid()

bool list_member_oid ( const List list,
Oid  datum 
)

Definition at line 721 of file list.c.

722 {
723  const ListCell *cell;
724 
727 
728  foreach(cell, list)
729  {
730  if (lfirst_oid(cell) == datum)
731  return true;
732  }
733 
734  return false;
735 }

References Assert(), check_list_invariants, IsOidList, lfirst_oid, and sort-test::list.

Referenced by AfterTriggerSaveEvent(), AlterTableMoveAll(), apply_handle_truncate(), ATExecAddInherit(), ATExecAttachPartition(), ATExecSetNotNull(), BeginCopyTo(), CheckAttributeType(), CloneFkReferenced(), CloneFkReferencing(), CollationIsVisible(), ConversionIsVisible(), DefineRelation(), dropconstraint_internal(), ec_member_matches_indexcol(), ExecAlterObjectDependsStmt(), ExecCheckIndexConstraints(), ExecInitPartitionInfo(), ExecInsertIndexTuples(), ExecuteTruncate(), fireRIRrules(), FunctionIsVisible(), get_rel_sync_entry(), get_transform_fromsql(), get_transform_tosql(), GetTopMostAncestorInPublication(), has_privs_of_role(), hashvalidate(), have_partkey_equi_join(), heap_truncate_check_FKs(), heap_truncate_find_FKs(), inline_function(), is_member_of_role(), is_member_of_role_nosuper(), list_append_unique_oid(), list_concat_unique_oid(), list_difference_oid(), list_union_oid(), LockViewRecurse_walker(), lookup_shippable(), member_can_set_role(), OpclassIsVisible(), OpenTableList(), OperatorIsVisible(), OpfamilyIsVisible(), PlanCacheRelCallback(), recomputeNamespacePath(), ReindexIsProcessingIndex(), relation_has_unique_index_for(), relation_is_updatable(), RelationIsVisible(), RememberConstraintForRebuilding(), RememberIndexForRebuilding(), RememberStatisticsForRebuilding(), StatisticsObjIsVisible(), TSConfigIsVisible(), TSDictionaryIsVisible(), TSParserIsVisible(), TSTemplateIsVisible(), typeInheritsFrom(), and TypeIsVisible().

◆ list_member_ptr()

bool list_member_ptr ( const List list,
const void *  datum 
)

◆ list_member_xid()

bool list_member_xid ( const List list,
TransactionId  datum 
)

Definition at line 741 of file list.c.

742 {
743  const ListCell *cell;
744 
747 
748  foreach(cell, list)
749  {
750  if (lfirst_xid(cell) == datum)
751  return true;
752  }
753 
754  return false;
755 }
#define lfirst_xid(lc)
Definition: pg_list.h:175

References Assert(), check_list_invariants, IsXidList, lfirst_xid, and sort-test::list.

Referenced by get_schema_sent_in_streamed_txn(), and pa_start_subtrans().

◆ list_nth()

static void* list_nth ( const List list,
int  n 
)
inlinestatic

Definition at line 299 of file pg_list.h.

300 {
301  Assert(IsA(list, List));
302  return lfirst(list_nth_cell(list, n));
303 }
static ListCell * list_nth_cell(const List *list, int n)
Definition: pg_list.h:277

References Assert(), IsA, lfirst, sort-test::list, and list_nth_cell().

Referenced by add_child_join_rel_equivalences(), add_child_rel_equivalences(), AddRelationNotNullConstraints(), adjust_appendrel_attrs_mutator(), adjust_inherited_attnums(), apply_handle_update(), ATAddForeignKeyConstraint(), bbsink_copystream_begin_archive(), build_joinrel_tlist(), check_and_push_window_quals(), check_new_partition_bound(), consider_index_join_outer_rels(), conversion_error_callback(), convert_subquery_pathkeys(), convert_testexpr_mutator(), dependencies_clauselist_selectivity(), errorMissingColumn(), eval_const_expressions_mutator(), exec_rt_fetch(), ExecInitAppend(), ExecInitCteScan(), ExecInitMemoize(), ExecInitMergeAppend(), ExecInitModifyTable(), ExecInitSubPlan(), ExecInitUpdateProjection(), expand_indexqual_rowcompare(), expand_single_inheritance_child(), expandRecordVariable(), expandRTE(), ExplainTargetRel(), finalize_plan(), find_expr_references_walker(), find_hash_columns(), find_modifytable_subplan(), find_window_run_conditions(), fix_param_node(), flatten_join_alias_vars_mutator(), generate_implied_equalities_for_column(), generate_join_implied_equalities(), get_call_expr_arg_stable(), get_call_expr_argtype(), get_name_for_var_field(), get_rtable_name(), get_rte_attribute_is_dropped(), get_rte_attribute_name(), get_tupdesc_for_join_scan_tuples(), get_variable(), gimme_tree(), gistfinishsplit(), has_dangerous_join_using(), has_relevant_eclass_joinclause(), have_relevant_eclass_joinclause(), infer_collation_opclass_match(), interpret_AS_clause(), make_callstmt_target(), make_path_rowexpr(), markNullableIfNeeded(), match_eclasses_to_foreign_key_col(), merge_clump(), MergeAttributes(), pg_get_function_arg_default(), pg_get_publication_tables(), pg_listening_channels(), postgresBeginDirectModify(), postgresBeginForeignModify(), postgresBeginForeignScan(), postgresExplainDirectModify(), postgresExplainForeignModify(), postgresExplainForeignScan(), postgresGetForeignPlan(), postgresPlanDirectModify(), postgresPlanForeignModify(), reorder_grouping_sets(), resolve_special_varno(), rewriteSearchAndCycle(), set_cte_pathlist(), set_deparse_plan(), set_join_column_names(), set_relation_column_names(), set_using_names(), show_modifytable_info(), substitute_actual_parameters_mutator(), substitute_actual_srf_parameters_mutator(), SyncPostCheckpoint(), transformInsertRow(), transformMultiAssignRef(), transformPartitionRangeBounds(), transformSetOperationStmt(), TypeGetTupleDesc(), validateFkOnDeleteSetColumns(), WinGetFuncArgCurrent(), WinGetFuncArgInFrame(), and WinGetFuncArgInPartition().

◆ list_nth_cell()

static ListCell* list_nth_cell ( const List list,
int  n 
)
inlinestatic

◆ list_nth_int()

static int list_nth_int ( const List list,
int  n 
)
inlinestatic

◆ list_nth_oid()

◆ list_oid_cmp()

int list_oid_cmp ( const ListCell p1,
const ListCell p2 
)

Definition at line 1706 of file list.c.

1707 {
1708  Oid v1 = lfirst_oid(p1);
1709  Oid v2 = lfirst_oid(p2);
1710 
1711  if (v1 < v2)
1712  return -1;
1713  if (v1 > v2)
1714  return 1;
1715  return 0;
1716 }
unsigned int Oid
Definition: postgres_ext.h:31

References lfirst_oid, and p2.

Referenced by GetPublicationRelations(), heap_truncate_find_FKs(), RelationGetIndexList(), and RelationGetStatExtList().

◆ list_second_cell()

static ListCell* list_second_cell ( const List l)
inlinestatic

Definition at line 142 of file pg_list.h.

143 {
144  if (l && l->length >= 2)
145  return &l->elements[1];
146  else
147  return NULL;
148 }

References List::elements, and List::length.

Referenced by JsonValueListInitIterator(), and select_common_type().

◆ list_sort()

void list_sort ( List list,
list_sort_comparator  cmp 
)

Definition at line 1673 of file list.c.

1674 {
1675  typedef int (*qsort_comparator) (const void *a, const void *b);
1676  int len;
1677 
1679 
1680  /* Nothing to do if there's less than two elements */
1681  len = list_length(list);
1682  if (len > 1)
1683  qsort(list->elements, len, sizeof(ListCell), (qsort_comparator) cmp);
1684 }
int b
Definition: isn.c:70
int a
Definition: isn.c:69
#define qsort(a, b, c, d)
Definition: port.h:445
static int cmp(const chr *x, const chr *y, size_t len)
Definition: regc_locale.c:743

References a, b, check_list_invariants, cmp(), len, sort-test::list, list_length(), and qsort.

Referenced by AddRelationNotNullConstraints(), create_append_path(), expand_grouping_sets(), GetPublicationRelations(), heap_truncate_find_FKs(), perform_base_backup(), RelationGetIndexList(), RelationGetStatExtList(), sort_policies_by_name(), and UpdateLogicalMappings().

◆ list_tail()

static ListCell* list_tail ( const List l)
inlinestatic

Definition at line 135 of file pg_list.h.

136 {
137  return l ? &l->elements[l->length - 1] : NULL;
138 }

References List::elements, and List::length.

◆ list_truncate()

pg_nodiscard List* list_truncate ( List list,
int  new_size 
)

Definition at line 630 of file list.c.

631 {
632  if (new_size <= 0)
633  return NIL; /* truncate to zero length */
634 
635  /* If asked to effectively extend the list, do nothing */
636  if (new_size < list_length(list))
637  list->length = new_size;
638 
639  /*
640  * Note: unlike the individual-list-cell deletion functions, we don't move
641  * the list cells to new storage, even in DEBUG_LIST_MEMORY_USAGE mode.
642  * This is because none of them can move in this operation, so just like
643  * in the old cons-cell-based implementation, this function doesn't
644  * invalidate any pointers to cells of the list. This is also the reason
645  * for not wiping the memory of the deleted cells: the old code didn't
646  * free them either. Perhaps later we'll tighten this up.
647  */
648 
649  return list;
650 }

References sort-test::list, list_length(), and NIL.

Referenced by choose_bitmap_and(), expand_indexqual_rowcompare(), ExpandIndirectionStar(), expandRTE(), generate_mergejoin_paths(), geqo_eval(), list_delete_last(), mbms_int_members(), pa_stream_abort(), ParseFuncOrColumn(), transformAggregateCall(), transformFromClauseItem(), transformSetOperationStmt(), and transformWholeRowRef().

◆ list_union()

List* list_union ( const List list1,
const List list2 
)

Definition at line 1065 of file list.c.

1066 {
1067  List *result;
1068  const ListCell *cell;
1069 
1070  Assert(IsPointerList(list1));
1071  Assert(IsPointerList(list2));
1072 
1073  result = list_copy(list1);
1074  foreach(cell, list2)
1075  {
1076  if (!list_member(result, lfirst(cell)))
1077  result = lappend(result, lfirst(cell));
1078  }
1079 
1080  check_list_invariants(result);
1081  return result;
1082 }

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, list_copy(), and list_member().

Referenced by AddRelationNewConstraints(), and process_duplicate_ors().

◆ list_union_int()

List* list_union_int ( const List list1,
const List list2 
)

Definition at line 1112 of file list.c.

1113 {
1114  List *result;
1115  const ListCell *cell;
1116 
1117  Assert(IsIntegerList(list1));
1118  Assert(IsIntegerList(list2));
1119 
1120  result = list_copy(list1);
1121  foreach(cell, list2)
1122  {
1123  if (!list_member_int(result, lfirst_int(cell)))
1124  result = lappend_int(result, lfirst_int(cell));
1125  }
1126 
1127  check_list_invariants(result);
1128  return result;
1129 }

References Assert(), check_list_invariants, IsIntegerList, lappend_int(), lfirst_int, list_copy(), and list_member_int().

Referenced by expand_grouping_sets().

◆ list_union_oid()

List* list_union_oid ( const List list1,
const List list2 
)

Definition at line 1135 of file list.c.

1136 {
1137  List *result;
1138  const ListCell *cell;
1139 
1140  Assert(IsOidList(list1));
1141  Assert(IsOidList(list2));
1142 
1143  result = list_copy(list1);
1144  foreach(cell, list2)
1145  {
1146  if (!list_member_oid(result, lfirst_oid(cell)))
1147  result = lappend_oid(result, lfirst_oid(cell));
1148  }
1149 
1150  check_list_invariants(result);
1151  return result;
1152 }

References Assert(), check_list_invariants, IsOidList, lappend_oid(), lfirst_oid, list_copy(), and list_member_oid().

◆ list_union_ptr()

List* list_union_ptr ( const List list1,
const List list2 
)

Definition at line 1089 of file list.c.

1090 {
1091  List *result;
1092  const ListCell *cell;
1093 
1094  Assert(IsPointerList(list1));
1095  Assert(IsPointerList(list2));
1096 
1097  result = list_copy(list1);
1098  foreach(cell, list2)
1099  {
1100  if (!list_member_ptr(result, lfirst(cell)))
1101  result = lappend(result, lfirst(cell));
1102  }
1103 
1104  check_list_invariants(result);
1105  return result;
1106 }

References Assert(), check_list_invariants, IsPointerList, lappend(), lfirst, list_copy(), and list_member_ptr().

◆ lnext()

static ListCell* lnext ( const List l,
const ListCell c 
)
inlinestatic

Definition at line 343 of file pg_list.h.

344 {
345  Assert(c >= &l->elements[0] && c < &l->elements[l->length]);
346  c++;
347  if (c < &l->elements[l->length])
348  return (ListCell *) c;
349  else
350  return NULL;
351 }

References Assert(), List::elements, and List::length.

Referenced by _outList(), analyzeCTE(), arrayexpr_next_fn(), assign_hypothetical_collations(), asyncQueueAddEntries(), ATAddForeignKeyConstraint(), build_index_tlist(), build_subplan(), buildRelationAliases(), CheckRADIUSAuth(), coerce_record_to_complex(), compare_tlist_datatypes(), ComputeIndexAttrs(), consider_groupingsets_paths(), ConstructTupleDescriptor(), create_ctas_nodata(), create_mergejoin_plan(), create_one_window_path(), DefineView(), deparseAggref(), deparseFuncExpr(), deparseSubscriptingRef(), do_analyze_rel(), examine_variable(), exec_simple_query(), exec_stmt_raise(), ExecInitJunkFilterConversion(), ExecLockRows(), expand_insert_targetlist(), expandRTE(), expandTupleDesc(), ExplainExecuteQuery(), ExplainQuery(), extract_rollup_sets(), find_param_referent(), fix_indexqual_operand(), fmgr_sql(), FormIndexDatum(), FormPartitionKeyDatum(), funcname_signature_string(), generate_append_tlist(), generate_setop_grouplist(), generateClonedIndexStmt(), get_func_expr(), get_qual_for_hash(), get_qual_for_range(), get_range_key_properties(), get_range_nulltest(), get_rule_expr(), get_update_query_targetlist_def(), GetIndexInputType(), has_partition_attrs(), intorel_startup(), JsonValueListNext(), list_next_fn(), make_inner_pathkeys_for_merge(), match_index_to_operand(), parse_hba_line(), parse_ident_line(), perform_base_backup(), perform_pruning_base_step(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), PortalRunMulti(), postprocess_setop_tlist(), print_expr(), print_function_arguments(), print_pathkeys(), printSubscripts(), ProcedureCreate(), process_startup_options(), query_is_distinct_for(), RelationBuildPartitionKey(), SearchPathMatchesCurrentEnvironment(), SendRowDescriptionMessage(), serialize_deflist(), set_baserel_partition_key_exprs(), split_pathtarget_at_srfs(), tfuncLoadRows(), tlist_matches_tupdesc(), tlist_same_collations(), tlist_same_datatypes(), transformAssignmentIndirection(), transformUpdateTargetList(), transformWithClause(), trim_mergeclauses_for_inner_pathkeys(), and try_partitionwise_join().