Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
c59839ac
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,发现更多精彩内容 >>
提交
c59839ac
编写于
10月 22, 2001
作者:
T
Tom Lane
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Consolidate tables of known system attributes into one table.
上级
b00c6c84
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
47 addition
and
70 deletion
+47
-70
src/backend/catalog/heap.c
src/backend/catalog/heap.c
+30
-11
src/backend/parser/parse_relation.c
src/backend/parser/parse_relation.c
+12
-56
src/include/catalog/heap.h
src/include/catalog/heap.h
+5
-3
未找到文件。
src/backend/catalog/heap.c
浏览文件 @
c59839ac
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.17
7 2001/10/06 23:21:43
tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.17
8 2001/10/22 22:47:57
tgl Exp $
*
*
* INTERFACE ROUTINES
...
...
@@ -151,6 +151,7 @@ static Form_pg_attribute SysAtt[] = {&a1, &a2, &a3, &a4, &a5, &a6, &a7};
/*
* This function returns a Form_pg_attribute pointer for a system attribute.
* Note that we elog if the presented attno is invalid.
*/
Form_pg_attribute
SystemAttributeDefinition
(
AttrNumber
attno
,
bool
relhasoids
)
...
...
@@ -164,6 +165,30 @@ SystemAttributeDefinition(AttrNumber attno, bool relhasoids)
return
SysAtt
[
-
attno
-
1
];
}
/*
* If the given name is a system attribute name, return a Form_pg_attribute
* pointer for a prototype definition. If not, return NULL.
*/
Form_pg_attribute
SystemAttributeByName
(
const
char
*
attname
,
bool
relhasoids
)
{
int
j
;
for
(
j
=
0
;
j
<
(
int
)
lengthof
(
SysAtt
);
j
++
)
{
Form_pg_attribute
att
=
SysAtt
[
j
];
if
(
relhasoids
||
att
->
attnum
!=
ObjectIdAttributeNumber
)
{
if
(
strcmp
(
NameStr
(
att
->
attname
),
attname
)
==
0
)
return
att
;
}
}
return
NULL
;
}
/* ----------------------------------------------------------------
* XXX END OF UGLY HARD CODED BADNESS XXX
* ---------------------------------------------------------------- */
...
...
@@ -350,16 +375,10 @@ CheckAttributeNames(TupleDesc tupdesc, bool relhasoids)
*/
for
(
i
=
0
;
i
<
natts
;
i
++
)
{
for
(
j
=
0
;
j
<
(
int
)
lengthof
(
SysAtt
);
j
++
)
{
if
(
relhasoids
||
SysAtt
[
j
]
->
attnum
!=
ObjectIdAttributeNumber
)
{
if
(
strcmp
(
NameStr
(
SysAtt
[
j
]
->
attname
),
NameStr
(
tupdesc
->
attrs
[
i
]
->
attname
))
==
0
)
elog
(
ERROR
,
"name of column
\"
%s
\"
conflicts with an existing system column"
,
NameStr
(
SysAtt
[
j
]
->
attname
));
}
}
if
(
SystemAttributeByName
(
NameStr
(
tupdesc
->
attrs
[
i
]
->
attname
),
relhasoids
)
!=
NULL
)
elog
(
ERROR
,
"name of column
\"
%s
\"
conflicts with an existing system column"
,
NameStr
(
tupdesc
->
attrs
[
i
]
->
attname
));
if
(
tupdesc
->
attrs
[
i
]
->
atttypid
==
UNKNOWNOID
)
elog
(
NOTICE
,
"Attribute '%s' has an unknown type"
"
\n\t
Proceeding with relation creation anyway"
,
...
...
src/backend/parser/parse_relation.c
浏览文件 @
c59839ac
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.5
6 2001/08/10 18:57:3
7 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.5
7 2001/10/22 22:47:5
7 tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -18,6 +18,7 @@
#include "access/heapam.h"
#include "access/htup.h"
#include "catalog/heap.h"
#include "catalog/pg_type.h"
#include "nodes/makefuncs.h"
#include "parser/parsetree.h"
...
...
@@ -43,43 +44,6 @@ static int specialAttNum(char *a);
static
void
warnAutoRange
(
ParseState
*
pstate
,
char
*
refname
);
/*
* Information defining the "system" attributes of every relation.
*/
static
struct
{
char
*
attrname
;
/* name of system attribute */
int
attrnum
;
/* its attribute number (always < 0) */
Oid
attrtype
;
/* its type id */
}
special_attr
[]
=
{
{
"ctid"
,
SelfItemPointerAttributeNumber
,
TIDOID
},
{
"oid"
,
ObjectIdAttributeNumber
,
OIDOID
},
{
"xmin"
,
MinTransactionIdAttributeNumber
,
XIDOID
},
{
"cmin"
,
MinCommandIdAttributeNumber
,
CIDOID
},
{
"xmax"
,
MaxTransactionIdAttributeNumber
,
XIDOID
},
{
"cmax"
,
MaxCommandIdAttributeNumber
,
CIDOID
},
{
"tableoid"
,
TableOidAttributeNumber
,
OIDOID
}
};
#define SPECIALS ((int) lengthof(special_attr))
/*
* refnameRangeOrJoinEntry
* Given a refname, look to see if it matches any RTE or join table.
...
...
@@ -1001,39 +965,31 @@ attnameAttNum(Relation rd, char *a)
static
int
specialAttNum
(
char
*
a
)
{
int
i
;
for
(
i
=
0
;
i
<
SPECIALS
;
i
++
)
if
(
strcmp
(
special_attr
[
i
].
attrname
,
a
)
==
0
)
return
special_attr
[
i
].
attrnum
;
Form_pg_attribute
sysatt
;
sysatt
=
SystemAttributeByName
(
a
,
true
/* "oid" will be accepted */
);
if
(
sysatt
!=
NULL
)
return
sysatt
->
attnum
;
return
InvalidAttrNumber
;
}
/* given attribute id, return type of that attribute */
/*
* given attribute id, return type of that attribute
*
* This should only be used if the relation is already
* heap_open()'ed. Use the cache version get_atttype()
* for access to non-opened relations.
*
* Note: we don't bother to check rd->rd_rel->relhasoids; we assume that
* the caller will only ask about OID if that column has been found valid.
*/
Oid
attnumTypeId
(
Relation
rd
,
int
attid
)
{
if
(
attid
<
0
)
if
(
attid
<
=
0
)
{
int
i
;
Form_pg_attribute
sysatt
;
for
(
i
=
0
;
i
<
SPECIALS
;
i
++
)
{
if
(
special_attr
[
i
].
attrnum
==
attid
)
return
special_attr
[
i
].
attrtype
;
}
/* negative but not a valid system attr? */
elog
(
ERROR
,
"attnumTypeId: bogus attribute number %d"
,
attid
);
sysatt
=
SystemAttributeDefinition
(
attid
,
rd
->
rd_rel
->
relhasoids
);
return
sysatt
->
atttypid
;
}
/*
...
...
src/include/catalog/heap.h
浏览文件 @
c59839ac
/*-------------------------------------------------------------------------
*
* heap.h
* prototypes for functions in
lib
/catalog/heap.c
* prototypes for functions in
backend
/catalog/heap.c
*
*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: heap.h,v 1.3
7 2001/08/10 18:57:39
tgl Exp $
* $Id: heap.h,v 1.3
8 2001/10/22 22:47:57
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -47,8 +47,10 @@ extern void AddRelationRawConstraints(Relation rel,
extern
int
RemoveCheckConstraint
(
Relation
rel
,
const
char
*
constrName
,
bool
inh
);
extern
Form_pg_attribute
SystemAttributeDefinition
(
AttrNumber
attno
,
bool
relhasoids
);
extern
Form_pg_attribute
SystemAttributeByName
(
const
char
*
attname
,
bool
relhasoids
);
#endif
/* HEAP_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录