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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * dest.h
  4.  * Whenever the backend executes a query, the results
  5.  * have to go someplace - either to the standard output,
  6.  * to a local portal buffer or to a remote portal buffer.
  7.  *
  8.  *   - stdout is the destination only when we are running a
  9.  * backend without a postmaster and are returning results
  10.  * back to the user.
  11.  *
  12.  *   - a local portal buffer is the destination when a backend
  13.  * executes a user-defined function which calls PQexec() or
  14.  * PQfn().  In this case, the results are collected into a
  15.  * PortalBuffer which the user's function may diddle with.
  16.  *
  17.  *   - a remote portal buffer is the destination when we are
  18.  * running a backend with a frontend and the frontend executes
  19.  * PQexec() or PQfn().  In this case, the results are sent
  20.  * to the frontend via the pq_ functions.
  21.  *
  22.  *   - None is the destination when the system executes
  23.  * a query internally.  This is not used now but it may be
  24.  * useful for the parallel optimiser/executor.
  25.  *
  26.  * dest.c defines three functions that implement destination management:
  27.  *
  28.  * BeginCommand: initialize the destination.
  29.  * DestToFunction: return a pointer to a struct of destination-specific
  30.  * receiver functions.
  31.  * EndCommand: clean up the destination when output is complete.
  32.  *
  33.  * The DestReceiver object returned by DestToFunction may be a statically
  34.  * allocated object (for destination types that require no local state)
  35.  * or can be a palloc'd object that has DestReceiver as its first field
  36.  * and contains additional fields (see printtup.c for an example). These
  37.  * additional fields are then accessible to the DestReceiver functions
  38.  * by casting the DestReceiver* pointer passed to them.
  39.  * The palloc'd object is pfree'd by the DestReceiver's cleanup function.
  40.  *
  41.  * XXX FIXME: the initialization and cleanup code that currently appears
  42.  * in-line in BeginCommand and EndCommand probably should be moved out
  43.  * to routines associated with each destination receiver type.
  44.  *
  45.  * Copyright (c) 1994, Regents of the University of California
  46.  *
  47.  * $Id: dest.h,v 1.20.2.1 1999/07/30 17:07:20 scrappy Exp $
  48.  *
  49.  *-------------------------------------------------------------------------
  50.  */
  51. #ifndef DEST_H
  52. #define DEST_H
  53. #include "access/htup.h"
  54. #include "access/tupdesc.h"
  55. /* ----------------
  56.  * CommandDest is a simplistic means of identifying the desired
  57.  * destination.  Someday this will probably need to be improved.
  58.  * ----------------
  59.  */
  60. typedef enum
  61. {
  62. None, /* results are discarded */
  63. Debug, /* results go to debugging output */
  64. Local, /* results go in local portal buffer */
  65. Remote, /* results sent to frontend process */
  66. RemoteInternal, /* results sent to frontend process in
  67.  * internal (binary) form */
  68. SPI /* results sent to SPI manager */
  69. } CommandDest;
  70. /* ----------------
  71.  * DestReceiver is a base type for destination-specific local state.
  72.  * In the simplest cases, there is no state info, just the function
  73.  * pointers that the executor must call.
  74.  * ----------------
  75.  */
  76. typedef struct _DestReceiver DestReceiver;
  77. struct _DestReceiver
  78. {
  79. /* Called for each tuple to be output: */
  80. void (*receiveTuple) (HeapTuple tuple, TupleDesc typeinfo,
  81.  DestReceiver *self);
  82. /* Initialization and teardown: */
  83. void (*setup) (DestReceiver *self, TupleDesc typeinfo);
  84. void (*cleanup) (DestReceiver *self);
  85. /* Private fields might appear beyond this point... */
  86. };
  87. /* The primary destination management functions */
  88. extern void BeginCommand(char *pname, int operation, TupleDesc attinfo,
  89.  bool isIntoRel, bool isIntoPortal, char *tag,
  90.  CommandDest dest);
  91. extern DestReceiver *DestToFunction(CommandDest dest);
  92. extern void EndCommand(char *commandTag, CommandDest dest);
  93. /* Additional functions that go with destination management, more or less. */
  94. extern void SendCopyBegin(void);
  95. extern void ReceiveCopyBegin(void);
  96. extern void NullCommand(CommandDest dest);
  97. extern void ReadyForQuery(CommandDest dest);
  98. extern void UpdateCommandInfo(int operation, Oid lastoid, uint32 tuples);
  99. #endif  /* DEST_H */