diff options
| author | Tom Lane | 2008-08-25 22:42:34 +0000 |
|---|---|---|
| committer | Tom Lane | 2008-08-25 22:42:34 +0000 |
| commit | e5536e77a50e2b6a5881a2ce9ef1c6debcb5d909 (patch) | |
| tree | 20290f848c7d898e9be71e4aad86df84a02e8b99 /src/backend/nodes/README | |
| parent | d320101b5b1cde0d0d6d4133f618dd374fc14bea (diff) | |
Move exprType(), exprTypmod(), expression_tree_walker(), and related routines
into nodes/nodeFuncs, so as to reduce wanton cross-subsystem #includes inside
the backend. There's probably more that should be done along this line,
but this is a start anyway.
Diffstat (limited to 'src/backend/nodes/README')
| -rw-r--r-- | src/backend/nodes/README | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/src/backend/nodes/README b/src/backend/nodes/README index b1b95ffcdee..67e7badc1f3 100644 --- a/src/backend/nodes/README +++ b/src/backend/nodes/README @@ -1,4 +1,4 @@ -$PostgreSQL: pgsql/src/backend/nodes/README,v 1.3 2008/03/20 17:55:14 momjian Exp $ +$PostgreSQL: pgsql/src/backend/nodes/README,v 1.4 2008/08/25 22:42:32 tgl Exp $ Node Structures =============== @@ -13,52 +13,68 @@ achieved by convention. No additional functions will be generated. Functions that manipulate node structures reside in this directory. -FILES IN THIS DIRECTORY +FILES IN THIS DIRECTORY (src/backend/nodes/) - Node manipulation functions: - copyfuncs.c - copying a node - equalfuncs.c - comparing a node - outfuncs.c - convert a node to ascii representation - readfuncs.c - convert ascii representation back to a node - makefuncs.c - creator functions for primitive nodes + 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/ Node definitions: nodes.h - define node tags (NodeTag) - pg_list.h - generic list primnodes.h - primitive nodes parsenodes.h - parse tree nodes plannodes.h - plan tree nodes - relation.h - inner plan tree nodes + relation.h - planner internal nodes execnodes.h - executor nodes memnodes.h - memory nodes + pg_list.h - generic list Steps to Add a Node ------------------- -Suppose you wana define a node Foo: +Suppose you wanna define a node Foo: -1. add a tag (T_Foo) to the enum NodeTag in nodes.h (You may have to - recompile the whole tree after doing this.) -2. add the structure definition to the appropriate ???nodes.h file. If you - intend to inherit from, say a Plan node, put Plan as the first field of - you definition. -3. if you intend to use copyObject, equal, nodeToString or stringToNode, +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, add an appropriate function to copyfuncs.c, equalfuncs.c, outfuncs.c - and readfuncs.c accordingly. (Except for frequently used nodes, don't - bother writing a creator function in makefuncs.c) + 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. Historical Note --------------- Prior to the current simple C structure definitions, the Node structures -uses a pseudo-inheritance system which automatically generates creator and -accessor functions. Since every node inherits from LispValue, the whole thing -is a mess. Here's a little anecdote: +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: 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 - |
