mirror of https://github.com/citusdata/citus.git
Remove pg_version_compat.h '>= PGVERSION_16' entries
parent
511c10fcc1
commit
95e00fd2c3
|
|
@ -42,6 +42,7 @@
|
||||||
#include "parser/parse_relation.h"
|
#include "parser/parse_relation.h"
|
||||||
#include "parser/parsetree.h"
|
#include "parser/parsetree.h"
|
||||||
#include "utils/builtins.h"
|
#include "utils/builtins.h"
|
||||||
|
#include "utils/guc.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
#include "utils/relcache.h"
|
#include "utils/relcache.h"
|
||||||
#include "utils/ruleutils.h"
|
#include "utils/ruleutils.h"
|
||||||
|
|
@ -547,7 +548,7 @@ ColumnarIndexScanAdditionalCost(PlannerInfo *root, RelOptInfo *rel,
|
||||||
* "anti-correlated" (-1) since both help us avoiding from reading the
|
* "anti-correlated" (-1) since both help us avoiding from reading the
|
||||||
* same stripe again and again.
|
* same stripe again and again.
|
||||||
*/
|
*/
|
||||||
double absIndexCorrelation = float_abs(indexCorrelation);
|
double absIndexCorrelation = fabs(indexCorrelation);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* To estimate the number of stripes that we need to read, we do linear
|
* To estimate the number of stripes that we need to read, we do linear
|
||||||
|
|
@ -666,7 +667,7 @@ CheckVarStats(PlannerInfo *root, Var *var, Oid sortop, float4 *absVarCorrelation
|
||||||
* If the Var is not highly correlated, then the chunk's min/max bounds
|
* If the Var is not highly correlated, then the chunk's min/max bounds
|
||||||
* will be nearly useless.
|
* will be nearly useless.
|
||||||
*/
|
*/
|
||||||
if (float_abs(varCorrelation) < ColumnarQualPushdownCorrelationThreshold)
|
if (fabs(varCorrelation) < ColumnarQualPushdownCorrelationThreshold)
|
||||||
{
|
{
|
||||||
if (absVarCorrelation)
|
if (absVarCorrelation)
|
||||||
{
|
{
|
||||||
|
|
@ -674,7 +675,7 @@ CheckVarStats(PlannerInfo *root, Var *var, Oid sortop, float4 *absVarCorrelation
|
||||||
* Report absVarCorrelation if caller wants to know why given
|
* Report absVarCorrelation if caller wants to know why given
|
||||||
* var is rejected.
|
* var is rejected.
|
||||||
*/
|
*/
|
||||||
*absVarCorrelation = float_abs(varCorrelation);
|
*absVarCorrelation = fabs(varCorrelation);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -726,7 +726,7 @@ ReadStripeSkipList(Relation rel, uint64 stripe,
|
||||||
ScanKeyData scanKey[2];
|
ScanKeyData scanKey[2];
|
||||||
|
|
||||||
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
||||||
RelationPhysicalIdentifier_compat(rel));
|
rel->rd_locator);
|
||||||
|
|
||||||
Oid columnarChunkOid = ColumnarChunkRelationId();
|
Oid columnarChunkOid = ColumnarChunkRelationId();
|
||||||
Relation columnarChunk = table_open(columnarChunkOid, AccessShareLock);
|
Relation columnarChunk = table_open(columnarChunkOid, AccessShareLock);
|
||||||
|
|
@ -1273,7 +1273,7 @@ List *
|
||||||
StripesForRelfilelocator(Relation rel)
|
StripesForRelfilelocator(Relation rel)
|
||||||
{
|
{
|
||||||
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
||||||
RelationPhysicalIdentifier_compat(rel));
|
rel->rd_locator);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PG18 requires snapshot to be active or registered before it's used
|
* PG18 requires snapshot to be active or registered before it's used
|
||||||
|
|
@ -1305,7 +1305,7 @@ uint64
|
||||||
GetHighestUsedAddress(Relation rel)
|
GetHighestUsedAddress(Relation rel)
|
||||||
{
|
{
|
||||||
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
||||||
RelationPhysicalIdentifier_compat(rel));
|
rel->rd_locator);
|
||||||
|
|
||||||
uint64 highestUsedAddress = 0;
|
uint64 highestUsedAddress = 0;
|
||||||
uint64 highestUsedId = 0;
|
uint64 highestUsedId = 0;
|
||||||
|
|
@ -1326,10 +1326,8 @@ GetHighestUsedAddress(Relation rel)
|
||||||
Oid
|
Oid
|
||||||
ColumnarRelationId(Oid relid, RelFileLocator relfilelocator)
|
ColumnarRelationId(Oid relid, RelFileLocator relfilelocator)
|
||||||
{
|
{
|
||||||
return OidIsValid(relid) ? relid : RelidByRelfilenumber(RelationTablespace_compat(
|
return OidIsValid(relid) ? relid : RelidByRelfilenumber(relfilelocator.spcOid,
|
||||||
relfilelocator),
|
relfilelocator.relNumber);
|
||||||
RelationPhysicalIdentifierNumber_compat(
|
|
||||||
relfilelocator));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1620,7 +1618,7 @@ DeleteMetadataRows(Relation rel)
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
uint64 storageId = LookupStorageId(RelationPrecomputeOid(rel),
|
||||||
RelationPhysicalIdentifier_compat(rel));
|
rel->rd_locator);
|
||||||
|
|
||||||
DeleteStorageFromColumnarMetadataTable(ColumnarStripeRelationId(),
|
DeleteStorageFromColumnarMetadataTable(ColumnarStripeRelationId(),
|
||||||
Anum_columnar_stripe_storageid,
|
Anum_columnar_stripe_storageid,
|
||||||
|
|
|
||||||
|
|
@ -255,8 +255,7 @@ ColumnarReadFlushPendingWrites(ColumnarReadState *readState)
|
||||||
{
|
{
|
||||||
Assert(!readState->snapshotRegisteredByUs);
|
Assert(!readState->snapshotRegisteredByUs);
|
||||||
|
|
||||||
RelFileNumber relfilenumber = RelationPhysicalIdentifierNumber_compat(
|
RelFileNumber relfilenumber = readState->relation->rd_locator.relNumber;
|
||||||
RelationPhysicalIdentifier_compat(readState->relation));
|
|
||||||
FlushWriteStateForRelfilenumber(relfilenumber, GetCurrentSubTransactionId());
|
FlushWriteStateForRelfilenumber(relfilenumber, GetCurrentSubTransactionId());
|
||||||
|
|
||||||
if (readState->snapshot == InvalidSnapshot || !IsMVCCSnapshot(readState->snapshot))
|
if (readState->snapshot == InvalidSnapshot || !IsMVCCSnapshot(readState->snapshot))
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ ColumnarStorageInit(SMgrRelation srel, uint64 storageId)
|
||||||
(char *) &metapage, sizeof(ColumnarMetapage));
|
(char *) &metapage, sizeof(ColumnarMetapage));
|
||||||
phdr->pd_lower += sizeof(ColumnarMetapage);
|
phdr->pd_lower += sizeof(ColumnarMetapage);
|
||||||
|
|
||||||
log_newpage(RelationPhysicalIdentifierBackend_compat(&srel), MAIN_FORKNUM,
|
log_newpage(&srel->smgr_rlocator.locator, MAIN_FORKNUM,
|
||||||
COLUMNAR_METAPAGE_BLOCKNO, page, true);
|
COLUMNAR_METAPAGE_BLOCKNO, page, true);
|
||||||
PageSetChecksumInplace(page, COLUMNAR_METAPAGE_BLOCKNO);
|
PageSetChecksumInplace(page, COLUMNAR_METAPAGE_BLOCKNO);
|
||||||
smgrextend(srel, MAIN_FORKNUM, COLUMNAR_METAPAGE_BLOCKNO, page, true);
|
smgrextend(srel, MAIN_FORKNUM, COLUMNAR_METAPAGE_BLOCKNO, page, true);
|
||||||
|
|
@ -196,7 +196,7 @@ ColumnarStorageInit(SMgrRelation srel, uint64 storageId)
|
||||||
/* write empty page */
|
/* write empty page */
|
||||||
PageInit(page, BLCKSZ, 0);
|
PageInit(page, BLCKSZ, 0);
|
||||||
|
|
||||||
log_newpage(RelationPhysicalIdentifierBackend_compat(&srel), MAIN_FORKNUM,
|
log_newpage(&srel->smgr_rlocator.locator, MAIN_FORKNUM,
|
||||||
COLUMNAR_EMPTY_BLOCKNO, page, true);
|
COLUMNAR_EMPTY_BLOCKNO, page, true);
|
||||||
PageSetChecksumInplace(page, COLUMNAR_EMPTY_BLOCKNO);
|
PageSetChecksumInplace(page, COLUMNAR_EMPTY_BLOCKNO);
|
||||||
smgrextend(srel, MAIN_FORKNUM, COLUMNAR_EMPTY_BLOCKNO, page, true);
|
smgrextend(srel, MAIN_FORKNUM, COLUMNAR_EMPTY_BLOCKNO, page, true);
|
||||||
|
|
|
||||||
|
|
@ -208,8 +208,7 @@ columnar_beginscan_extended(Relation relation, Snapshot snapshot,
|
||||||
uint32 flags, Bitmapset *attr_needed, List *scanQual)
|
uint32 flags, Bitmapset *attr_needed, List *scanQual)
|
||||||
{
|
{
|
||||||
CheckCitusColumnarVersion(ERROR);
|
CheckCitusColumnarVersion(ERROR);
|
||||||
RelFileNumber relfilenumber = RelationPhysicalIdentifierNumber_compat(
|
RelFileNumber relfilenumber = relation->rd_locator.relNumber;
|
||||||
RelationPhysicalIdentifier_compat(relation));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A memory context to use for scan-wide data, including the lazily
|
* A memory context to use for scan-wide data, including the lazily
|
||||||
|
|
@ -435,8 +434,7 @@ columnar_index_fetch_begin(Relation rel)
|
||||||
{
|
{
|
||||||
CheckCitusColumnarVersion(ERROR);
|
CheckCitusColumnarVersion(ERROR);
|
||||||
|
|
||||||
RelFileNumber relfilenumber = RelationPhysicalIdentifierNumber_compat(
|
RelFileNumber relfilenumber = rel->rd_locator.relNumber;
|
||||||
RelationPhysicalIdentifier_compat(rel));
|
|
||||||
if (PendingWritesInUpperTransactions(relfilenumber, GetCurrentSubTransactionId()))
|
if (PendingWritesInUpperTransactions(relfilenumber, GetCurrentSubTransactionId()))
|
||||||
{
|
{
|
||||||
/* XXX: maybe we can just flush the data and continue */
|
/* XXX: maybe we can just flush the data and continue */
|
||||||
|
|
@ -865,11 +863,9 @@ columnar_relation_set_new_filelocator(Relation rel,
|
||||||
* state. If they are equal, this is a new relation object and we don't
|
* state. If they are equal, this is a new relation object and we don't
|
||||||
* need to clean anything.
|
* need to clean anything.
|
||||||
*/
|
*/
|
||||||
if (RelationPhysicalIdentifierNumber_compat(RelationPhysicalIdentifier_compat(rel)) !=
|
if (rel->rd_locator.relNumber != newrlocator->relNumber)
|
||||||
RelationPhysicalIdentifierNumberPtr_compat(newrlocator))
|
|
||||||
{
|
{
|
||||||
MarkRelfilenumberDropped(RelationPhysicalIdentifierNumber_compat(
|
MarkRelfilenumberDropped(rel->rd_locator.relNumber,
|
||||||
RelationPhysicalIdentifier_compat(rel)),
|
|
||||||
GetCurrentSubTransactionId());
|
GetCurrentSubTransactionId());
|
||||||
|
|
||||||
DeleteMetadataRows(rel);
|
DeleteMetadataRows(rel);
|
||||||
|
|
@ -892,9 +888,9 @@ static void
|
||||||
columnar_relation_nontransactional_truncate(Relation rel)
|
columnar_relation_nontransactional_truncate(Relation rel)
|
||||||
{
|
{
|
||||||
CheckCitusColumnarVersion(ERROR);
|
CheckCitusColumnarVersion(ERROR);
|
||||||
RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel);
|
RelFileLocator relfilelocator = rel->rd_locator;
|
||||||
|
|
||||||
NonTransactionDropWriteState(RelationPhysicalIdentifierNumber_compat(relfilelocator));
|
NonTransactionDropWriteState(relfilelocator.relNumber);
|
||||||
|
|
||||||
/* Delete old relfilenode metadata */
|
/* Delete old relfilenode metadata */
|
||||||
DeleteMetadataRows(rel);
|
DeleteMetadataRows(rel);
|
||||||
|
|
@ -1843,7 +1839,7 @@ TupleSortSkipSmallerItemPointers(Tuplesortstate *tupleSort, ItemPointer targetIt
|
||||||
Datum *abbrev = NULL;
|
Datum *abbrev = NULL;
|
||||||
Datum tsDatum;
|
Datum tsDatum;
|
||||||
bool tsDatumIsNull;
|
bool tsDatumIsNull;
|
||||||
if (!tuplesort_getdatum_compat(tupleSort, forwardDirection, false,
|
if (!tuplesort_getdatum(tupleSort, forwardDirection, false,
|
||||||
&tsDatum, &tsDatumIsNull, abbrev))
|
&tsDatum, &tsDatumIsNull, abbrev))
|
||||||
{
|
{
|
||||||
ItemPointerSetInvalid(&tsItemPointerData);
|
ItemPointerSetInvalid(&tsItemPointerData);
|
||||||
|
|
@ -2085,12 +2081,12 @@ ColumnarTableDropHook(Oid relid)
|
||||||
* tableam tables storage is managed by postgres.
|
* tableam tables storage is managed by postgres.
|
||||||
*/
|
*/
|
||||||
Relation rel = table_open(relid, AccessExclusiveLock);
|
Relation rel = table_open(relid, AccessExclusiveLock);
|
||||||
RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel);
|
RelFileLocator relfilelocator = rel->rd_locator;
|
||||||
|
|
||||||
DeleteMetadataRows(rel);
|
DeleteMetadataRows(rel);
|
||||||
DeleteColumnarTableOptions(rel->rd_id, true);
|
DeleteColumnarTableOptions(rel->rd_id, true);
|
||||||
|
|
||||||
MarkRelfilenumberDropped(RelationPhysicalIdentifierNumber_compat(relfilelocator),
|
MarkRelfilenumberDropped(relfilelocator.relNumber,
|
||||||
GetCurrentSubTransactionId());
|
GetCurrentSubTransactionId());
|
||||||
|
|
||||||
/* keep the lock since we did physical changes to the relation */
|
/* keep the lock since we did physical changes to the relation */
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ ColumnarBeginWrite(Relation rel,
|
||||||
ColumnarOptions options,
|
ColumnarOptions options,
|
||||||
TupleDesc tupleDescriptor)
|
TupleDesc tupleDescriptor)
|
||||||
{
|
{
|
||||||
RelFileLocator relfilelocator = RelationPhysicalIdentifier_compat(rel);
|
RelFileLocator relfilelocator = rel->rd_locator;
|
||||||
|
|
||||||
/* get comparison function pointers for each of the columns */
|
/* get comparison function pointers for each of the columns */
|
||||||
uint32 columnCount = tupleDescriptor->natts;
|
uint32 columnCount = tupleDescriptor->natts;
|
||||||
|
|
|
||||||
|
|
@ -146,9 +146,7 @@ columnar_init_write_state(Relation relation, TupleDesc tupdesc,
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteStateMapEntry *hashEntry = hash_search(WriteStateMap,
|
WriteStateMapEntry *hashEntry = hash_search(WriteStateMap,
|
||||||
&RelationPhysicalIdentifierNumber_compat(
|
&(relation->rd_locator.relNumber),
|
||||||
RelationPhysicalIdentifier_compat(
|
|
||||||
relation)),
|
|
||||||
HASH_ENTER, &found);
|
HASH_ENTER, &found);
|
||||||
if (!found)
|
if (!found)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,7 @@ CreateDomainStmt *
|
||||||
RecreateDomainStmt(Oid domainOid)
|
RecreateDomainStmt(Oid domainOid)
|
||||||
{
|
{
|
||||||
CreateDomainStmt *stmt = makeNode(CreateDomainStmt);
|
CreateDomainStmt *stmt = makeNode(CreateDomainStmt);
|
||||||
stmt->domainname = stringToQualifiedNameList_compat(format_type_be_qualified(
|
stmt->domainname = stringToQualifiedNameList(format_type_be_qualified(domainOid), NULL);
|
||||||
domainOid));
|
|
||||||
|
|
||||||
HeapTuple tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(domainOid));
|
HeapTuple tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(domainOid));
|
||||||
if (!HeapTupleIsValid(tup))
|
if (!HeapTupleIsValid(tup))
|
||||||
|
|
|
||||||
|
|
@ -734,7 +734,7 @@ MakeSetStatementArguments(char *configurationName, char *configurationValue)
|
||||||
* using this function
|
* using this function
|
||||||
*/
|
*/
|
||||||
int gucCount = 0;
|
int gucCount = 0;
|
||||||
struct config_generic **gucVariables = get_guc_variables_compat(&gucCount);
|
struct config_generic **gucVariables = get_guc_variables(&gucCount);
|
||||||
|
|
||||||
struct config_generic **matchingConfig =
|
struct config_generic **matchingConfig =
|
||||||
(struct config_generic **) SafeBsearch((void *) &key,
|
(struct config_generic **) SafeBsearch((void *) &key,
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ truncate_local_data_after_distributing_table(PG_FUNCTION_ARGS)
|
||||||
TruncateStmt *truncateStmt = makeNode(TruncateStmt);
|
TruncateStmt *truncateStmt = makeNode(TruncateStmt);
|
||||||
|
|
||||||
char *relationName = generate_qualified_relation_name(relationId);
|
char *relationName = generate_qualified_relation_name(relationId);
|
||||||
List *names = stringToQualifiedNameList_compat(relationName);
|
List *names = stringToQualifiedNameList(relationName, NULL);
|
||||||
truncateStmt->relations = list_make1(makeRangeVarFromNameList(names));
|
truncateStmt->relations = list_make1(makeRangeVarFromNameList(names));
|
||||||
truncateStmt->restart_seqs = false;
|
truncateStmt->restart_seqs = false;
|
||||||
truncateStmt->behavior = DROP_CASCADE;
|
truncateStmt->behavior = DROP_CASCADE;
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ RecreateCompositeTypeStmt(Oid typeOid)
|
||||||
Assert(get_typtype(typeOid) == TYPTYPE_COMPOSITE);
|
Assert(get_typtype(typeOid) == TYPTYPE_COMPOSITE);
|
||||||
|
|
||||||
CompositeTypeStmt *stmt = makeNode(CompositeTypeStmt);
|
CompositeTypeStmt *stmt = makeNode(CompositeTypeStmt);
|
||||||
List *names = stringToQualifiedNameList_compat(format_type_be_qualified(typeOid));
|
List *names = stringToQualifiedNameList(format_type_be_qualified(typeOid), NULL);
|
||||||
stmt->typevar = makeRangeVarFromNameList(names);
|
stmt->typevar = makeRangeVarFromNameList(names);
|
||||||
stmt->coldeflist = CompositeTypeColumnDefList(typeOid);
|
stmt->coldeflist = CompositeTypeColumnDefList(typeOid);
|
||||||
|
|
||||||
|
|
@ -254,7 +254,7 @@ RecreateEnumStmt(Oid typeOid)
|
||||||
Assert(get_typtype(typeOid) == TYPTYPE_ENUM);
|
Assert(get_typtype(typeOid) == TYPTYPE_ENUM);
|
||||||
|
|
||||||
CreateEnumStmt *stmt = makeNode(CreateEnumStmt);
|
CreateEnumStmt *stmt = makeNode(CreateEnumStmt);
|
||||||
stmt->typeName = stringToQualifiedNameList_compat(format_type_be_qualified(typeOid));
|
stmt->typeName = stringToQualifiedNameList(format_type_be_qualified(typeOid), NULL);
|
||||||
stmt->vals = EnumValsList(typeOid);
|
stmt->vals = EnumValsList(typeOid);
|
||||||
|
|
||||||
return stmt;
|
return stmt;
|
||||||
|
|
@ -567,8 +567,7 @@ CreateTypeDDLCommandsIdempotent(const ObjectAddress *typeAddress)
|
||||||
char *
|
char *
|
||||||
GenerateBackupNameForTypeCollision(const ObjectAddress *address)
|
GenerateBackupNameForTypeCollision(const ObjectAddress *address)
|
||||||
{
|
{
|
||||||
List *names = stringToQualifiedNameList_compat(format_type_be_qualified(
|
List *names = stringToQualifiedNameList(format_type_be_qualified(address->objectId), NULL);
|
||||||
address->objectId));
|
|
||||||
RangeVar *rel = makeRangeVarFromNameList(names);
|
RangeVar *rel = makeRangeVarFromNameList(names);
|
||||||
|
|
||||||
char *newName = palloc0(NAMEDATALEN);
|
char *newName = palloc0(NAMEDATALEN);
|
||||||
|
|
|
||||||
|
|
@ -3195,7 +3195,7 @@ SignalMetadataSyncDaemon(Oid database, int sig)
|
||||||
int backendCount = pgstat_fetch_stat_numbackends();
|
int backendCount = pgstat_fetch_stat_numbackends();
|
||||||
for (int backend = 1; backend <= backendCount; backend++)
|
for (int backend = 1; backend <= backendCount; backend++)
|
||||||
{
|
{
|
||||||
LocalPgBackendStatus *localBeEntry = pgstat_fetch_stat_local_beentry(backend);
|
LocalPgBackendStatus *localBeEntry = pgstat_get_local_beentry_by_index(backend);
|
||||||
if (!localBeEntry)
|
if (!localBeEntry)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ PgGetObjectAddress(char *ttype, ArrayType *namearr, ArrayType *argsarr)
|
||||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
errmsg("name or argument lists may not contain nulls")));
|
errmsg("name or argument lists may not contain nulls")));
|
||||||
}
|
}
|
||||||
typename = typeStringToTypeName_compat(TextDatumGetCString(elems[0]), NULL);
|
typename = typeStringToTypeName(TextDatumGetCString(elems[0]), NULL);
|
||||||
}
|
}
|
||||||
else if (type == OBJECT_LARGEOBJECT)
|
else if (type == OBJECT_LARGEOBJECT)
|
||||||
{
|
{
|
||||||
|
|
@ -163,7 +163,7 @@ PgGetObjectAddress(char *ttype, ArrayType *namearr, ArrayType *argsarr)
|
||||||
errmsg("name or argument lists may not contain nulls")));
|
errmsg("name or argument lists may not contain nulls")));
|
||||||
}
|
}
|
||||||
args = lappend(args,
|
args = lappend(args,
|
||||||
typeStringToTypeName_compat(TextDatumGetCString(elems[i]),
|
typeStringToTypeName(TextDatumGetCString(elems[i]),
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2476,7 +2476,7 @@ GetSetCommandListForNewConnections(void)
|
||||||
List *commandList = NIL;
|
List *commandList = NIL;
|
||||||
|
|
||||||
int gucCount = 0;
|
int gucCount = 0;
|
||||||
struct config_generic **guc_vars = get_guc_variables_compat(&gucCount);
|
struct config_generic **guc_vars = get_guc_variables(&gucCount);
|
||||||
|
|
||||||
for (int gucIndex = 0; gucIndex < gucCount; gucIndex++)
|
for (int gucIndex = 0; gucIndex < gucCount; gucIndex++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ static RangeTblEntry *
|
||||||
AnchorRte(Query *subquery)
|
AnchorRte(Query *subquery)
|
||||||
{
|
{
|
||||||
FromExpr *joinTree = subquery->jointree;
|
FromExpr *joinTree = subquery->jointree;
|
||||||
Relids joinRelIds = get_relids_in_jointree_compat((Node *) joinTree, false, false);
|
Relids joinRelIds = get_relids_in_jointree((Node *) joinTree, false, false);
|
||||||
int currentRTEIndex = -1;
|
int currentRTEIndex = -1;
|
||||||
RangeTblEntry *anchorRangeTblEntry = NULL;
|
RangeTblEntry *anchorRangeTblEntry = NULL;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2803,7 +2803,7 @@ static void
|
||||||
OverridePostgresConfigProperties(void)
|
OverridePostgresConfigProperties(void)
|
||||||
{
|
{
|
||||||
int gucCount = 0;
|
int gucCount = 0;
|
||||||
struct config_generic **guc_vars = get_guc_variables_compat(&gucCount);
|
struct config_generic **guc_vars = get_guc_variables(&gucCount);
|
||||||
|
|
||||||
for (int gucIndex = 0; gucIndex < gucCount; gucIndex++)
|
for (int gucIndex = 0; gucIndex < gucCount; gucIndex++)
|
||||||
{
|
{
|
||||||
|
|
@ -2982,7 +2982,7 @@ ShowShardsForAppNamePrefixesCheckHook(char **newval, void **extra, GucSource sou
|
||||||
}
|
}
|
||||||
|
|
||||||
char *prefixAscii = pstrdup(appNamePrefix);
|
char *prefixAscii = pstrdup(appNamePrefix);
|
||||||
pg_clean_ascii_compat(prefixAscii, 0);
|
pg_clean_ascii(prefixAscii, 0);
|
||||||
|
|
||||||
if (strcmp(prefixAscii, appNamePrefix) != 0)
|
if (strcmp(prefixAscii, appNamePrefix) != 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include "storage/fd.h"
|
#include "storage/fd.h"
|
||||||
#include "utils/datum.h"
|
#include "utils/datum.h"
|
||||||
#include "utils/guc.h"
|
#include "utils/guc.h"
|
||||||
|
#include "utils/guc_tables.h"
|
||||||
#include "utils/hsearch.h"
|
#include "utils/hsearch.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,7 @@ FunctionOidExtended(const char *schemaName, const char *functionName, int argume
|
||||||
bool missingOK)
|
bool missingOK)
|
||||||
{
|
{
|
||||||
char *qualifiedFunctionName = quote_qualified_identifier(schemaName, functionName);
|
char *qualifiedFunctionName = quote_qualified_identifier(schemaName, functionName);
|
||||||
List *qualifiedFunctionNameList = stringToQualifiedNameList_compat(
|
List *qualifiedFunctionNameList = stringToQualifiedNameList(qualifiedFunctionName, NULL);
|
||||||
qualifiedFunctionName);
|
|
||||||
List *argumentList = NIL;
|
List *argumentList = NIL;
|
||||||
const bool findVariadics = false;
|
const bool findVariadics = false;
|
||||||
const bool findDefaults = false;
|
const bool findDefaults = false;
|
||||||
|
|
|
||||||
|
|
@ -526,8 +526,7 @@ CreateRenameTypeStmt(const ObjectAddress *address, char *newName)
|
||||||
RenameStmt *stmt = makeNode(RenameStmt);
|
RenameStmt *stmt = makeNode(RenameStmt);
|
||||||
|
|
||||||
stmt->renameType = OBJECT_TYPE;
|
stmt->renameType = OBJECT_TYPE;
|
||||||
stmt->object = (Node *) stringToQualifiedNameList_compat(format_type_be_qualified(
|
stmt->object = (Node *) stringToQualifiedNameList(format_type_be_qualified(address->objectId), NULL);
|
||||||
address->objectId));
|
|
||||||
stmt->newname = newName;
|
stmt->newname = newName;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ typedef struct DeferredErrorMessage
|
||||||
*/
|
*/
|
||||||
#define DeferredError(code, message, detail, hint) \
|
#define DeferredError(code, message, detail, hint) \
|
||||||
DeferredErrorInternal(code, message, detail, hint, __FILE__, __LINE__, \
|
DeferredErrorInternal(code, message, detail, hint, __FILE__, __LINE__, \
|
||||||
PG_FUNCNAME_MACRO)
|
__func__)
|
||||||
|
|
||||||
DeferredErrorMessage * DeferredErrorInternal(int code, const char *message,
|
DeferredErrorMessage * DeferredErrorInternal(int code, const char *message,
|
||||||
const char *detail, const char *hint,
|
const char *detail, const char *hint,
|
||||||
|
|
|
||||||
|
|
@ -461,178 +461,6 @@ getStxstattarget_compat(HeapTuple tup)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_16
|
|
||||||
|
|
||||||
#include "utils/guc_tables.h"
|
|
||||||
|
|
||||||
#define pg_clean_ascii_compat(a, b) pg_clean_ascii(a, b)
|
|
||||||
|
|
||||||
#define RelationPhysicalIdentifier_compat(a) ((a)->rd_locator)
|
|
||||||
#define RelationTablespace_compat(a) (a.spcOid)
|
|
||||||
#define RelationPhysicalIdentifierNumber_compat(a) (a.relNumber)
|
|
||||||
#define RelationPhysicalIdentifierNumberPtr_compat(a) (a->relNumber)
|
|
||||||
#define RelationPhysicalIdentifierBackend_compat(a) (a->smgr_rlocator.locator)
|
|
||||||
|
|
||||||
#define float_abs(a) fabs(a)
|
|
||||||
|
|
||||||
#define tuplesort_getdatum_compat(a, b, c, d, e, f) tuplesort_getdatum(a, b, c, d, e, f)
|
|
||||||
|
|
||||||
static inline struct config_generic **
|
|
||||||
get_guc_variables_compat(int *gucCount)
|
|
||||||
{
|
|
||||||
return get_guc_variables(gucCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define PG_FUNCNAME_MACRO __func__
|
|
||||||
|
|
||||||
#define stringToQualifiedNameList_compat(a) stringToQualifiedNameList(a, NULL)
|
|
||||||
#define typeStringToTypeName_compat(a, b) typeStringToTypeName(a, b)
|
|
||||||
|
|
||||||
#define get_relids_in_jointree_compat(a, b, c) get_relids_in_jointree(a, b, c)
|
|
||||||
|
|
||||||
#define object_ownercheck(a, b, c) object_ownercheck(a, b, c)
|
|
||||||
#define object_aclcheck(a, b, c, d) object_aclcheck(a, b, c, d)
|
|
||||||
|
|
||||||
#define pgstat_fetch_stat_local_beentry(a) pgstat_get_local_beentry_by_index(a)
|
|
||||||
|
|
||||||
#define have_createdb_privilege() have_createdb_privilege()
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include "miscadmin.h"
|
|
||||||
|
|
||||||
#include "catalog/pg_authid.h"
|
|
||||||
#include "catalog/pg_class_d.h"
|
|
||||||
#include "catalog/pg_database_d.h"
|
|
||||||
#include "catalog/pg_namespace.h"
|
|
||||||
#include "catalog/pg_proc_d.h"
|
|
||||||
#include "storage/relfilenode.h"
|
|
||||||
#include "utils/guc.h"
|
|
||||||
#include "utils/guc_tables.h"
|
|
||||||
#include "utils/syscache.h"
|
|
||||||
|
|
||||||
#define pg_clean_ascii_compat(a, b) pg_clean_ascii(a)
|
|
||||||
|
|
||||||
#define RelationPhysicalIdentifier_compat(a) ((a)->rd_node)
|
|
||||||
#define RelationTablespace_compat(a) (a.spcNode)
|
|
||||||
#define RelationPhysicalIdentifierNumber_compat(a) (a.relNode)
|
|
||||||
#define RelationPhysicalIdentifierNumberPtr_compat(a) (a->relNode)
|
|
||||||
#define RelationPhysicalIdentifierBackend_compat(a) (a->smgr_rnode.node)
|
|
||||||
typedef RelFileNode RelFileLocator;
|
|
||||||
typedef Oid RelFileNumber;
|
|
||||||
#define RelidByRelfilenumber(a, b) RelidByRelfilenode(a, b)
|
|
||||||
|
|
||||||
#define float_abs(a) Abs(a)
|
|
||||||
|
|
||||||
#define tuplesort_getdatum_compat(a, b, c, d, e, f) tuplesort_getdatum(a, b, d, e, f)
|
|
||||||
|
|
||||||
static inline struct config_generic **
|
|
||||||
get_guc_variables_compat(int *gucCount)
|
|
||||||
{
|
|
||||||
*gucCount = GetNumConfigOptions();
|
|
||||||
return get_guc_variables();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define stringToQualifiedNameList_compat(a) stringToQualifiedNameList(a)
|
|
||||||
#define typeStringToTypeName_compat(a, b) typeStringToTypeName(a)
|
|
||||||
|
|
||||||
#define get_relids_in_jointree_compat(a, b, c) get_relids_in_jointree(a, b)
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
object_ownercheck(Oid classid, Oid objectid, Oid roleid)
|
|
||||||
{
|
|
||||||
switch (classid)
|
|
||||||
{
|
|
||||||
case RelationRelationId:
|
|
||||||
{
|
|
||||||
return pg_class_ownercheck(objectid, roleid);
|
|
||||||
}
|
|
||||||
|
|
||||||
case NamespaceRelationId:
|
|
||||||
{
|
|
||||||
return pg_namespace_ownercheck(objectid, roleid);
|
|
||||||
}
|
|
||||||
|
|
||||||
case ProcedureRelationId:
|
|
||||||
{
|
|
||||||
return pg_proc_ownercheck(objectid, roleid);
|
|
||||||
}
|
|
||||||
|
|
||||||
case DatabaseRelationId:
|
|
||||||
{
|
|
||||||
return pg_database_ownercheck(objectid, roleid);
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
ereport(ERROR,
|
|
||||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Missing classid:%d",
|
|
||||||
classid)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline AclResult
|
|
||||||
object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode)
|
|
||||||
{
|
|
||||||
switch (classid)
|
|
||||||
{
|
|
||||||
case NamespaceRelationId:
|
|
||||||
{
|
|
||||||
return pg_namespace_aclcheck(objectid, roleid, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
case ProcedureRelationId:
|
|
||||||
{
|
|
||||||
return pg_proc_aclcheck(objectid, roleid, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
ereport(ERROR,
|
|
||||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("Missing classid:%d",
|
|
||||||
classid)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline bool
|
|
||||||
have_createdb_privilege(void)
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
HeapTuple utup;
|
|
||||||
|
|
||||||
/* Superusers can always do everything */
|
|
||||||
if (superuser())
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
utup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(GetUserId()));
|
|
||||||
if (HeapTupleIsValid(utup))
|
|
||||||
{
|
|
||||||
result = ((Form_pg_authid) GETSTRUCT(utup))->rolcreatedb;
|
|
||||||
ReleaseSysCache(utup);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
typedef bool TU_UpdateIndexes;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* we define RTEPermissionInfo for PG16 compatibility
|
|
||||||
* There are some functions that need to include RTEPermissionInfo in their signature
|
|
||||||
* for PG14/PG15 we pass a NULL argument in these functions
|
|
||||||
*/
|
|
||||||
typedef RangeTblEntry RTEPermissionInfo;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SetListCellPtr(a, b) ((a)->ptr_value = (b))
|
#define SetListCellPtr(a, b) ((a)->ptr_value = (b))
|
||||||
#define RangeTableEntryFromNSItem(a) ((a)->p_rte)
|
#define RangeTableEntryFromNSItem(a) ((a)->p_rte)
|
||||||
#define fcGetArgValue(fc, n) ((fc)->args[n].value)
|
#define fcGetArgValue(fc, n) ((fc)->args[n].value)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue