blob: 532219ade23925beb37c67cccf24aa7f780ca4cb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/*-------------------------------------------------------------------------
*
* queryenvironment.h
* Access to functions to mutate the query environment and retrieve the
* actual data related to entries (if any).
*
* Portions Copyright (c) 1996-2023, 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 */
|