视图函数修复

This commit is contained in:
王明轩
2024-06-11 10:19:27 +08:00
committed by yaoxin
parent 83a98c06f5
commit 5363008a15
12 changed files with 70 additions and 8 deletions

View File

@ -3927,7 +3927,7 @@
),
AddFuncGroup(
"gs_undo_translot_dump_xid", 1,
AddBuiltinFunc(_0(4438), _1("gs_undo_translot_dump_xid"), _2(2), _3(false), _4(true), _5(gs_undo_translot_dump_xid), _6(2249), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(2, 28, 16), _21(8, 28, 16, 26, 25, 25, 25, 25, 26), _22(8, 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o'), _23(8, "zone_id", "read_memory", "zone_id", "slot_xid", "start_undoptr", "end_undoptr","lsn", "slot_states"), _24(NULL), _25("gs_undo_translot_dump_xid"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33(NULL), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0))
AddBuiltinFunc(_0(4438), _1("gs_undo_translot_dump_xid"), _2(2), _3(false), _4(true), _5(gs_undo_translot_dump_xid), _6(2249), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(2, 28, 16), _21(8, 28, 16, 26, 25, 25, 25, 25, 26), _22(8, 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o'), _23(8, "zone_id", "read_memory", "zone_id", "slot_xid", "start_undoptr", "end_undoptr","slot_ptr", "slot_states"), _24(NULL), _25("gs_undo_translot_dump_xid"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33(NULL), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0))
),
AddFuncGroup(
"gs_undo_dump_record", 1,
@ -3935,7 +3935,7 @@
),
AddFuncGroup(
"gs_undo_translot_dump_slot", 1,
AddBuiltinFunc(_0(4541), _1("gs_undo_translot_dump_slot"), _2(2), _3(false), _4(true), _5(gs_undo_translot_dump_slot), _6(2249), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(2, 23, 16), _21(8, 23, 16, 26, 25, 25, 25, 25, 26), _22(8, 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o'), _23(8, "zone_id", "read_memory", "zone_id", "slot_xid", "start_undoptr", "end_undoptr","lsn", "slot_states"), _24(NULL), _25("gs_undo_translot_dump_slot"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33(NULL), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0))
AddBuiltinFunc(_0(4541), _1("gs_undo_translot_dump_slot"), _2(2), _3(false), _4(true), _5(gs_undo_translot_dump_slot), _6(2249), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(2, 23, 16), _21(8, 23, 16, 26, 25, 25, 25, 25, 26), _22(8, 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o'), _23(8, "zone_id", "read_memory", "zone_id", "slot_xid", "start_undoptr", "end_undoptr","slot_ptr", "slot_states"), _24(NULL), _25("gs_undo_translot_dump_slot"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33(NULL), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0))
),
AddFuncGroup(
"gs_undo_dump_xid", 1,

View File

@ -310,6 +310,11 @@ void OpFusion::setCurrentOpFusionObj(OpFusion *obj)
u_sess->exec_cxt.CurrentOpFusionObj = obj;
}
void OpFusion::setOpFusionReuseObj(OpFusion *obj)
{
u_sess->opfusion_reuse_ctx.opfusionObj = obj;
}
void OpFusion::checkPermission()
{
bool check = false;
@ -1112,6 +1117,7 @@ void OpFusion::tearDown(OpFusion *opfusion)
delete opfusion;
OpFusion::setCurrentOpFusionObj(NULL);
OpFusion::setOpFusionReuseObj(NULL);
}
void OpFusion::clearForCplan(OpFusion *opfusion, CachedPlanSource *psrc)

View File

@ -2236,8 +2236,8 @@ static void ValidateStrOptOrientation(const char *val)
*/
static void ValidateStrOptIndexsplit(const char *val)
{
if (pg_strncasecmp(val, INDEXSPLIT_OPT_DEFAULT, strlen(val)) != 0 &&
pg_strncasecmp(val, INDEXSPLIT_OPT_INSERTPT, strlen(val)) != 0) {
if (pg_strcasecmp(val, INDEXSPLIT_OPT_DEFAULT) != 0 &&
pg_strcasecmp(val, INDEXSPLIT_OPT_INSERTPT) != 0) {
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid string for \"INDEXSPLIT\" option"),
errdetail("Valid string are \"default\", \"insertpt\".")));
}

View File

@ -1579,7 +1579,9 @@ static bool UBTreeStepPage(IndexScanDesc scan, ScanDirection dir)
}
/* Step to next physical page */
so->currPos.buf = _bt_walk_left(rel, so->currPos.buf);
Buffer temp = so->currPos.buf;
so->currPos.buf = InvalidBuffer;
so->currPos.buf = _bt_walk_left(rel, temp);
/* if we're physically at end of index, return failure */
if (so->currPos.buf == InvalidBuffer)

View File

@ -903,7 +903,6 @@ static int UHeapPruneItem(const RelationBuffer *relbuf, OffsetNumber offnum, Tra
* Count dead or recently dead tuple in result and update the space
* that can be freed.
*/
ndeleted++;
Assert(!TransactionIdIsValid(xid) || !TransactionIdIsInProgress(xid));
if (TransactionIdIsValid(xid) && TransactionIdIsInProgress(xid)) {
ereport(PANIC, (errcode(ERRCODE_DATA_CORRUPTED),
@ -917,6 +916,7 @@ static int UHeapPruneItem(const RelationBuffer *relbuf, OffsetNumber offnum, Tra
/* Record dead item */
if (tupdead) {
UHeapPruneRecordDead(prstate, offnum, relbuf->relation);
ndeleted++;
}
/* Record deleted item */

View File

@ -424,6 +424,7 @@ start:
/* Temporarily tell other backends we are working on this subset.
* pg_atomic_exchange_u32 should return the old value.
*/
pgStatInfo->startBlockIndex = (uint32)random() % START_BLOCK_ARRAY_SIZE;
uint32 index = pgStatInfo->startBlockIndex;
BlockNumber startBlkno = pg_atomic_exchange_u32(&pgStatInfo->startBlockArray[index],
InvalidBlockNumber);

View File

@ -439,10 +439,9 @@ bool RecycleUndoSpace(UndoZone *zone, TransactionId recycleXmin, TransactionId f
lsn, recycleXid, g_recycleLoops, recycleXmin)));
}
END_CRIT_SECTION();
zone->UnlockUndoZone();
zone->ReleaseSpace(startUndoPtr, endUndoPtr, &g_forceRecycleSize);
zone->ReleaseSlotSpace(start, recycle, &g_forceRecycleSize);
zone->UnlockUndoZone();
} else {
/* zone has nothing to recycle. */
break;

View File

@ -0,0 +1,11 @@
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, int4, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4541;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_slot';
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4438;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_xid';

View File

@ -0,0 +1,11 @@
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, int4, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4541;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_slot';
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4438;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_xid';

View File

@ -0,0 +1,15 @@
/*------ add sys fuction gs_undo_translot_dump_slot ------*/
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, int4, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, int4, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4541;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_slot';
/*------ add sys fuction gs_undo_translot_dump_xid ------*/
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4438;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_xid';

View File

@ -0,0 +1,15 @@
/*------ add sys fuction gs_undo_translot_dump_slot ------*/
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, int4, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, int4, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4541;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_slot(int4, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_slot';
/*------ add sys fuction gs_undo_translot_dump_xid ------*/
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT lsn text, OUT gs_undo_translot oid) CASCADE;
DROP FUNCTION IF EXISTS pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid) CASCADE;
SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 4438;
CREATE OR REPLACE FUNCTION pg_catalog.gs_undo_translot_dump_xid(xid, boolean, OUT zone_id oid, OUT slot_xid text, OUT start_undoptr text, OUT end_undoptr text, OUT slot_ptr text, OUT gs_undo_translot oid)
RETURNS SETOF record LANGUAGE INTERNAL as 'gs_undo_translot_dump_xid';

View File

@ -71,6 +71,8 @@ public:
static void setCurrentOpFusionObj(OpFusion* obj);
static void setOpFusionReuseObj(OpFusion* obj);
static bool process(int op, StringInfo msg, char* completionTag, bool isTopLevel, bool* isQueryCompleted);
static void SaveInGPC(OpFusion* obj);