1 #ifndef PG_LOGICAL_COMPAT_H
2 #define PG_LOGICAL_COMPAT_H
3 
4 #include "access/amapi.h"
5 #include "access/heapam.h"
6 #include "access/table.h"
7 #include "access/tableam.h"
8 #include "utils/varlena.h"
9 
10 #define WaitLatchOrSocket(latch, wakeEvents, sock, timeout) \
11 	WaitLatchOrSocket(latch, wakeEvents, sock, timeout, PG_WAIT_EXTENSION)
12 
13 #define WaitLatch(latch, wakeEvents, timeout) \
14 	WaitLatch(latch, wakeEvents, timeout, PG_WAIT_EXTENSION)
15 
16 #define GetCurrentIntegerTimestamp() GetCurrentTimestamp()
17 
18 #define pg_analyze_and_rewrite(parsetree, query_string, paramTypes, numParams) \
19 	pg_analyze_and_rewrite(parsetree, query_string, paramTypes, numParams, NULL)
20 
21 #define CreateCommandTag(raw_parsetree) \
22 	CreateCommandTag(raw_parsetree->stmt)
23 
24 #define PortalRun(portal, count, isTopLevel, dest, altdest, qc) \
25 	PortalRun(portal, count, isTopLevel, true, dest, altdest, qc)
26 
27 #define ExecAlterExtensionStmt(stmt) \
28 	ExecAlterExtensionStmt(NULL, stmt)
29 
30 /*
31  * Pg 11 adds an argument here.  We don't need to special-case 2ndQPostgres
32  * anymore because it adds a separate ExecBRDeleteTriggers2 now, so this only
33  * handles the stock Pg11 change.
34  */
35 #define ExecBRDeleteTriggers(estate, epqstate, relinfo, tupleid, fdw_trigtuple) \
36  	ExecBRDeleteTriggers(estate, epqstate, relinfo, tupleid, fdw_trigtuple, NULL)
37 
38 #undef ExecEvalExpr
39 #define ExecEvalExpr(expr, econtext, isNull, isDone) \
40 	((*(expr)->evalfunc) (expr, econtext, isNull))
41 
42 #define Form_pg_sequence Form_pg_sequence_data
43 
44 #define InitResultRelInfo(resultRelInfo, resultRelationDesc, resultRelationIndex, instrument_options) \
45 	InitResultRelInfo(resultRelInfo, resultRelationDesc, resultRelationIndex, NULL, instrument_options)
46 
47 #define ExecARUpdateTriggers(estate, relinfo, tupleid, fdw_trigtuple, newslot, recheckIndexes) \
48 	ExecARUpdateTriggers(estate, relinfo, tupleid, fdw_trigtuple, newslot, recheckIndexes, NULL)
49 
50 #define ExecARInsertTriggers(estate, relinfo, slot, recheckIndexes) \
51 	ExecARInsertTriggers(estate, relinfo, slot, recheckIndexes, NULL)
52 
53 #define ExecARDeleteTriggers(estate, relinfo, tupleid, fdw_trigtuple) \
54 	ExecARDeleteTriggers(estate, relinfo, tupleid, fdw_trigtuple, NULL)
55 
56 #define makeDefElem(name, arg) makeDefElem(name, arg, -1)
57 
58 #define PGLstandard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, sentToRemote, qc) \
59 	standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc)
60 
61 #define PGLnext_ProcessUtility_hook(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, sentToRemote, qc) \
62 	next_ProcessUtility_hook(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc)
63 
64 #define PGLCreateTrigger(stmt, queryString, relOid, refRelOid, constraintOid, indexOid, isInternal) \
65 	CreateTrigger(stmt, queryString, relOid, refRelOid, constraintOid, indexOid, InvalidOid, InvalidOid, NULL, isInternal, false);
66 
67 #define	PGLDoCopy(stmt, queryString, processed) \
68 	do \
69 	{ \
70 		ParseState* pstate = make_parsestate(NULL); \
71 		DoCopy(pstate, stmt, -1, 0, processed); \
72 		free_parsestate(pstate); \
73 	} while (false);
74 
75 #define PGLReplicationSlotCreate(name, db_specific, persistency) ReplicationSlotCreate(name, db_specific, persistency)
76 
77 #ifndef rbtxn_has_catalog_changes
78 #define rbtxn_has_catalog_changes(txn) (txn->has_catalog_changes)
79 #endif
80 
81 /* ad7dbee368a */
82 #define ExecInitExtraTupleSlot(estate) \
83 	ExecInitExtraTupleSlot(estate, NULL, &TTSOpsHeapTuple)
84 
85 #define ACL_OBJECT_RELATION OBJECT_TABLE
86 #define ACL_OBJECT_SEQUENCE OBJECT_SEQUENCE
87 
88 #define DatumGetJsonb DatumGetJsonbP
89 
90 #define pgl_heap_attisnull(tup, attnum, tupledesc) \
91 	heap_attisnull(tup, attnum, tupledesc)
92 
93 /* 2a10fdc4307a667883f7a3369cb93a721ade9680 */
94 #define getObjectDescription(object) getObjectDescription(object, false)
95 
96 #endif
97