/*-------------------------------------------------------------------------
 *
 * nodeMemoize.h
 *
 *
 *
 * Portions Copyright (c) 2021-2023, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/executor/nodeMemoize.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef NODEMEMOIZE_H
#define NODEMEMOIZE_H

#include "access/parallel.h"
#include "nodes/execnodes.h"

extern MemoizeState *ExecInitMemoize(Memoize *node, EState *estate, int eflags);
extern void ExecEndMemoize(MemoizeState *node);
extern void ExecReScanMemoize(MemoizeState *node);
extern double ExecEstimateCacheEntryOverheadBytes(double ntuples);
extern void ExecMemoizeEstimate(MemoizeState *node,
								ParallelContext *pcxt);
extern void ExecMemoizeInitializeDSM(MemoizeState *node,
									 ParallelContext *pcxt);
extern void ExecMemoizeInitializeWorker(MemoizeState *node,
										ParallelWorkerContext *pwcxt);
extern void ExecMemoizeRetrieveInstrumentation(MemoizeState *node);

extern void ExecSquelchMemoize(MemoizeState *node, bool force);

#endif							/* NODEMEMOIZE_H */
