2010-09-20 22:08:53 +02:00
|
|
|
src/backend/nodes/README
|
2008-03-20 18:55:15 +01:00
|
|
|
|
|
|
|
Node Structures
|
|
|
|
===============
|
|
|
|
|
|
|
|
Andrew Yu (11/94)
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
------------
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
The current node structures are plain old C structures. "Inheritance" is
|
|
|
|
achieved by convention. No additional functions will be generated. Functions
|
|
|
|
that manipulate node structures reside in this directory.
|
|
|
|
|
|
|
|
|
2008-08-26 00:42:34 +02:00
|
|
|
FILES IN THIS DIRECTORY (src/backend/nodes/)
|
1996-07-09 08:22:35 +02:00
|
|
|
|
2008-08-26 00:42:34 +02:00
|
|
|
General-purpose node manipulation functions:
|
|
|
|
copyfuncs.c - copy a node tree
|
|
|
|
equalfuncs.c - compare two node trees
|
|
|
|
outfuncs.c - convert a node tree to text representation
|
|
|
|
readfuncs.c - convert text representation back to a node tree
|
|
|
|
makefuncs.c - creator functions for some common node types
|
|
|
|
nodeFuncs.c - some other general-purpose manipulation functions
|
|
|
|
|
|
|
|
Specialized manipulation functions:
|
|
|
|
bitmapset.c - Bitmapset support
|
|
|
|
list.c - generic list support
|
|
|
|
params.c - Param support
|
|
|
|
tidbitmap.c - TIDBitmap support
|
|
|
|
value.c - support for Value nodes
|
|
|
|
|
|
|
|
FILES IN src/include/nodes/
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
Node definitions:
|
|
|
|
nodes.h - define node tags (NodeTag)
|
|
|
|
primnodes.h - primitive nodes
|
|
|
|
parsenodes.h - parse tree nodes
|
|
|
|
plannodes.h - plan tree nodes
|
2008-08-26 00:42:34 +02:00
|
|
|
relation.h - planner internal nodes
|
1996-07-09 08:22:35 +02:00
|
|
|
execnodes.h - executor nodes
|
|
|
|
memnodes.h - memory nodes
|
2008-08-26 00:42:34 +02:00
|
|
|
pg_list.h - generic list
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
|
2008-03-20 18:55:15 +01:00
|
|
|
Steps to Add a Node
|
|
|
|
-------------------
|
1996-07-09 08:22:35 +02:00
|
|
|
|
2008-08-26 00:42:34 +02:00
|
|
|
Suppose you wanna define a node Foo:
|
1996-07-09 08:22:35 +02:00
|
|
|
|
2008-08-26 00:42:34 +02:00
|
|
|
1. Add a tag (T_Foo) to the enum NodeTag in nodes.h. (If you insert the
|
|
|
|
tag in a way that moves the numbers associated with existing tags,
|
|
|
|
you'll need to recompile the whole tree after doing this. It doesn't
|
|
|
|
force initdb though, because the numbers never go to disk.)
|
|
|
|
2. Add the structure definition to the appropriate include/nodes/???.h file.
|
|
|
|
If you intend to inherit from, say a Plan node, put Plan as the first field
|
|
|
|
of your struct definition.
|
|
|
|
3. If you intend to use copyObject, equal, nodeToString or stringToNode,
|
1996-07-09 08:22:35 +02:00
|
|
|
add an appropriate function to copyfuncs.c, equalfuncs.c, outfuncs.c
|
2008-08-26 00:42:34 +02:00
|
|
|
and readfuncs.c accordingly. (Except for frequently used nodes, don't
|
|
|
|
bother writing a creator function in makefuncs.c) The header comments
|
|
|
|
in those files give general rules for whether you need to add support.
|
|
|
|
4. Add cases to the functions in nodeFuncs.c as needed. There are many
|
|
|
|
other places you'll probably also need to teach about your new node
|
|
|
|
type. Best bet is to grep for references to one or two similar existing
|
|
|
|
node types to find all the places to touch.
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
|
2008-03-20 18:55:15 +01:00
|
|
|
Historical Note
|
|
|
|
---------------
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
Prior to the current simple C structure definitions, the Node structures
|
2008-08-26 00:42:34 +02:00
|
|
|
used a pseudo-inheritance system which automatically generated creator and
|
|
|
|
accessor functions. Since every node inherited from LispValue, the whole thing
|
|
|
|
was a mess. Here's a little anecdote:
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
LispValue definition -- class used to support lisp structures
|
|
|
|
in C. This is here because we did not want to totally rewrite
|
|
|
|
planner and executor code which depended on lisp structures when
|
|
|
|
we ported postgres V1 from lisp to C. -cim 4/23/90
|