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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * params.h
  4.  *   Declarations/definitions of stuff needed to handle parameterized plans.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: params.h,v 1.10 1999/02/13 23:21:38 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef PARAMS_H
  14. #define PARAMS_H
  15. #include <access/attnum.h>
  16. /* ----------------------------------------------------------------
  17.  *
  18.  * The following are the possible values for the 'paramkind'
  19.  * field of a Param node.
  20.  *
  21.  * PARAM_NAMED: The parameter has a name, i.e. something
  22.  * like `$.salary' or `$.foobar'.
  23.  * In this case field `paramname' must be a valid Name.
  24.  * and field `paramid' must be == 0.
  25.  *
  26.  * PARAM_NUM: The parameter has only a numeric identifier,
  27.  * i.e. something like `$1', `$2' etc.
  28.  * The number is contained in the `parmid' field.
  29.  *
  30.  * PARAM_NEW: Used in PRS2 rule, similar to PARAM_NAMED.
  31.  * The `paramname' & `paramid' refer to the "NEW" tuple
  32.  * `paramname' is the attribute name and `paramid' its
  33.  * attribute number.
  34.  *
  35.  * PARAM_OLD: Same as PARAM_NEW, but in this case we refer to
  36.  * the "OLD" tuple.
  37.  *
  38.  * PARAM_EXEC: Evaluated by executor. Used for subselect...
  39.  *
  40.  */
  41. #define PARAM_NAMED 11
  42. #define PARAM_NUM 12
  43. #define PARAM_NEW 13
  44. #define PARAM_OLD 14
  45. #define PARAM_EXEC 15
  46. #define PARAM_INVALID 100
  47. /* ----------------------------------------------------------------
  48.  *   ParamListInfo
  49.  *
  50.  *   Information needed in order for the executor to handle
  51.  *   parameterized plans (you know,  $.salary, $.name etc. stuff...).
  52.  *
  53.  *   ParamListInfoData contains information needed when substituting a
  54.  *   Param node with a Const node.
  55.  *
  56.  * kind   : the kind of parameter.
  57.  * name   : the parameter name (valid if kind == PARAM_NAMED,
  58.  *  PARAM_NEW or PARAM_OLD)
  59.  * id    : the parameter id (valid if kind == PARAM_NUM)
  60.  *  or the attrno (if kind == PARAM_NEW or PARAM_OLD)
  61.  * type   : PG_TYPE OID of the value
  62.  * length : length in bytes of the value
  63.  * isnull : true if & only if the value is null (if true then
  64.  *  the fields 'length' and 'value' are undefined).
  65.  * value  : the value that has to be substituted in the place
  66.  *  of the parameter.
  67.  *
  68.  *  ParamListInfo is to be used as an array of ParamListInfoData
  69.  *  records. An 'InvalidName' in the name field of such a record
  70.  *  indicates that this is the last record in the array.
  71.  *
  72.  * ----------------------------------------------------------------
  73.  */
  74. typedef struct ParamListInfoData
  75. {
  76. int kind;
  77. char    *name;
  78. AttrNumber id;
  79. Oid type;
  80. Size length;
  81. bool isnull;
  82. bool byval;
  83. Datum value;
  84. } ParamListInfoData;
  85. typedef ParamListInfoData *ParamListInfo;
  86. typedef struct ParamExecData
  87. {
  88. void    *execPlan; /* plan must be executed to get param
  89.  * value */
  90. Datum value;
  91. bool isnull;
  92. } ParamExecData;
  93. #endif  /* PARAMS_H */