text: /*-------------------------------------------------------------------------
   *
   * prepare.h
   *	  PREPARE, EXECUTE and DEALLOCATE commands, and prepared-stmt storage
   *
   *
   * Copyright (c) 2002-2011, PostgreSQL Global Development Group
   *
   * src/include/commands/prepare.h
   *
   *-------------------------------------------------------------------------
   */
  #ifndef PREPARE_H
  #define PREPARE_H
  
  #include "commands/explain.h"
  #include "utils/plancache.h"
  #include "utils/timestamp.h"
  
  /*
   * The data structure representing a prepared statement.  This is now just
   * a thin veneer over a plancache entry --- the main addition is that of
   * a name.
   *
   * Note: all subsidiary storage lives in the referenced plancache entry.
   */
  typedef struct
  {
  	/* dynahash.c requires key to be first field */
  	char		stmt_name[NAMEDATALEN];
  	CachedPlanSource *plansource;		/* the actual cached plan */
  	bool		from_sql;		/* prepared via SQL, not FE/BE protocol? */
  	TimestampTz prepare_time;	/* the time when the stmt was prepared */
  } PreparedStatement;
  
  
  /* Utility statements PREPARE, EXECUTE, DEALLOCATE, EXPLAIN EXECUTE */
  extern void PrepareQuery(PrepareStmt *stmt, const char *queryString);
  extern void ExecuteQuery(ExecuteStmt *stmt, const char *queryString,
  			 ParamListInfo params,
  			 DestReceiver *dest, char *completionTag);
  extern void DeallocateQuery(DeallocateStmt *stmt);
  extern void ExplainExecuteQuery(ExecuteStmt *execstmt, ExplainState *es,
  					const char *queryString, ParamListInfo params);
  
  /* Low-level access to stored prepared statements */
  extern void StorePreparedStatement(const char *stmt_name,
  					   Node *raw_parse_tree,
  					   const char *query_string,
  					   NodeTag	   sourceTag, /* GPDB */
  					   const char *commandTag,
  					   Oid *param_types,
  					   int num_params,
  					   int cursor_options,
  					   List *stmt_list,
  					   bool from_sql);
  extern PreparedStatement *FetchPreparedStatement(const char *stmt_name,
  					   bool throwError);
  extern void DropPreparedStatement(const char *stmt_name, bool showError);
  extern TupleDesc FetchPreparedStatementResultDesc(PreparedStatement *stmt);
  extern List *FetchPreparedStatementTargetList(PreparedStatement *stmt);
  
  void		DropAllPreparedStatements(void);
  
  #endif   /* PREPARE_H */
  