* PREPARE, EXECUTE and DEALLOCATE commands, and prepared-stmt storage
*
*
- * Copyright (c) 2002-2003, PostgreSQL Global Development Group
+ * Copyright (c) 2002-2010, PostgreSQL Global Development Group
*
- * $Id: prepare.h,v 1.8 2003/08/08 21:42:40 momjian Exp $
+ * src/include/commands/prepare.h
*
*-------------------------------------------------------------------------
*/
#ifndef PREPARE_H
#define PREPARE_H
-#include "executor/executor.h"
-#include "nodes/parsenodes.h"
-#include "tcop/dest.h"
-
+#include "commands/explain.h"
+#include "utils/plancache.h"
+#include "utils/timestamp.h"
/*
- * The data structure representing a prepared statement
+ * 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 context denoted by the context
- * field. However, the string referenced by commandTag is not subsidiary
- * storage; it is assumed to be a compile-time-constant string. As with
- * portals, commandTag shall be NULL if and only if the original query string
- * (before rewriting) was an empty string.
+ * Note: all subsidiary storage lives in the referenced plancache entry.
*/
typedef struct
{
/* dynahash.c requires key to be first field */
char stmt_name[NAMEDATALEN];
- char *query_string; /* text of query, or NULL */
- const char *commandTag; /* command tag (a constant!), or NULL */
- List *query_list; /* list of queries */
- List *plan_list; /* list of plans */
- List *argtype_list; /* list of parameter type OIDs */
- MemoryContext context; /* context containing this query */
+ 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);
-extern void ExecuteQuery(ExecuteStmt *stmt, DestReceiver *dest);
+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(ExplainStmt *stmt, TupOutputState *tstate);
+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,
const char *commandTag,
- List *query_list,
- List *plan_list,
- List *argtype_list);
+ 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 List *FetchPreparedStatementParams(const char *stmt_name);
extern TupleDesc FetchPreparedStatementResultDesc(PreparedStatement *stmt);
+extern List *FetchPreparedStatementTargetList(PreparedStatement *stmt);
+
+void DropAllPreparedStatements(void);
#endif /* PREPARE_H */