75 lines
2.7 KiB
C
75 lines
2.7 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* queryenvironment.h
|
|
* Access to functions to mutate the query environment and retrieve the
|
|
* actual data related to entries (if any).
|
|
*
|
|
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/utils/queryenvironment.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef QUERYENVIRONMENT_H
|
|
#define QUERYENVIRONMENT_H
|
|
|
|
#include "access/tupdesc.h"
|
|
|
|
|
|
typedef enum EphemeralNameRelationType
|
|
{
|
|
ENR_NAMED_TUPLESTORE, /* named tuplestore relation; e.g., deltas */
|
|
} EphemeralNameRelationType;
|
|
|
|
/*
|
|
* Some ephemeral named relations must match some relation (e.g., trigger
|
|
* transition tables), so to properly handle cached plans and DDL, we should
|
|
* carry the OID of that relation. In other cases an ENR might be independent
|
|
* of any relation which is stored in the system catalogs, so we need to be
|
|
* able to directly store the TupleDesc. We never need both.
|
|
*/
|
|
typedef struct EphemeralNamedRelationMetadataData
|
|
{
|
|
char *name; /* name used to identify the relation */
|
|
|
|
/* only one of the next two fields should be used */
|
|
Oid reliddesc; /* oid of relation to get tupdesc */
|
|
TupleDesc tupdesc; /* description of result rows */
|
|
|
|
EphemeralNameRelationType enrtype; /* to identify type of relation */
|
|
double enrtuples; /* estimated number of tuples */
|
|
} EphemeralNamedRelationMetadataData;
|
|
|
|
typedef EphemeralNamedRelationMetadataData *EphemeralNamedRelationMetadata;
|
|
|
|
/*
|
|
* Ephemeral Named Relation data; used for parsing named relations not in the
|
|
* catalog, like transition tables in AFTER triggers.
|
|
*/
|
|
typedef struct EphemeralNamedRelationData
|
|
{
|
|
EphemeralNamedRelationMetadataData md;
|
|
void *reldata; /* structure for execution-time access to data */
|
|
} EphemeralNamedRelationData;
|
|
|
|
typedef EphemeralNamedRelationData *EphemeralNamedRelation;
|
|
|
|
/*
|
|
* This is an opaque structure outside of queryenvironment.c itself. The
|
|
* intention is to be able to change the implementation or add new context
|
|
* features without needing to change existing code for use of existing
|
|
* features.
|
|
*/
|
|
typedef struct QueryEnvironment QueryEnvironment;
|
|
|
|
|
|
extern QueryEnvironment *create_queryEnv(void);
|
|
extern EphemeralNamedRelationMetadata get_visible_ENR_metadata(QueryEnvironment *queryEnv, const char *refname);
|
|
extern void register_ENR(QueryEnvironment *queryEnv, EphemeralNamedRelation enr);
|
|
extern void unregister_ENR(QueryEnvironment *queryEnv, const char *name);
|
|
extern EphemeralNamedRelation get_ENR(QueryEnvironment *queryEnv, const char *name);
|
|
extern TupleDesc ENRMetadataGetTupDesc(EphemeralNamedRelationMetadata enrmd);
|
|
|
|
#endif /* QUERYENVIRONMENT_H */
|