Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
05d13cad
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,发现更多精彩内容 >>
提交
05d13cad
编写于
10月 11, 1999
作者:
H
Hiroshi Inoue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
The 1st step to implement new type of scan,TidScan.
Now WHERE restriction on ctid is allowed though it is sequentially scanned.
上级
65a2c8f5
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
238 addition
and
10 deletion
+238
-10
src/backend/access/heap/heapam.c
src/backend/access/heap/heapam.c
+90
-1
src/backend/utils/adt/tid.c
src/backend/utils/adt/tid.c
+126
-4
src/include/access/heapam.h
src/include/access/heapam.h
+2
-1
src/include/catalog/pg_operator.h
src/include/catalog/pg_operator.h
+4
-1
src/include/catalog/pg_proc.h
src/include/catalog/pg_proc.h
+8
-1
src/include/utils/builtins.h
src/include/utils/builtins.h
+8
-2
未找到文件。
src/backend/access/heap/heapam.c
浏览文件 @
05d13cad
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.5
5 1999/09/24 00:23:54 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.5
6 1999/10/11 06:28:27 inoue
Exp $
*
*
* INTERFACE ROUTINES
...
...
@@ -1086,6 +1086,95 @@ heap_fetch(Relation relation,
}
}
/* ----------------
* heap_get_latest_tid - get the latest tid of a specified tuple
*
* ----------------
*/
ItemPointer
heap_get_latest_tid
(
Relation
relation
,
Snapshot
snapshot
,
ItemPointer
tid
)
{
ItemId
lp
;
Buffer
buffer
;
PageHeader
dp
;
OffsetNumber
offnum
;
HeapTupleData
tp
;
HeapTupleHeader
t_data
;
ItemPointerData
ctid
;
bool
invalidBlock
,
linkend
;
/* ----------------
* get the buffer from the relation descriptor
* Note that this does a buffer pin.
* ----------------
*/
buffer
=
ReadBuffer
(
relation
,
ItemPointerGetBlockNumber
(
tid
));
if
(
!
BufferIsValid
(
buffer
))
elog
(
ERROR
,
"heap_get_latest_tid: %s relation: ReadBuffer(%lx) failed"
,
&
relation
->
rd_rel
->
relname
,
(
long
)
tid
);
LockBuffer
(
buffer
,
BUFFER_LOCK_SHARE
);
/* ----------------
* get the item line pointer corresponding to the requested tid
* ----------------
*/
dp
=
(
PageHeader
)
BufferGetPage
(
buffer
);
offnum
=
ItemPointerGetOffsetNumber
(
tid
);
invalidBlock
=
true
;
if
(
!
PageIsNew
(
dp
))
{
lp
=
PageGetItemId
(
dp
,
offnum
);
if
(
ItemIdIsUsed
(
lp
))
invalidBlock
=
false
;
}
if
(
invalidBlock
)
{
LockBuffer
(
buffer
,
BUFFER_LOCK_UNLOCK
);
ReleaseBuffer
(
buffer
);
return
NULL
;
}
/* ----------------
* more sanity checks
* ----------------
*/
t_data
=
tp
.
t_data
=
(
HeapTupleHeader
)
PageGetItem
((
Page
)
dp
,
lp
);
tp
.
t_len
=
ItemIdGetLength
(
lp
);
tp
.
t_self
=
*
tid
;
ctid
=
tp
.
t_data
->
t_ctid
;
/* ----------------
* check time qualification of tid
* ----------------
*/
HeapTupleSatisfies
(
&
tp
,
relation
,
buffer
,
dp
,
snapshot
,
0
,
(
ScanKey
)
NULL
);
linkend
=
true
;
if
((
t_data
->
t_infomask
&
HEAP_XMAX_COMMITTED
)
&&
!
ItemPointerEquals
(
tid
,
&
ctid
))
linkend
=
false
;
LockBuffer
(
buffer
,
BUFFER_LOCK_UNLOCK
);
ReleaseBuffer
(
buffer
);
if
(
tp
.
t_data
==
NULL
)
{
if
(
linkend
)
return
NULL
;
return
heap_get_latest_tid
(
relation
,
snapshot
,
&
ctid
);
}
return
tid
;
}
/* ----------------
* heap_insert - insert tuple
*
...
...
src/backend/utils/adt/tid.c
浏览文件 @
05d13cad
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.1
1 1999/07/17 20:18:00 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.1
2 1999/10/11 06:28:26 inoue
Exp $
*
* NOTES
* input routine largely stolen from boxin().
...
...
@@ -28,9 +28,9 @@
* ----------------------------------------------------------------
*/
ItemPointer
tidin
(
char
*
str
)
tidin
(
c
onst
c
har
*
str
)
{
char
*
p
,
c
onst
c
har
*
p
,
*
coord
[
NTIDARGS
];
int
i
;
ItemPointer
result
;
...
...
@@ -45,8 +45,12 @@ tidin(char *str)
if
(
*
p
==
DELIM
||
(
*
p
==
LDELIM
&&
!
i
))
coord
[
i
++
]
=
p
+
1
;
if
(
i
<
NTIDARGS
-
1
)
/* if (i < NTIDARGS - 1) */
if
(
i
<
NTIDARGS
)
{
elog
(
ERROR
,
"%s invalid tid format"
,
str
);
return
NULL
;
}
blockNumber
=
(
BlockNumber
)
atoi
(
coord
[
0
]);
offsetNumber
=
(
OffsetNumber
)
atoi
(
coord
[
1
]);
...
...
@@ -70,6 +74,14 @@ tidout(ItemPointer itemPtr)
BlockId
blockId
;
char
buf
[
32
];
char
*
str
;
static
char
*
invalidTid
=
"()"
;
if
(
!
itemPtr
||
!
ItemPointerIsValid
(
itemPtr
))
{
str
=
palloc
(
strlen
(
invalidTid
));
strcpy
(
str
,
invalidTid
);
return
str
;
}
blockId
=
&
(
itemPtr
->
ip_blkid
);
...
...
@@ -83,3 +95,113 @@ tidout(ItemPointer itemPtr)
return
str
;
}
/*****************************************************************************
* PUBLIC ROUTINES *
*****************************************************************************/
bool
tideq
(
ItemPointer
arg1
,
ItemPointer
arg2
)
{
if
((
!
arg1
)
||
(
!
arg2
))
{
return
false
;
}
return
(
BlockIdGetBlockNumber
(
&
(
arg1
->
ip_blkid
))
==
BlockIdGetBlockNumber
(
&
(
arg2
->
ip_blkid
))
&&
arg1
->
ip_posid
==
arg2
->
ip_posid
);
}
bool
tidne
(
ItemPointer
arg1
,
ItemPointer
arg2
)
{
if
((
!
arg1
)
||
(
!
arg2
))
{
return
false
;
}
return
(
BlockIdGetBlockNumber
(
&
(
arg1
->
ip_blkid
))
!=
BlockIdGetBlockNumber
(
&
(
arg2
->
ip_blkid
))
||
arg1
->
ip_posid
!=
arg2
->
ip_posid
);
}
text
*
tid_text
(
ItemPointer
tid
)
{
char
*
str
;
if
(
!
tid
)
return
(
text
*
)
NULL
;
str
=
tidout
(
tid
);
return
textin
(
str
);
}
/* tid_text() */
ItemPointer
text_tid
(
const
text
*
string
)
{
ItemPointer
result
;
char
*
str
;
if
(
!
string
)
return
(
ItemPointer
)
0
;
str
=
textout
(
string
);
result
=
tidin
(
str
);
pfree
(
str
);
return
result
;
}
/* text_tid() */
/*
* Functions to get latest tid of a specified tuple.
* Maybe these implementations is moved
* to another place
*/
#include <utils/relcache.h>
ItemPointer
currtid_byreloid
(
Oid
reloid
,
ItemPointer
tid
)
{
ItemPointer
result
=
NULL
,
ret
;
Relation
rel
;
result
=
(
ItemPointer
)
palloc
(
sizeof
(
ItemPointerData
));
ItemPointerSetInvalid
(
result
);
if
(
rel
=
heap_open
(
reloid
,
AccessShareLock
),
rel
)
{
ret
=
heap_get_latest_tid
(
rel
,
SnapshotNow
,
tid
);
if
(
ret
)
ItemPointerCopy
(
ret
,
result
);
heap_close
(
rel
,
AccessShareLock
);
}
else
elog
(
ERROR
,
"Relation %u not found"
,
reloid
);
return
result
;
}
/* currtid_byreloid() */
ItemPointer
currtid_byrelname
(
const
text
*
relname
,
ItemPointer
tid
)
{
ItemPointer
result
=
NULL
,
ret
;
char
*
str
;
Relation
rel
;
if
(
!
relname
)
return
result
;
str
=
textout
(
relname
);
result
=
(
ItemPointer
)
palloc
(
sizeof
(
ItemPointerData
));
ItemPointerSetInvalid
(
result
);
if
(
rel
=
heap_openr
(
str
,
AccessShareLock
),
rel
)
{
ret
=
heap_get_latest_tid
(
rel
,
SnapshotNow
,
tid
);
if
(
ret
)
ItemPointerCopy
(
ret
,
result
);
heap_close
(
rel
,
AccessShareLock
);
}
else
elog
(
ERROR
,
"Relation %s not found"
,
relname
);
pfree
(
str
);
return
result
;
}
/* currtid_byrelname() */
src/include/access/heapam.h
浏览文件 @
05d13cad
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: heapam.h,v 1.4
6 1999/09/18 19:08:13 tgl
Exp $
* $Id: heapam.h,v 1.4
7 1999/10/11 06:28:29 inoue
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -256,6 +256,7 @@ extern void heap_rescan(HeapScanDesc scan, bool scanFromEnd, ScanKey key);
extern
void
heap_endscan
(
HeapScanDesc
scan
);
extern
HeapTuple
heap_getnext
(
HeapScanDesc
scandesc
,
int
backw
);
extern
void
heap_fetch
(
Relation
relation
,
Snapshot
snapshot
,
HeapTuple
tup
,
Buffer
*
userbuf
);
extern
ItemPointer
heap_get_latest_tid
(
Relation
relation
,
Snapshot
snapshot
,
ItemPointer
tid
);
extern
Oid
heap_insert
(
Relation
relation
,
HeapTuple
tup
);
extern
int
heap_delete
(
Relation
relation
,
ItemPointer
tid
,
ItemPointer
ctid
);
extern
int
heap_replace
(
Relation
relation
,
ItemPointer
otid
,
HeapTuple
tup
,
...
...
src/include/catalog/pg_operator.h
浏览文件 @
05d13cad
...
...
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pg_operator.h,v 1.
59 1999/09/06 21:16:18 tgl
Exp $
* $Id: pg_operator.h,v 1.
60 1999/10/11 06:28:29 inoue
Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
...
...
@@ -136,6 +136,9 @@ DATA(insert OID = 399 ( "=" PGUID 0 b t f 1026 1026 16 399 0 0 0 array_e
DATA
(
insert
OID
=
400
(
"="
PGUID
0
b
t
f
1027
1027
16
400
0
0
0
array_eq
eqsel
eqjoinsel
));
DATA
(
insert
OID
=
401
(
"="
PGUID
0
b
t
f
1034
1034
16
401
0
0
0
array_eq
eqsel
eqjoinsel
));
DATA
(
insert
OID
=
387
(
"="
PGUID
0
b
t
t
27
27
16
387
0
0
0
tideq
eqsel
eqjoinsel
));
#define TIDEqualOperator 387
DATA
(
insert
OID
=
410
(
"="
PGUID
0
b
t
t
20
20
16
410
411
412
412
int8eq
eqsel
eqjoinsel
));
DATA
(
insert
OID
=
411
(
"<>"
PGUID
0
b
t
f
20
20
16
411
410
0
0
int8ne
neqsel
neqjoinsel
));
DATA
(
insert
OID
=
412
(
"<"
PGUID
0
b
t
f
20
20
16
413
415
0
0
int8lt
intltsel
intltjoinsel
));
...
...
src/include/catalog/pg_proc.h
浏览文件 @
05d13cad
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pg_proc.h,v 1.10
4 1999/09/30 14:54:23 wieck
Exp $
* $Id: pg_proc.h,v 1.10
5 1999/10/11 06:28:28 inoue
Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
...
...
@@ -1560,6 +1560,13 @@ DESCR("truncate _char()");
DATA
(
insert
OID
=
1291
(
_varchar
PGUID
11
f
t
t
2
f
1015
"1015 23"
100
0
0
100
_varchar
-
));
DESCR
(
"truncate _varchar()"
);
DATA
(
insert
OID
=
1292
(
tideq
PGUID
11
f
t
f
2
f
16
"27 27"
100
0
0
100
tideq
-
));
DESCR
(
"equal"
);
DATA
(
insert
OID
=
1293
(
currtid
PGUID
11
f
t
f
2
f
27
"26 27"
100
0
0
100
currtid_byreloid
-
));
DESCR
(
"latest tid of a tuple"
);
DATA
(
insert
OID
=
1294
(
currtid2
PGUID
11
f
t
f
2
f
27
"25 27"
100
0
0
100
currtid_byrelname
-
));
DESCR
(
"latest tid of a tuple"
);
DATA
(
insert
OID
=
1297
(
timestamp_in
PGUID
11
f
t
f
1
f
1296
"0"
100
0
0
100
timestamp_in
-
));
DESCR
(
"(internal)"
);
DATA
(
insert
OID
=
1298
(
timestamp_out
PGUID
11
f
t
f
1
f
23
"0"
100
0
0
100
timestamp_out
-
));
...
...
src/include/utils/builtins.h
浏览文件 @
05d13cad
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: builtins.h,v 1.8
8 1999/10/03 23:55:37 tgl
Exp $
* $Id: builtins.h,v 1.8
9 1999/10/11 06:28:28 inoue
Exp $
*
* NOTES
* This should normally only be included by fmgr.h.
...
...
@@ -399,8 +399,14 @@ extern float64 gistsel(Oid operatorObjectId, Oid indrelid, AttrNumber attributeN
extern
float64
gistnpage
(
Oid
operatorObjectId
,
Oid
indrelid
,
AttrNumber
attributeNumber
,
char
*
constValue
,
int32
constFlag
,
int32
nIndexKeys
,
Oid
indexrelid
);
/* tid.c */
extern
ItemPointer
tidin
(
char
*
str
);
extern
ItemPointer
tidin
(
c
onst
c
har
*
str
);
extern
char
*
tidout
(
ItemPointer
itemPtr
);
extern
bool
tideq
(
ItemPointer
,
ItemPointer
);
extern
bool
tidne
(
ItemPointer
,
ItemPointer
);
extern
text
*
tid_text
(
ItemPointer
);
extern
ItemPointer
text_tid
(
const
text
*
);
extern
ItemPointer
currtid_byreloid
(
Oid
relOid
,
ItemPointer
);
extern
ItemPointer
currtid_byrelname
(
const
text
*
relName
,
ItemPointer
);
/* timestamp.c */
extern
time_t
timestamp_in
(
const
char
*
timestamp_str
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录