nodes.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:6k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * nodes.h
  4.  *   Definitions for tagged nodes.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: nodes.h,v 1.49 1999/05/26 12:56:33 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef NODES_H
  14. #define NODES_H
  15. /*
  16.  * The first field of every node is NodeTag. Each node created (with makeNode)
  17.  * will have one of the following tags as the value of its first field.
  18.  *
  19.  * Note that the number of the node tags are not contiguous. We left holes
  20.  * here so that we can add more tags without changing the existing enum's.
  21.  */
  22. typedef enum NodeTag
  23. {
  24. T_Invalid = 0,
  25. /*---------------------
  26.  * TAGS FOR PLAN NODES (plannodes.h)
  27.  *---------------------
  28.  */
  29. T_Plan = 10,
  30. T_Result,
  31. T_Append,
  32. T_Scan,
  33. T_SeqScan,
  34. T_IndexScan,
  35. T_Join,
  36. T_NestLoop,
  37. T_MergeJoin,
  38. T_HashJoin,
  39. T_Noname,
  40. T_Material,
  41. T_Sort,
  42. T_Agg,
  43. T_Unique,
  44. T_Hash,
  45. T_Choose,
  46. T_Group,
  47. T_SubPlan,
  48. /*---------------------
  49.  * TAGS FOR PRIMITIVE NODES (primnodes.h)
  50.  *---------------------
  51.  */
  52. T_Resdom = 100,
  53. T_Fjoin,
  54. T_Expr,
  55. T_Var,
  56. T_Oper,
  57. T_Const,
  58. T_Param,
  59. T_Aggref,
  60. T_SubLink,
  61. T_Func,
  62. T_Array,
  63. T_ArrayRef,
  64. /*---------------------
  65.  * TAGS FOR INNER PLAN NODES (relation.h)
  66.  *---------------------
  67.  */
  68. T_RelOptInfo = 200,
  69. T_PathOrder,
  70. T_Path,
  71. T_IndexPath,
  72. T_NestPath,
  73. T_MergePath,
  74. T_HashPath,
  75. T_OrderKey,
  76. T_JoinKey,
  77. T_MergeOrder,
  78. T_RestrictInfo,
  79. T_JoinMethod,
  80. T_HashInfo,
  81. T_MergeInfo,
  82. T_JoinInfo,
  83. T_Iter,
  84. T_Stream,
  85. /*---------------------
  86.  * TAGS FOR EXECUTOR NODES (execnodes.h)
  87.  *---------------------
  88.  */
  89. T_IndexInfo = 300,
  90. T_RelationInfo,
  91. T_TupleCount,
  92. T_TupleTableSlot,
  93. T_ExprContext,
  94. T_ProjectionInfo,
  95. T_JunkFilter,
  96. T_EState,
  97. T_BaseNode,
  98. T_CommonState,
  99. T_ResultState,
  100. T_AppendState,
  101. T_CommonScanState,
  102. T_ScanState,
  103. T_IndexScanState,
  104. T_JoinState,
  105. T_NestLoopState,
  106. T_MergeJoinState,
  107. T_HashJoinState,
  108. T_MaterialState,
  109. T_AggState,
  110. T_GroupState,
  111. T_SortState,
  112. T_UniqueState,
  113. T_HashState,
  114. /*---------------------
  115.  * TAGS FOR MEMORY NODES (memnodes.h)
  116.  *---------------------
  117.  */
  118. T_MemoryContext = 400,
  119. T_GlobalMemory,
  120. T_PortalMemoryContext,
  121. T_PortalVariableMemory,
  122. T_PortalHeapMemory,
  123. /*---------------------
  124.  * TAGS FOR VALUE NODES (pg_list.h)
  125.  *---------------------
  126.  */
  127. T_Value = 500,
  128. T_List,
  129. T_Integer,
  130. T_Float,
  131. T_String,
  132. T_Null,
  133. /*---------------------
  134.  * TAGS FOR PARSE TREE NODES (parsenode.h)
  135.  *---------------------
  136.  */
  137. T_Query = 600,
  138. T_InsertStmt,
  139. T_DeleteStmt,
  140. T_UpdateStmt,
  141. T_SelectStmt,
  142. T_AddAttrStmt,
  143. T_AggregateStmt,
  144. T_ChangeACLStmt,
  145. T_ClosePortalStmt,
  146. T_ClusterStmt,
  147. T_CopyStmt,
  148. T_CreateStmt,
  149. T_VersionStmt,
  150. T_DefineStmt,
  151. T_DestroyStmt,
  152. T_ExtendStmt,
  153. T_FetchStmt,
  154. T_IndexStmt,
  155. T_ProcedureStmt,
  156. T_RemoveAggrStmt,
  157. T_RemoveFuncStmt,
  158. T_RemoveOperStmt,
  159. T_RemoveStmt,
  160. T_RenameStmt,
  161. T_RuleStmt,
  162. T_NotifyStmt,
  163. T_ListenStmt,
  164. T_UnlistenStmt,
  165. T_TransactionStmt,
  166. T_ViewStmt,
  167. T_LoadStmt,
  168. T_CreatedbStmt,
  169. T_DestroydbStmt,
  170. T_VacuumStmt,
  171. T_ExplainStmt,
  172. T_CreateSeqStmt,
  173. T_VariableSetStmt,
  174. T_VariableShowStmt,
  175. T_VariableResetStmt,
  176. T_CreateTrigStmt,
  177. T_DropTrigStmt,
  178. T_CreatePLangStmt,
  179. T_DropPLangStmt,
  180. T_CreateUserStmt,
  181. T_AlterUserStmt,
  182. T_DropUserStmt,
  183. T_LockStmt,
  184. T_A_Expr = 700,
  185. T_Attr,
  186. T_A_Const,
  187. T_ParamNo,
  188. T_Ident,
  189. T_FuncCall,
  190. T_A_Indices,
  191. T_ResTarget,
  192. T_ParamString,
  193. T_RelExpr,
  194. T_SortGroupBy,
  195. T_RangeVar,
  196. T_TypeName,
  197. T_IndexElem,
  198. T_ColumnDef,
  199. T_Constraint,
  200. T_DefElem,
  201. T_TargetEntry,
  202. T_RangeTblEntry,
  203. T_SortClause,
  204. T_GroupClause,
  205. T_SubSelect,
  206. T_JoinExpr,
  207. T_CaseExpr,
  208. T_CaseWhen,
  209. T_RowMark
  210. } NodeTag;
  211. /*
  212.  * The first field of a node of any type is guaranteed to be the NodeTag.
  213.  * Hence the type of any node can be gotten by casting it to Node. Declaring
  214.  * a variable to be of Node * (instead of void *) can also facilitate
  215.  * debugging.
  216.  */
  217. typedef struct Node
  218. {
  219. NodeTag type;
  220. } Node;
  221. #define nodeTag(_node_) ((Node*)_node_)->type
  222. #define makeNode(_node_) (_node_*)newNode(sizeof(_node_),T_##_node_)
  223. #define NodeSetTag(n, t) ((Node *)n)->type = t
  224. #define IsA(_node_,_tag_) (nodeTag(_node_) == T_##_tag_)
  225. /* ----------------------------------------------------------------
  226.  *   IsA functions (no inheritence any more)
  227.  * ----------------------------------------------------------------
  228.  */
  229. #define IsA_JoinPath(jp) 
  230. (nodeTag(jp)==T_NestPath || nodeTag(jp)==T_MergePath || 
  231.  nodeTag(jp)==T_HashPath)
  232. #define IsA_Join(j) 
  233. (nodeTag(j)==T_Join || nodeTag(j)==T_NestLoop || 
  234.  nodeTag(j)==T_MergeJoin || nodeTag(j)==T_HashJoin)
  235. #define IsA_Noname(t) 
  236. (nodeTag(t)==T_Noname || nodeTag(t)==T_Material || nodeTag(t)==T_Sort || 
  237.  nodeTag(t)==T_Unique)
  238. /* ----------------------------------------------------------------
  239.  *   extern declarations follow
  240.  * ----------------------------------------------------------------
  241.  */
  242. /*
  243.  * nodes/nodes.c
  244.  */
  245. extern Node *newNode(Size size, NodeTag tag);
  246. /*
  247.  * nodes/{outfuncs.c,print.c}
  248.  */
  249. #define nodeDisplay pprint
  250. extern char *nodeToString(void *obj);
  251. extern void print(void *obj);
  252. /*
  253.  * nodes/{readfuncs.c,read.c}
  254.  */
  255. extern void *stringToNode(char *str);
  256. /*
  257.  * nodes/copyfuncs.c
  258.  */
  259. extern void *copyObject(void *obj);
  260. /*
  261.  * nodes/equalfuncs.c
  262.  */
  263. extern bool equal(void *a, void *b);
  264. /* ----------------
  265.  * I don't know why this is here.  Most likely a hack..
  266.  * -cim 6/3/90
  267.  * ----------------
  268.  */
  269. typedef float Cost;
  270. /*
  271.  * CmdType -
  272.  *   enums for type of operation to aid debugging
  273.  *
  274.  * ??? could have put this in parsenodes.h but many files not in the
  275.  *   optimizer also need this...
  276.  */
  277. typedef enum CmdType
  278. {
  279. CMD_UNKNOWN,
  280. CMD_SELECT, /* select stmt (formerly retrieve) */
  281. CMD_UPDATE, /* update stmt (formerly replace) */
  282. CMD_INSERT, /* insert stmt (formerly append) */
  283. CMD_DELETE,
  284. CMD_UTILITY, /* cmds like create, destroy, copy,
  285.  * vacuum, etc. */
  286. CMD_NOTHING /* dummy command for instead nothing rules
  287.  * with qual */
  288. } CmdType;
  289. #endif  /* NODES_H */