Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
4cbfeef9
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4cbfeef9
编写于
4月 24, 1998
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Inline some small functions called for every row.
上级
7500a961
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
179 addition
and
205 deletion
+179
-205
src/backend/access/transam/xid.c
src/backend/access/transam/xid.c
+1
-11
src/backend/executor/execTuples.c
src/backend/executor/execTuples.c
+3
-51
src/backend/executor/nodeTee.c
src/backend/executor/nodeTee.c
+2
-2
src/backend/storage/buffer/bufmgr.c
src/backend/storage/buffer/bufmgr.c
+1
-55
src/backend/storage/page/bufpage.c
src/backend/storage/page/bufpage.c
+1
-22
src/backend/utils/time/tqual.c
src/backend/utils/time/tqual.c
+5
-48
src/include/access/xact.h
src/include/access/xact.h
+12
-2
src/include/executor/executor.h
src/include/executor/executor.h
+39
-3
src/include/storage/bufmgr.h
src/include/storage/bufmgr.h
+55
-4
src/include/storage/bufpage.h
src/include/storage/bufpage.h
+16
-2
src/include/utils/tqual.h
src/include/utils/tqual.h
+44
-5
未找到文件。
src/backend/access/transam/xid.c
浏览文件 @
4cbfeef9
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.1
4 1998/04/07 18:10:01
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.1
5 1998/04/24 14:41:39
momjian Exp $
*
* OLD COMMENTS
* XXX WARNING
...
...
@@ -53,16 +53,6 @@ xidout(TransactionId transactionId)
}
/* ----------------------------------------------------------------
* TransactionIdEquals
* ----------------------------------------------------------------
*/
bool
TransactionIdEquals
(
TransactionId
id1
,
TransactionId
id2
)
{
return
((
bool
)
(
id1
==
id2
));
}
/* ----------------------------------------------------------------
* TransactionIdIsLessThan
* ----------------------------------------------------------------
...
...
src/backend/executor/execTuples.c
浏览文件 @
4cbfeef9
...
...
@@ -14,7 +14,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execTuples.c,v 1.1
7 1998/02/26 04:31:14
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/execTuples.c,v 1.1
8 1998/04/24 14:41:46
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -40,10 +40,10 @@
* ExecSetNewSlotDescriptor - set a desc and the is-new-flag all at once
* ExecSlotBuffer - return buffer of tuple in slot
* ExecSetSlotBuffer - set the buffer for tuple in slot
* ExecIncrSlotBufferRefcnt - bump the refcnt of the slot buffer
* ExecIncrSlotBufferRefcnt - bump the refcnt of the slot buffer
(Macro)
*
* SLOT STATUS PREDICATES
* TupIsNull - true when slot contains no tuple
* TupIsNull - true when slot contains no tuple
(Macro)
* ExecSlotDescriptorIsNew - true if we're now storing a different
* type of tuple in a slot
*
...
...
@@ -566,59 +566,11 @@ ExecSetSlotBuffer(TupleTableSlot *slot, /* slot to change */
#endif
/* --------------------------------
* ExecIncrSlotBufferRefcnt
*
* When we pass around buffers in the tuple table, we have to
* be careful to increment reference counts appropriately.
* This is used mainly in the mergejoin code.
* --------------------------------
*/
void
ExecIncrSlotBufferRefcnt
(
TupleTableSlot
*
slot
)
/* slot to bump refcnt */
{
/* Buffer b = SlotBuffer((TupleTableSlot*) slot); */
Buffer
b
=
slot
->
ttc_buffer
;
if
(
BufferIsValid
(
b
))
IncrBufferRefCount
(
b
);
}
/* ----------------------------------------------------------------
* tuple table slot status predicates
* ----------------------------------------------------------------
*/
/* ----------------
* TupIsNull
*
* This is used mainly to detect when there are no more
* tuples to process.
* ----------------
*/
bool
/* return: true if tuple in slot is NULL */
TupIsNull
(
TupleTableSlot
*
slot
)
/* slot to check */
{
HeapTuple
tuple
;
/* contents of slot (returned) */
/* ----------------
* if the slot itself is null then we return true
* ----------------
*/
if
(
slot
==
NULL
)
return
true
;
/* ----------------
* get information from the slot and return true or
* false depending on the contents of the slot.
* ----------------
*/
tuple
=
slot
->
val
;
return
(
tuple
==
NULL
?
true
:
false
);
}
/* --------------------------------
* ExecSlotDescriptorIsNew
*
...
...
src/backend/executor/nodeTee.c
浏览文件 @
4cbfeef9
...
...
@@ -15,7 +15,7 @@
* ExecEndTee
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.1
6 1998/02/26 04:31:33
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.1
7 1998/04/24 14:41:55
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -27,7 +27,7 @@
#include "utils/palloc.h"
#include "utils/relcache.h"
#include "utils/mcxt.h"
#include "storage/bufmgr.h"
/* for IncrBufferRefCount */
#include "storage/bufmgr.h"
#include "storage/smgr.h"
#include "optimizer/internal.h"
#include "executor/executor.h"
...
...
src/backend/storage/buffer/bufmgr.c
浏览文件 @
4cbfeef9
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.3
6 1998/04/05 21:04:22
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.3
7 1998/04/24 14:42:16
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -1262,25 +1262,6 @@ FlushBufferPool(int StableMainMemoryFlag)
}
}
/*
* BufferIsValid --
* True iff the refcnt of the local buffer is > 0
* Note:
* BufferIsValid(InvalidBuffer) is False.
* BufferIsValid(UnknownBuffer) is False.
*/
bool
BufferIsValid
(
Buffer
bufnum
)
{
if
(
BufferIsLocal
(
bufnum
))
return
(
bufnum
>=
-
NLocBuffer
&&
LocalRefCount
[
-
bufnum
-
1
]
>
0
);
if
(
BAD_BUFFER_ID
(
bufnum
))
return
(
false
);
return
((
bool
)
(
PrivateRefCount
[
bufnum
-
1
]
>
0
));
}
/*
* BufferGetBlockNumber --
* Returns the block number associated with a buffer.
...
...
@@ -1413,24 +1394,6 @@ RelationGetNumberOfBlocks(Relation relation)
smgrnblocks
(
DEFAULT_SMGR
,
relation
));
}
/*
* BufferGetBlock --
* Returns a reference to a disk page image associated with a buffer.
*
* Note:
* Assumes buffer is valid.
*/
Block
BufferGetBlock
(
Buffer
buffer
)
{
Assert
(
BufferIsValid
(
buffer
));
if
(
BufferIsLocal
(
buffer
))
return
((
Block
)
MAKE_PTR
(
LocalBufferDescriptors
[
-
buffer
-
1
].
data
));
else
return
((
Block
)
MAKE_PTR
(
BufferDescriptors
[
buffer
-
1
].
data
));
}
/* ---------------------------------------------------------------------
* ReleaseRelationBuffers
*
...
...
@@ -1679,25 +1642,8 @@ BlowawayRelationBuffers(Relation rdesc, BlockNumber block)
return
(
0
);
}
#undef IncrBufferRefCount
#undef ReleaseBuffer
void
IncrBufferRefCount
(
Buffer
buffer
)
{
if
(
BufferIsLocal
(
buffer
))
{
Assert
(
LocalRefCount
[
-
buffer
-
1
]
>=
0
);
LocalRefCount
[
-
buffer
-
1
]
++
;
}
else
{
Assert
(
!
BAD_BUFFER_ID
(
buffer
));
Assert
(
PrivateRefCount
[
buffer
-
1
]
>=
0
);
PrivateRefCount
[
buffer
-
1
]
++
;
}
}
/*
* ReleaseBuffer -- remove the pin on a buffer without
* marking it dirty.
...
...
src/backend/storage/page/bufpage.c
浏览文件 @
4cbfeef9
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.1
6 1998/04/06 02:38:1
7 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.1
7 1998/04/24 14:42:2
7 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -225,27 +225,6 @@ PageRestoreTempPage(Page tempPage, Page oldPage)
pfree
(
tempPage
);
}
/*
* PageGetMaxOffsetNumber --
* Returns the maximum offset number used by the given page.
*
* NOTE: The offset is invalid if the page is non-empty.
* Test whether PageIsEmpty before calling this routine
* and/or using its return value.
*/
OffsetNumber
PageGetMaxOffsetNumber
(
Page
page
)
{
LocationIndex
low
;
OffsetNumber
i
;
low
=
((
PageHeader
)
page
)
->
pd_lower
;
i
=
(
low
-
(
sizeof
(
PageHeaderData
)
-
sizeof
(
ItemIdData
)))
/
sizeof
(
ItemIdData
);
return
(
i
);
}
/* ----------------
* itemid stuff for PageRepairFragmentation
* ----------------
...
...
src/backend/utils/time/tqual.c
浏览文件 @
4cbfeef9
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.1
4 1998/02/26 04:38:3
2 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.1
5 1998/04/24 14:42:4
2 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -31,8 +31,8 @@ extern bool PostgresIsInitialized;
*/
#ifndef GOODAMI
static
TransactionId
HeapSpecialTransactionId
=
InvalidTransactionId
;
static
CommandId
HeapSpecialCommandId
=
FirstCommandId
;
TransactionId
HeapSpecialTransactionId
=
InvalidTransactionId
;
CommandId
HeapSpecialCommandId
=
FirstCommandId
;
void
setheapoverride
(
bool
on
)
...
...
@@ -49,54 +49,11 @@ setheapoverride(bool on)
}
}
/* static, but called in debug macro */
bool
heapisoverride
()
{
if
(
!
TransactionIdIsValid
(
HeapSpecialTransactionId
))
{
return
(
false
);
}
if
(
!
TransactionIdEquals
(
GetCurrentTransactionId
(),
HeapSpecialTransactionId
)
||
GetCurrentCommandId
()
!=
HeapSpecialCommandId
)
{
HeapSpecialTransactionId
=
InvalidTransactionId
;
return
(
false
);
}
return
(
true
);
}
#endif
/* !defined(GOODAMI) */
/*
* XXX Transaction system override hacks end here
*/
static
bool
HeapTupleSatisfiesItself
(
HeapTuple
tuple
);
static
bool
HeapTupleSatisfiesNow
(
HeapTuple
tuple
);
/*
* HeapTupleSatisfiesScope --
* True iff heap tuple satsifies a time qual.
*
* Note:
* Assumes heap tuple is valid.
*/
bool
HeapTupleSatisfiesVisibility
(
HeapTuple
tuple
,
bool
seeself
)
{
if
(
TransactionIdEquals
(
tuple
->
t_xmax
,
AmiTransactionId
))
return
(
false
);
if
(
seeself
==
true
||
heapisoverride
())
return
(
HeapTupleSatisfiesItself
(
tuple
));
else
return
(
HeapTupleSatisfiesNow
(
tuple
));
}
/*
* HeapTupleSatisfiesItself --
* True iff heap tuple is valid for "itself."
...
...
@@ -119,7 +76,7 @@ HeapTupleSatisfiesVisibility(HeapTuple tuple, bool seeself)
* (Xmax != my-transaction && the row was deleted by another transaction
* Xmax is not committed))) that has not been committed
*/
static
bool
bool
HeapTupleSatisfiesItself
(
HeapTuple
tuple
)
{
...
...
@@ -215,7 +172,7 @@ HeapTupleSatisfiesItself(HeapTuple tuple)
* the serializability guarantees we provide don't extend to xacts
* that do catalog accesses. this is unfortunate, but not critical.
*/
static
bool
bool
HeapTupleSatisfiesNow
(
HeapTuple
tuple
)
{
if
(
AMI_OVERRIDE
)
...
...
src/include/access/xact.h
浏览文件 @
4cbfeef9
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: xact.h,v 1.1
2 1998/02/26 04:40:32
momjian Exp $
* $Id: xact.h,v 1.1
3 1998/04/24 14:42:55
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -60,6 +60,17 @@ typedef TransactionStateData *TransactionState;
#define StoreInvalidTransactionId(dest) \
(*((TransactionId*)dest) = NullTransactionId)
/* ----------------------------------------------------------------
* TransactionIdEquals
* ----------------------------------------------------------------
*/
#define TransactionIdEquals(id1, id2) \
( \
((bool) ((id1) == (id2))) \
)
/* ----------------
* extern definitions
* ----------------
...
...
@@ -95,7 +106,6 @@ extern TransactionId DisabledTransactionId;
extern
TransactionId
xidin
(
char
*
representation
);
extern
char
*
xidout
(
TransactionId
transactionId
);
extern
bool
xideq
(
TransactionId
xid1
,
TransactionId
xid2
);
extern
bool
TransactionIdEquals
(
TransactionId
id1
,
TransactionId
id2
);
extern
bool
TransactionIdIsLessThan
(
TransactionId
id1
,
TransactionId
id2
);
extern
void
TransactionIdAdd
(
TransactionId
*
xid
,
int
value
);
...
...
src/include/executor/executor.h
浏览文件 @
4cbfeef9
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: executor.h,v 1.2
1 1998/02/26 04:41:19
momjian Exp $
* $Id: executor.h,v 1.2
2 1998/04/24 14:43:07
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -14,10 +14,48 @@
#define EXECUTOR_H
#include <catalog/pg_index.h>
#include <storage/bufmgr.h>
#include <access/itup.h>
#include <stdio.h>
#include <executor/execdesc.h>
/* ----------------
* TupIsNull
*
* This is used mainly to detect when there are no more
* tuples to process.
* ----------------
*/
/* return: true if tuple in slot is NULL, slot is slot to test */
#define TupIsNull(slot) \
( \
((slot) == NULL) ? \
true \
: \
( \
((slot)->val == NULL) ? \
true \
: \
false \
) \
)
/* --------------------------------
* ExecIncrSlotBufferRefcnt
*
* When we pass around buffers in the tuple table, we have to
* be careful to increment reference counts appropriately.
* This is used mainly in the mergejoin code.
* --------------------------------
*/
#define ExecIncrSlotBufferRefcnt(slot) \
( \
BufferIsValid((slot)->ttc_buffer) ? \
IncrBufferRefCount((slot)->ttc_buffer) \
: (void)NULL \
)
/*
* prototypes from functions in execAmi.c
*/
...
...
@@ -107,8 +145,6 @@ extern TupleDesc
ExecSetSlotDescriptor
(
TupleTableSlot
*
slot
,
TupleDesc
tupdesc
);
extern
void
ExecSetSlotDescriptorIsNew
(
TupleTableSlot
*
slot
,
bool
isNew
);
extern
void
ExecIncrSlotBufferRefcnt
(
TupleTableSlot
*
slot
);
extern
bool
TupIsNull
(
TupleTableSlot
*
slot
);
extern
void
ExecInitResultTupleSlot
(
EState
*
estate
,
CommonState
*
commonstate
);
extern
void
ExecInitScanTupleSlot
(
EState
*
estate
,
...
...
src/include/storage/bufmgr.h
浏览文件 @
4cbfeef9
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: bufmgr.h,v 1.1
8 1998/02/26 04:43:22
momjian Exp $
* $Id: bufmgr.h,v 1.1
9 1998/04/24 14:43:18
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -18,6 +18,7 @@
#include <storage/ipc.h>
#include <storage/block.h>
#include <storage/buf.h>
#include <storage/buf_internals.h>
#include <utils/rel.h>
/*
...
...
@@ -72,6 +73,59 @@ extern int ShowPinTrace;
#define BUFFER_FLUSH_WRITE 0
/* immediate write */
#define BUFFER_LATE_WRITE 1
/* delayed write: mark as DIRTY */
/*
* BufferIsValid --
* True iff the refcnt of the local buffer is > 0
* Note:
* BufferIsValid(InvalidBuffer) is False.
* BufferIsValid(UnknownBuffer) is False.
*/
#define BufferIsValid(bufnum) \
( \
BufferIsLocal(bufnum) ? \
((bufnum) >= -NLocBuffer && LocalRefCount[-(bufnum) - 1] > 0) \
: \
( \
BAD_BUFFER_ID(bufnum) ? \
false \
: \
(PrivateRefCount[(bufnum) - 1] > 0) \
) \
)
#define IncrBufferRefCount(buffer) \
( \
BufferIsLocal(buffer) ? \
( \
(void)AssertMacro(LocalRefCount[-(buffer) - 1] >= 0), \
(void)LocalRefCount[-(buffer) - 1]++ \
) \
: \
( \
(void)AssertMacro(!BAD_BUFFER_ID(buffer)), \
(void)AssertMacro(PrivateRefCount[(buffer) - 1] >= 0), \
(void)PrivateRefCount[(buffer) - 1]++ \
) \
)
/*
* BufferGetBlock --
* Returns a reference to a disk page image associated with a buffer.
*
* Note:
* Assumes buffer is valid.
*/
#define BufferGetBlock(buffer) \
( \
(void)AssertMacro(BufferIsValid(buffer)), \
\
BufferIsLocal(buffer) ? \
((Block) MAKE_PTR(LocalBufferDescriptors[-(buffer) - 1].data)) \
: \
((Block) MAKE_PTR(BufferDescriptors[(buffer) - 1].data)) \
)
/*
* prototypes for functions in bufmgr.c
*/
...
...
@@ -91,17 +145,14 @@ extern void ResetBufferUsage(void);
extern
void
ResetBufferPool
(
void
);
extern
int
BufferPoolCheckLeak
(
void
);
extern
void
FlushBufferPool
(
int
StableMainMemoryFlag
);
extern
bool
BufferIsValid
(
Buffer
bufnum
);
extern
BlockNumber
BufferGetBlockNumber
(
Buffer
buffer
);
extern
Relation
BufferGetRelation
(
Buffer
buffer
);
extern
BlockNumber
RelationGetNumberOfBlocks
(
Relation
relation
);
extern
Block
BufferGetBlock
(
Buffer
buffer
);
extern
void
ReleaseRelationBuffers
(
Relation
rdesc
);
extern
void
DropBuffers
(
Oid
dbid
);
extern
void
PrintBufferDescs
(
void
);
extern
void
PrintPinnedBufs
(
void
);
extern
int
BufferShmemSize
(
void
);
extern
void
IncrBufferRefCount
(
Buffer
buffer
);
extern
int
ReleaseBuffer
(
Buffer
buffer
);
extern
void
BufferRefCountReset
(
int
*
refcountsave
);
...
...
src/include/storage/bufpage.h
浏览文件 @
4cbfeef9
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: bufpage.h,v 1.1
7 1998/02/26 04:43:24
momjian Exp $
* $Id: bufpage.h,v 1.1
8 1998/04/24 14:43:23
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -280,6 +280,21 @@ typedef enum
*/
#define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
/*
* PageGetMaxOffsetNumber --
* Returns the maximum offset number used by the given page.
*
* NOTE: The offset is invalid if the page is non-empty.
* Test whether PageIsEmpty before calling this routine
* and/or using its return value.
*/
#define PageGetMaxOffsetNumber(page) \
( \
(((PageHeader) (page))->pd_lower - \
(sizeof(PageHeaderData) - sizeof(ItemIdData))) \
/ sizeof(ItemIdData) \
)
/* ----------------------------------------------------------------
* extern declarations
...
...
@@ -292,7 +307,6 @@ PageAddItem(Page page, Item item, Size size,
OffsetNumber
offsetNumber
,
ItemIdFlags
flags
);
extern
Page
PageGetTempPage
(
Page
page
,
Size
specialSize
);
extern
void
PageRestoreTempPage
(
Page
tempPage
,
Page
oldPage
);
extern
OffsetNumber
PageGetMaxOffsetNumber
(
Page
page
);
extern
void
PageRepairFragmentation
(
Page
page
);
extern
Size
PageGetFreeSpace
(
Page
page
);
extern
void
PageManagerModeSet
(
PageManagerMode
mode
);
...
...
src/include/utils/tqual.h
浏览文件 @
4cbfeef9
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: tqual.h,v 1.1
1 1997/11/20 23:24:0
3 momjian Exp $
* $Id: tqual.h,v 1.1
2 1998/04/24 14:43:3
3 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -15,12 +15,51 @@
#include <access/htup.h>
/* As above, plus updates in this command */
extern
TransactionId
HeapSpecialTransactionId
;
extern
CommandId
HeapSpecialCommandId
;
extern
void
setheapoverride
(
bool
on
);
extern
bool
heapisoverride
(
void
);
/*
* HeapTupleSatisfiesVisibility --
* True iff heap tuple satsifies a time qual.
*
* Note:
* Assumes heap tuple is valid.
*/
#define HeapTupleSatisfiesVisibility(tuple, seeself) \
( \
TransactionIdEquals((tuple)->t_xmax, AmiTransactionId) ? \
false \
: \
( \
((seeself) == true || heapisoverride()) ? \
HeapTupleSatisfiesItself(tuple) \
: \
HeapTupleSatisfiesNow(tuple) \
) \
)
extern
bool
HeapTupleSatisfiesVisibility
(
HeapTuple
tuple
,
bool
seeself
);
#define heapisoverride() \
( \
(!TransactionIdIsValid(HeapSpecialTransactionId)) ? \
false \
: \
( \
(!TransactionIdEquals(GetCurrentTransactionId(), \
HeapSpecialTransactionId) || \
GetCurrentCommandId() != HeapSpecialCommandId) ? \
( \
HeapSpecialTransactionId = InvalidTransactionId, \
false \
) \
: \
true \
) \
)
extern
bool
HeapTupleSatisfiesItself
(
HeapTuple
tuple
);
extern
bool
HeapTupleSatisfiesNow
(
HeapTuple
tuple
);
extern
void
setheapoverride
(
bool
on
);
#endif
/* TQUAL_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录