Commit 6488275b authored by Bruce Momjian's avatar Bruce Momjian

In developer's FAQ, update list API, from Tom Lane.

parent 1b57f0e3
Developer's Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Sat May 5 00:09:15 EDT 2007
Last updated: Sat May 5 06:20:41 EDT 2007
Current maintainer: Bruce Momjian (bruce@momjian.us)
......@@ -698,18 +698,19 @@ typedef struct nameData
Here are some of the List manipulation commands:
lfirst(i), lfirst_int(i), lfirst_oid(i)
return the data (a point, integer and OID respectively) at list
element i.
return the data (a pointer, integer or OID respectively) of
list cell i.
lnext(i)
return the next list element after i.
return the next list cell after i.
foreach(i, list)
loop through list, assigning each list element to i. It is
important to note that i is a List *, not the data in the List
element. You need to use lfirst(i) to get at the data. Here is
a typical code snippet that loops through a List containing Var
*'s and processes each one:
loop through list, assigning each list cell to i. It is
important to note that i is a ListCell *, not the data in the
List element. You need to use lfirst(i) to get at the data.
Here is a typical code snippet that loops through a List
containing Var *'s and processes each one:
List *list;
ListCell *i;
......@@ -726,20 +727,20 @@ typedef struct nameData
if list is NIL.
lappend(list, node)
add node to the end of list. This is more expensive that lcons.
add node to the end of list.
nconc(list1, list2)
Concat list2 on to the end of list1.
list_concat(list1, list2)
Concatenate list2 on to the end of list1.
length(list)
list_length(list)
return the length of the list.
nth(i, list)
return the i'th element in list.
list_nth(list, i)
return the i'th element in list, counting from zero.
lconsi, ...
There are integer versions of these: lconsi, lappendi, etc.
Also versions for OID lists: lconso, lappendo, etc.
lcons_int, ...
There are integer versions of these: lcons_int, lappend_int,
etc. Also versions for OID lists: lcons_oid, lappend_oid, etc.
You can print nodes easily inside gdb. First, to disable output
truncation when you use the gdb print command:
......@@ -758,7 +759,7 @@ typedef struct nameData
2.4) I just added a field to a structure. What else should I do?
The structures passing around from the parser, rewrite, optimizer, and
The structures passed around in the parser, rewriter, optimizer, and
executor require quite a bit of support. Most structures have support
routines in src/backend/nodes used to create, copy, read, and output
those structures (in particular, the files copyfuncs.c and
......
......@@ -13,7 +13,7 @@
<H1>Developer's Frequently Asked Questions (FAQ) for
PostgreSQL</H1>
<P>Last updated: Sat May 5 00:09:15 EDT 2007</P>
<P>Last updated: Sat May 5 06:20:41 EDT 2007</P>
<P>Current maintainer: Bruce Momjian (<A href=
"mailto:bruce@momjian.us">bruce@momjian.us</A>)<BR>
......@@ -863,24 +863,25 @@
<DL>
<DT>lfirst(i), lfirst_int(i), lfirst_oid(i)</DT>
<DD>return the data (a point, integer and OID respectively) at
list element <I>i.</I></DD>
<DD>return the data (a pointer, integer or OID respectively) of
list cell <I>i.</I></DD>
<DT>lnext(i)</DT>
<DD>return the next list element after <I>i.</I></DD>
<DD>return the next list cell after <I>i.</I></DD>
<DT>foreach(i, list)</DT>
<DD>
loop through <I>list,</I> assigning each list element to
<I>i.</I> It is important to note that <I>i</I> is a List *,
loop through <I>list,</I> assigning each list cell to
<I>i.</I> It is important to note that <I>i</I> is a ListCell *,
not the data in the <I>List</I> element. You need to use
<I>lfirst(i)</I> to get at the data. Here is a typical code
snippet that loops through a List containing <I>Var *'s</I>
and processes each one:
<PRE>
<CODE> List *list;
<CODE>
List *list;
ListCell *i;
foreach(i, list)
......@@ -900,26 +901,26 @@
<DT>lappend(list, node)</DT>
<DD>add <I>node</I> to the end of <I>list.</I> This is more
expensive that lcons.</DD>
<DD>add <I>node</I> to the end of <I>list.</I></DD>
<DT>nconc(list1, list2)</DT>
<DT>list_concat(list1, list2)</DT>
<DD>Concat <I>list2</I> on to the end of <I>list1.</I></DD>
<DD>Concatenate <I>list2</I> on to the end of <I>list1.</I></DD>
<DT>length(list)</DT>
<DT>list_length(list)</DT>
<DD>return the length of the <I>list.</I></DD>
<DT>nth(i, list)</DT>
<DT>list_nth(list, i)</DT>
<DD>return the <I>i</I>'th element in <I>list.</I></DD>
<DD>return the <I>i</I>'th element in <I>list,</I>
counting from zero.</DD>
<DT>lconsi, ...</DT>
<DT>lcons_int, ...</DT>
<DD>There are integer versions of these: <I>lconsi,
lappendi</I>, etc. Also versions for OID lists: <I>lconso,
lappendo</I>, etc.</DD>
<DD>There are integer versions of these: <I>lcons_int,
lappend_int</I>, etc. Also versions for OID lists: <I>lcons_oid,
lappend_oid</I>, etc.</DD>
</DL>
</BLOCKQUOTE>
You can print nodes easily inside <I>gdb.</I> First, to disable
......@@ -944,7 +945,7 @@
<H3 id="item2.4">2.4) I just added a field to a structure.
What else should I do?</H3>
<P>The structures passing around from the parser, rewrite,
<P>The structures passed around in the parser, rewriter,
optimizer, and executor require quite a bit of support. Most
structures have support routines in <I>src/backend/nodes</I> used
to create, copy, read, and output those structures (in particular,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment