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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * parsenodes.h
  4.  *   definitions for parse tree nodes
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: parsenodes.h,v 1.74 1999/05/25 22:42:57 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef PARSENODES_H
  14. #define PARSENODES_H
  15. #include <nodes/primnodes.h>
  16. /*****************************************************************************
  17.  * Query Tree
  18.  *****************************************************************************/
  19. /*
  20.  * Query -
  21.  *   all statments are turned into a Query tree (via transformStmt)
  22.  *   for further processing by the optimizer
  23.  *   utility statements (i.e. non-optimizable statements)
  24.  *   have the *utilityStmt field set.
  25.  *
  26.  * we need the isPortal flag because portal names can be null too; can
  27.  * get rid of it if we support CURSOR as a commandType.
  28.  *
  29.  */
  30. typedef struct Query
  31. {
  32. NodeTag type;
  33. CmdType commandType; /* select|insert|update|delete|utility */
  34. Node    *utilityStmt; /* non-null if this is a non-optimizable
  35.  * statement */
  36. int resultRelation; /* target relation (index to rtable) */
  37. char    *into; /* portal (cursor) name */
  38. bool isPortal; /* is this a retrieve into portal? */
  39. bool isBinary; /* binary portal? */
  40. bool isTemp; /* is 'into' a temp table? */
  41. bool unionall; /* union without unique sort */
  42. bool hasAggs; /* has aggregates in target list */
  43. bool hasSubLinks; /* has subquery SubLink */
  44. char    *uniqueFlag; /* NULL, '*', or Unique attribute name */
  45. List    *sortClause; /* a list of SortClause's */
  46. List    *rtable; /* list of range table entries */
  47. List    *targetList; /* target list (of TargetEntry) */
  48. Node    *qual; /* qualifications */
  49. List    *rowMark; /* list of RowMark entries */
  50. List    *groupClause; /* list of columns to specified in GROUP
  51.  * BY */
  52. Node    *havingQual; /* qualification of each group */
  53. /***S*I***/
  54. List    *intersectClause;
  55. List    *unionClause; /* unions are linked under the previous
  56.  * query */
  57. Node    *limitOffset; /* # of result tuples to skip */
  58. Node    *limitCount; /* # of result tuples to return */
  59. /* internal to planner */
  60. List    *base_rel_list; /* base relation list */
  61. List    *join_rel_list; /* list of relation involved in joins */
  62. } Query;
  63. /*****************************************************************************
  64.  * Other Statements (no optimizations required)
  65.  *
  66.  * Some of them require a little bit of transformation (which is also
  67.  * done by transformStmt). The whole structure is then passed on to
  68.  * ProcessUtility (by-passing the optimization step) as the utilityStmt
  69.  * field in Query.
  70.  *****************************************************************************/
  71. /* ----------------------
  72.  * Add Column Statement
  73.  * ----------------------
  74.  */
  75. typedef struct AddAttrStmt
  76. {
  77. NodeTag type;
  78. char    *relname; /* the relation to add attr */
  79. bool inh; /* add recursively to children? */
  80. Node    *colDef; /* the attribute definition */
  81. } AddAttrStmt;
  82. /* ----------------------
  83.  * Change ACL Statement
  84.  * ----------------------
  85.  */
  86. typedef struct ChangeACLStmt
  87. {
  88. NodeTag type;
  89. struct AclItem *aclitem;
  90. unsigned modechg;
  91. List    *relNames;
  92. } ChangeACLStmt;
  93. /* ----------------------
  94.  * Close Portal Statement
  95.  * ----------------------
  96.  */
  97. typedef struct ClosePortalStmt
  98. {
  99. NodeTag type;
  100. char    *portalname; /* name of the portal (cursor) */
  101. } ClosePortalStmt;
  102. /* ----------------------
  103.  * Copy Statement
  104.  * ----------------------
  105.  */
  106. typedef struct CopyStmt
  107. {
  108. NodeTag type;
  109. bool binary; /* is a binary copy? */
  110. char    *relname; /* the relation to copy */
  111. bool oids; /* copy oid's? */
  112. int direction; /* TO or FROM */
  113. char    *filename; /* if NULL, use stdin/stdout */
  114. char    *delimiter; /* delimiter character, t by default */
  115. } CopyStmt;
  116. /* ----------------------
  117.  * Create Table Statement
  118.  * ----------------------
  119.  */
  120. typedef struct CreateStmt
  121. {
  122. NodeTag type;
  123. bool istemp; /* is this a temp table? */
  124. char    *relname; /* the relation to create */
  125. List    *tableElts; /* column definitions list of Column */
  126. List    *inhRelnames; /* relations to inherit from list of Value
  127.  * (string) */
  128. List    *constraints; /* list of constraints (ConstaintDef) */
  129. } CreateStmt;
  130. typedef enum ConstrType /* type of constaints */
  131. {
  132. CONSTR_NULL, CONSTR_NOTNULL, CONSTR_DEFAULT, CONSTR_CHECK, CONSTR_PRIMARY, CONSTR_UNIQUE
  133. } ConstrType;
  134. typedef struct Constraint
  135. {
  136. NodeTag type;
  137. ConstrType contype;
  138. char    *name; /* name */
  139. void    *def; /* definition */
  140. void    *keys; /* list of primary keys */
  141. } Constraint;
  142. /* ----------------------
  143.  * Create/Drop TRIGGER Statements
  144.  * ----------------------
  145.  */
  146. typedef struct CreateTrigStmt
  147. {
  148. NodeTag type;
  149. char    *trigname; /* TRIGGER' name */
  150. char    *relname; /* triggered relation */
  151. char    *funcname; /* function to call (or NULL) */
  152. List    *args; /* list of (T_String) Values or NULL */
  153. bool before; /* BEFORE/AFTER */
  154. bool row; /* ROW/STATEMENT */
  155. char actions[4]; /* Insert, Update, Delete */
  156. char    *lang; /* NULL (which means Clanguage) */
  157. char    *text; /* AS 'text' */
  158. List    *attr; /* UPDATE OF a, b,... (NI) or NULL */
  159. char    *when; /* WHEN 'a > 10 ...' (NI) or NULL */
  160. } CreateTrigStmt;
  161. typedef struct DropTrigStmt
  162. {
  163. NodeTag type;
  164. char    *trigname; /* TRIGGER' name */
  165. char    *relname; /* triggered relation */
  166. } DropTrigStmt;
  167. /* ----------------------
  168.  * Create/Drop PROCEDURAL LANGUAGE Statement
  169.  * ----------------------
  170.  */
  171. typedef struct CreatePLangStmt
  172. {
  173. NodeTag type;
  174. char    *plname; /* PL name */
  175. char    *plhandler; /* PL call handler function */
  176. char    *plcompiler; /* lancompiler text */
  177. bool pltrusted; /* PL is trusted */
  178. } CreatePLangStmt;
  179. typedef struct DropPLangStmt
  180. {
  181. NodeTag type;
  182. char    *plname; /* PL name */
  183. } DropPLangStmt;
  184. /* ----------------------
  185.  * Create/Alter/Drop User Statements
  186.  * ----------------------
  187.  */
  188. typedef struct CreateUserStmt
  189. {
  190. NodeTag type;
  191. char    *user; /* PostgreSQL user login   */
  192. char    *password; /* PostgreSQL user password   */
  193. bool    *createdb; /* Can the user create databases?   */
  194. bool    *createuser; /* Can this user create users?   */
  195. List    *groupElts; /* The groups the user is a member of */
  196. char    *validUntil; /* The time the login is valid until  */
  197. } CreateUserStmt;
  198. typedef CreateUserStmt AlterUserStmt;
  199. typedef struct DropUserStmt
  200. {
  201. NodeTag type;
  202. char    *user; /* PostgreSQL user login   */
  203. } DropUserStmt;
  204. /* ----------------------
  205.  * Create SEQUENCE Statement
  206.  * ----------------------
  207.  */
  208. typedef struct CreateSeqStmt
  209. {
  210. NodeTag type;
  211. char    *seqname; /* the relation to create */
  212. List    *options;
  213. } CreateSeqStmt;
  214. /* ----------------------
  215.  * Create Version Statement
  216.  * ----------------------
  217.  */
  218. typedef struct VersionStmt
  219. {
  220. NodeTag type;
  221. char    *relname; /* the new relation */
  222. int direction; /* FORWARD | BACKWARD */
  223. char    *fromRelname; /* relation to create a version */
  224. char    *date; /* date of the snapshot */
  225. } VersionStmt;
  226. /* ----------------------
  227.  * Create {Operator|Type|Aggregate} Statement
  228.  * ----------------------
  229.  */
  230. typedef struct DefineStmt
  231. {
  232. NodeTag type;
  233. int defType; /* OPERATOR|P_TYPE|AGGREGATE */
  234. char    *defname;
  235. List    *definition; /* a list of DefElem */
  236. } DefineStmt;
  237. /* ----------------------
  238.  * Drop Table Statement
  239.  * ----------------------
  240.  */
  241. typedef struct DestroyStmt
  242. {
  243. NodeTag type;
  244. List    *relNames; /* relations to be dropped */
  245. bool sequence;
  246. } DestroyStmt;
  247. /* ----------------------
  248.  * Extend Index Statement
  249.  * ----------------------
  250.  */
  251. typedef struct ExtendStmt
  252. {
  253. NodeTag type;
  254. char    *idxname; /* name of the index */
  255. Node    *whereClause; /* qualifications */
  256. List    *rangetable; /* range table, filled in by
  257.  * transformStmt() */
  258. } ExtendStmt;
  259. /* ----------------------
  260.  * Begin Recipe Statement
  261.  * ----------------------
  262.  */
  263. typedef struct RecipeStmt
  264. {
  265. NodeTag type;
  266. char    *recipeName; /* name of the recipe */
  267. } RecipeStmt;
  268. /* ----------------------
  269.  * Fetch Statement
  270.  * ----------------------
  271.  */
  272. typedef struct FetchStmt
  273. {
  274. NodeTag type;
  275. int direction; /* FORWARD or BACKWARD */
  276. int howMany; /* amount to fetch ("ALL" --> 0) */
  277. char    *portalname; /* name of portal (cursor) */
  278. bool ismove; /* TRUE if MOVE */
  279. } FetchStmt;
  280. /* ----------------------
  281.  * Create Index Statement
  282.  * ----------------------
  283.  */
  284. typedef struct IndexStmt
  285. {
  286. NodeTag type;
  287. char    *idxname; /* name of the index */
  288. char    *relname; /* name of relation to index on */
  289. char    *accessMethod; /* name of acess methood (eg. btree) */
  290. List    *indexParams; /* a list of IndexElem */
  291. List    *withClause; /* a list of ParamString */
  292. Node    *whereClause; /* qualifications */
  293. List    *rangetable; /* range table, filled in by
  294.  * transformStmt() */
  295. bool    *lossy; /* is index lossy? */
  296. bool unique; /* is index unique? */
  297. bool primary; /* is index on primary key? */
  298. } IndexStmt;
  299. /* ----------------------
  300.  * Create Function Statement
  301.  * ----------------------
  302.  */
  303. typedef struct ProcedureStmt
  304. {
  305. NodeTag type;
  306. char    *funcname; /* name of function to create */
  307. List    *defArgs; /* list of definitions a list of strings
  308.  * (as Value *) */
  309. Node    *returnType; /* the return type (as a string or a
  310.  * TypeName (ie.setof) */
  311. List    *withClause; /* a list of ParamString */
  312. char    *as; /* the SQL statement or filename */
  313. char    *language; /* C or SQL */
  314. } ProcedureStmt;
  315. /* ----------------------
  316.  * Drop Aggregate Statement
  317.  * ----------------------
  318.  */
  319. typedef struct RemoveAggrStmt
  320. {
  321. NodeTag type;
  322. char    *aggname; /* aggregate to drop */
  323. char    *aggtype; /* for this type */
  324. } RemoveAggrStmt;
  325. /* ----------------------
  326.  * Drop Function Statement
  327.  * ----------------------
  328.  */
  329. typedef struct RemoveFuncStmt
  330. {
  331. NodeTag type;
  332. char    *funcname; /* function to drop */
  333. List    *args; /* types of the arguments */
  334. } RemoveFuncStmt;
  335. /* ----------------------
  336.  * Drop Operator Statement
  337.  * ----------------------
  338.  */
  339. typedef struct RemoveOperStmt
  340. {
  341. NodeTag type;
  342. char    *opname; /* operator to drop */
  343. List    *args; /* types of the arguments */
  344. } RemoveOperStmt;
  345. /* ----------------------
  346.  * Drop {Type|Index|Rule|View} Statement
  347.  * ----------------------
  348.  */
  349. typedef struct RemoveStmt
  350. {
  351. NodeTag type;
  352. int removeType; /* P_TYPE|INDEX|RULE|VIEW */
  353. char    *name; /* name to drop */
  354. } RemoveStmt;
  355. /* ----------------------
  356.  * Alter Table Statement
  357.  * ----------------------
  358.  */
  359. typedef struct RenameStmt
  360. {
  361. NodeTag type;
  362. char    *relname; /* relation to be altered */
  363. bool inh; /* recursively alter children? */
  364. char    *column; /* if NULL, rename the relation name to
  365.  * the new name. Otherwise, rename this
  366.  * column name. */
  367. char    *newname; /* the new name */
  368. } RenameStmt;
  369. /* ----------------------
  370.  * Create Rule Statement
  371.  * ----------------------
  372.  */
  373. typedef struct RuleStmt
  374. {
  375. NodeTag type;
  376. char    *rulename; /* name of the rule */
  377. Node    *whereClause; /* qualifications */
  378. CmdType event; /* RETRIEVE */
  379. struct Attr *object; /* object affected */
  380. bool instead; /* is a 'do instead'? */
  381. List    *actions; /* the action statements */
  382. } RuleStmt;
  383. /* ----------------------
  384.  * Notify Statement
  385.  * ----------------------
  386.  */
  387. typedef struct NotifyStmt
  388. {
  389. NodeTag type;
  390. char    *relname; /* relation to notify */
  391. } NotifyStmt;
  392. /* ----------------------
  393.  * Listen Statement
  394.  * ----------------------
  395.  */
  396. typedef struct ListenStmt
  397. {
  398. NodeTag type;
  399. char    *relname; /* relation to listen on */
  400. } ListenStmt;
  401. /* ----------------------
  402.  * Unlisten Statement
  403.  * ----------------------
  404.  */
  405. typedef struct UnlistenStmt
  406. {
  407. NodeTag type;
  408. char    *relname; /* relation to unlisten on */
  409. } UnlistenStmt;
  410. /* ----------------------
  411.  * {Begin|Abort|End} Transaction Statement
  412.  * ----------------------
  413.  */
  414. typedef struct TransactionStmt
  415. {
  416. NodeTag type;
  417. int command; /* BEGIN|END|ABORT */
  418. } TransactionStmt;
  419. /* ----------------------
  420.  * Create View Statement
  421.  * ----------------------
  422.  */
  423. typedef struct ViewStmt
  424. {
  425. NodeTag type;
  426. char    *viewname; /* name of the view */
  427. Query    *query; /* the SQL statement */
  428. } ViewStmt;
  429. /* ----------------------
  430.  * Load Statement
  431.  * ----------------------
  432.  */
  433. typedef struct LoadStmt
  434. {
  435. NodeTag type;
  436. char    *filename; /* file to load */
  437. } LoadStmt;
  438. /* ----------------------
  439.  * Createdb Statement
  440.  * ----------------------
  441.  */
  442. typedef struct CreatedbStmt
  443. {
  444. NodeTag type;
  445. char    *dbname; /* database to create */
  446. char    *dbpath; /* location of database */
  447. int encoding; /* default encoding (see regex/pg_wchar.h) */
  448. } CreatedbStmt;
  449. /* ----------------------
  450.  * Destroydb Statement
  451.  * ----------------------
  452.  */
  453. typedef struct DestroydbStmt
  454. {
  455. NodeTag type;
  456. char    *dbname; /* database to drop */
  457. } DestroydbStmt;
  458. /* ----------------------
  459.  * Cluster Statement (support pbrown's cluster index implementation)
  460.  * ----------------------
  461.  */
  462. typedef struct ClusterStmt
  463. {
  464. NodeTag type;
  465. char    *relname; /* relation being indexed */
  466. char    *indexname; /* original index defined */
  467. } ClusterStmt;
  468. /* ----------------------
  469.  * Vacuum Statement
  470.  * ----------------------
  471.  */
  472. typedef struct VacuumStmt
  473. {
  474. NodeTag type;
  475. bool verbose; /* print status info */
  476. bool analyze; /* analyze data */
  477. char    *vacrel; /* table to vacuum */
  478. List    *va_spec; /* columns to analyse */
  479. } VacuumStmt;
  480. /* ----------------------
  481.  * Explain Statement
  482.  * ----------------------
  483.  */
  484. typedef struct ExplainStmt
  485. {
  486. NodeTag type;
  487. Query    *query; /* the query */
  488. bool verbose; /* print plan info */
  489. } ExplainStmt;
  490. /* ----------------------
  491.  * Set Statement
  492.  * ----------------------
  493.  */
  494. typedef struct VariableSetStmt
  495. {
  496. NodeTag type;
  497. char    *name;
  498. char    *value;
  499. } VariableSetStmt;
  500. /* ----------------------
  501.  * Show Statement
  502.  * ----------------------
  503.  */
  504. typedef struct VariableShowStmt
  505. {
  506. NodeTag type;
  507. char    *name;
  508. } VariableShowStmt;
  509. /* ----------------------
  510.  * Reset Statement
  511.  * ----------------------
  512.  */
  513. typedef struct VariableResetStmt
  514. {
  515. NodeTag type;
  516. char    *name;
  517. } VariableResetStmt;
  518. /* ----------------------
  519.  * LOCK Statement
  520.  * ----------------------
  521.  */
  522. typedef struct LockStmt
  523. {
  524. NodeTag type;
  525. char    *relname; /* relation to lock */
  526. int mode; /* lock mode */
  527. } LockStmt;
  528. /*****************************************************************************
  529.  * Optimizable Statements
  530.  *****************************************************************************/
  531. /* ----------------------
  532.  * Insert Statement
  533.  * ----------------------
  534.  */
  535. typedef struct InsertStmt
  536. {
  537. NodeTag type;
  538. char    *relname; /* relation to insert into */
  539. char    *unique; /* NULL, '*', or unique attribute name */
  540. List    *cols; /* names of the columns */
  541. List    *targetList; /* the target list (of ResTarget) */
  542. List    *fromClause; /* the from clause */
  543. Node    *whereClause; /* qualifications */
  544. List    *groupClause; /* group by clause */
  545. Node    *havingClause; /* having conditional-expression */
  546. List    *unionClause; /* union subselect parameters */
  547. bool unionall; /* union without unique sort */
  548. /***S*I***/
  549. List    *intersectClause;
  550. List    *forUpdate; /* FOR UPDATE clause */
  551. } InsertStmt;
  552. /* ----------------------
  553.  * Delete Statement
  554.  * ----------------------
  555.  */
  556. typedef struct DeleteStmt
  557. {
  558. NodeTag type;
  559. char    *relname; /* relation to delete from */
  560. Node    *whereClause; /* qualifications */
  561. } DeleteStmt;
  562. /* ----------------------
  563.  * Update Statement
  564.  * ----------------------
  565.  */
  566. typedef struct UpdateStmt
  567. {
  568. NodeTag type;
  569. char    *relname; /* relation to update */
  570. List    *targetList; /* the target list (of ResTarget) */
  571. Node    *whereClause; /* qualifications */
  572. List    *fromClause; /* the from clause */
  573. } UpdateStmt;
  574. /* ----------------------
  575.  * Select Statement
  576.  * ----------------------
  577.  */
  578. typedef struct SelectStmt
  579. {
  580. NodeTag type;
  581. char    *unique; /* NULL, '*', or unique attribute name */
  582. char    *into; /* name of table (for select into table) */
  583. List    *targetList; /* the target list (of ResTarget) */
  584. List    *fromClause; /* the from clause */
  585. Node    *whereClause; /* qualifications */
  586. List    *groupClause; /* group by clause */
  587. Node    *havingClause; /* having conditional-expression */
  588. /***S*I***/
  589. List    *intersectClause;
  590. List    *exceptClause;
  591. List    *unionClause; /* union subselect parameters */
  592. List    *sortClause; /* sort clause (a list of SortGroupBy's) */
  593. char    *portalname; /* the portal (cursor) to create */
  594. bool binary; /* a binary (internal) portal? */
  595. bool istemp; /* into is a temp table */
  596. bool unionall; /* union without unique sort */
  597. Node    *limitOffset; /* # of result tuples to skip */
  598. Node    *limitCount; /* # of result tuples to return */
  599. List    *forUpdate; /* FOR UPDATE clause */
  600. } SelectStmt;
  601. /****************************************************************************
  602.  * Supporting data structures for Parse Trees
  603.  ****************************************************************************/
  604. /*
  605.  * TypeName - specifies a type in definitions
  606.  */
  607. typedef struct TypeName
  608. {
  609. NodeTag type;
  610. char    *name; /* name of the type */
  611. bool timezone; /* timezone specified? */
  612. bool setof; /* is a set? */
  613. int32 typmod; /* type modifier */
  614. List    *arrayBounds; /* array bounds */
  615. } TypeName;
  616. /*
  617.  * ParamNo - specifies a parameter reference
  618.  */
  619. typedef struct ParamNo
  620. {
  621. NodeTag type;
  622. int number; /* the number of the parameter */
  623. TypeName   *typename; /* the typecast */
  624. List    *indirection; /* array references */
  625. } ParamNo;
  626. /*
  627.  * A_Expr - binary expressions
  628.  */
  629. typedef struct A_Expr
  630. {
  631. NodeTag type;
  632. int oper; /* type of operation
  633.  * {OP,OR,AND,NOT,ISNULL,NOTNULL} */
  634. char    *opname; /* name of operator/function */
  635. Node    *lexpr; /* left argument */
  636. Node    *rexpr; /* right argument */
  637. } A_Expr;
  638. /*
  639.  * Attr -
  640.  *   specifies an Attribute (ie. a Column); could have nested dots or
  641.  *   array references.
  642.  *
  643.  */
  644. typedef struct Attr
  645. {
  646. NodeTag type;
  647. char    *relname; /* name of relation (can be "*") */
  648. ParamNo    *paramNo; /* or a parameter */
  649. List    *attrs; /* attributes (possibly nested); list of
  650.  * Values (strings) */
  651. List    *indirection; /* array refs (list of A_Indices') */
  652. } Attr;
  653. /*
  654.  * A_Const - a constant expression
  655.  */
  656. typedef struct A_Const
  657. {
  658. NodeTag type;
  659. Value val; /* the value (with the tag) */
  660. TypeName   *typename; /* typecast */
  661. } A_Const;
  662. /*
  663.  * CaseExpr - a CASE expression
  664.  */
  665. typedef struct CaseExpr
  666. {
  667. NodeTag type;
  668. Oid casetype;
  669. Node    *arg; /* implicit equality comparison argument */
  670. List    *args; /* the arguments (list of WHEN clauses) */
  671. Node    *defresult; /* the default result (ELSE clause) */
  672. } CaseExpr;
  673. /*
  674.  * CaseWhen - an argument to a CASE expression
  675.  */
  676. typedef struct CaseWhen
  677. {
  678. NodeTag type;
  679. Node    *expr; /* comparison expression */
  680. Node    *result; /* substitution result */
  681. } CaseWhen;
  682. /*
  683.  * ColumnDef - column definition (used in various creates)
  684.  */
  685. typedef struct ColumnDef
  686. {
  687. NodeTag type;
  688. char    *colname; /* name of column */
  689. TypeName   *typename; /* type of column */
  690. bool is_not_null; /* flag to NOT NULL constraint */
  691. bool is_sequence; /* is a sequence? */
  692. char    *defval; /* default value of column */
  693. List    *constraints; /* constraints on column */
  694. } ColumnDef;
  695. /*
  696.  * Ident -
  697.  *   an identifier (could be an attribute or a relation name). Depending
  698.  *   on the context at transformStmt time, the identifier is treated as
  699.  *   either a relation name (in which case, isRel will be set) or an
  700.  *   attribute (in which case, it will be transformed into an Attr).
  701.  */
  702. typedef struct Ident
  703. {
  704. NodeTag type;
  705. char    *name; /* its name */
  706. List    *indirection; /* array references */
  707. bool isRel; /* is a relation - filled in by
  708.  * transformExpr() */
  709. } Ident;
  710. /*
  711.  * FuncCall - a function/aggregate invocation
  712.  */
  713. typedef struct FuncCall
  714. {
  715. NodeTag type;
  716. char    *funcname; /* name of function */
  717. List    *args; /* the arguments (list of exprs) */
  718. } FuncCall;
  719. /*
  720.  * A_Indices - array reference or bounds ([lidx:uidx] or [uidx])
  721.  */
  722. typedef struct A_Indices
  723. {
  724. NodeTag type;
  725. Node    *lidx; /* could be NULL */
  726. Node    *uidx;
  727. } A_Indices;
  728. /*
  729.  * ResTarget -
  730.  *   result target (used in target list of pre-transformed Parse trees)
  731.  */
  732. typedef struct ResTarget
  733. {
  734. NodeTag type;
  735. char    *name; /* name of the result column */
  736. List    *indirection; /* array references */
  737. Node    *val; /* the value of the result (A_Expr or
  738.  * Attr) (or A_Const) */
  739. } ResTarget;
  740. /*
  741.  * ParamString - used in WITH clauses
  742.  */
  743. typedef struct ParamString
  744. {
  745. NodeTag type;
  746. char    *name;
  747. char    *val;
  748. } ParamString;
  749. /*
  750.  * RelExpr - relation expressions
  751.  */
  752. typedef struct RelExpr
  753. {
  754. NodeTag type;
  755. char    *relname; /* the relation name */
  756. bool inh; /* inheritance query */
  757. } RelExpr;
  758. /*
  759.  * SortGroupBy - for ORDER BY clause
  760.  */
  761. typedef struct SortGroupBy
  762. {
  763. NodeTag type;
  764. char    *useOp; /* operator to use */
  765. Node    *node; /* Expression  */
  766. } SortGroupBy;
  767. /*
  768.  * RangeVar - range variable, used in FROM clauses
  769.  */
  770. typedef struct RangeVar
  771. {
  772. NodeTag type;
  773. RelExpr    *relExpr; /* the relation expression */
  774. char    *name; /* the name to be referenced (optional) */
  775. } RangeVar;
  776. /*
  777.  * IndexElem - index parameters (used in CREATE INDEX)
  778.  */
  779. typedef struct IndexElem
  780. {
  781. NodeTag type;
  782. char    *name; /* name of index */
  783. List    *args; /* if not NULL, function index */
  784. char    *class;
  785. TypeName   *typename; /* type of index's keys (optional) */
  786. } IndexElem;
  787. /*
  788.  * DefElem -
  789.  *   a definition (used in definition lists in the form of defname = arg)
  790.  */
  791. typedef struct DefElem
  792. {
  793. NodeTag type;
  794. char    *defname;
  795. Node    *arg; /* a (Value *) or a (TypeName *) */
  796. } DefElem;
  797. /*
  798.  * JoinExpr - for JOIN expressions
  799.  */
  800. typedef struct JoinExpr
  801. {
  802. NodeTag type;
  803. int jointype;
  804. RangeVar   *larg;
  805. Node    *rarg;
  806. List    *quals;
  807. } JoinExpr;
  808. /****************************************************************************
  809.  * Nodes for a Query tree
  810.  ****************************************************************************/
  811. /*
  812.  * TargetEntry -
  813.  *    a target  entry (used in the transformed target list)
  814.  *
  815.  * one of resdom or fjoin is not NULL. a target list is
  816.  * ((<resdom | fjoin> expr) (<resdom | fjoin> expr) ...)
  817.  */
  818. typedef struct TargetEntry
  819. {
  820. NodeTag type;
  821. Resdom    *resdom; /* fjoin overload this to be a list?? */
  822. Fjoin    *fjoin;
  823. Node    *expr; /* can be a list too */
  824. } TargetEntry;
  825. /*
  826.  * RangeTblEntry -
  827.  *   used in range tables. Some of the following are only used in one of
  828.  *   the parsing, optimizing, execution stages.
  829.  *
  830.  *   inFromCl marks those range variables that are listed in the from clause.
  831.  *   In SQL, the targetlist can only refer to range variables listed in the
  832.  *   from clause but POSTQUEL allows you to refer to tables not specified, in
  833.  *   which case a range table entry will be generated. We use POSTQUEL
  834.  *   semantics which is more powerful. However, we need SQL semantics in
  835.  *   some cases (eg. when expanding a '*')
  836.  */
  837. typedef struct RangeTblEntry
  838. {
  839. NodeTag type;
  840. char    *relname; /* real name of the relation */
  841. char    *refname; /* the reference name (specified in the
  842.  * from clause) */
  843. Oid relid;
  844. bool inh; /* inheritance? */
  845. bool inFromCl; /* comes from From Clause */
  846. bool skipAcl; /* skip ACL check in executor */
  847. } RangeTblEntry;
  848. /*
  849.  * SortClause -
  850.  *    used in the sort clause for retrieves and cursors
  851.  */
  852. typedef struct SortClause
  853. {
  854. NodeTag type;
  855. Resdom    *resdom; /* attributes in tlist to be sorted */
  856. Oid opoid; /* sort operators */
  857. } SortClause;
  858. /*
  859.  * GroupClause -
  860.  *    used in the GROUP BY clause
  861.  */
  862. typedef struct GroupClause
  863. {
  864. NodeTag type;
  865. Oid grpOpoid; /* the sort operator to use */
  866. Index tleGroupref; /* reference into targetlist */
  867. } GroupClause;
  868. #define ROW_MARK_FOR_UPDATE (1 << 0)
  869. #define ROW_ACL_FOR_UPDATE (1 << 1)
  870. typedef struct RowMark
  871. {
  872. NodeTag type;
  873. Index rti; /* index in Query->rtable */
  874. bits8 info; /* as above */
  875. } RowMark;
  876. #endif  /* PARSENODES_H */