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)
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;
+
+ List *list;
ListCell *i;
foreach(i, list)
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:
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
<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>
<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)
<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
<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,