Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
a29f7ed5
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,发现更多精彩内容 >>
提交
a29f7ed5
编写于
10月 12, 2012
作者:
T
Tom Lane
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Get rid of COERCE_DONTCARE.
We don't need this hack any more.
上级
427fd885
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
16 addition
and
18 deletion
+16
-18
src/backend/executor/functions.c
src/backend/executor/functions.c
+3
-3
src/backend/nodes/nodeFuncs.c
src/backend/nodes/nodeFuncs.c
+2
-3
src/backend/optimizer/path/equivclass.c
src/backend/optimizer/path/equivclass.c
+2
-2
src/backend/optimizer/prep/prepunion.c
src/backend/optimizer/prep/prepunion.c
+1
-1
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/clauses.c
+4
-4
src/backend/parser/parse_agg.c
src/backend/parser/parse_agg.c
+2
-2
src/include/nodes/primnodes.h
src/include/nodes/primnodes.h
+2
-3
未找到文件。
src/backend/executor/functions.c
浏览文件 @
a29f7ed5
...
...
@@ -1572,7 +1572,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
rettype
,
-
1
,
get_typcollation
(
rettype
),
COERCE_
DONTCARE
);
COERCE_
IMPLICIT_CAST
);
/* Relabel is dangerous if TLE is a sort/group or setop column */
if
(
tle
->
ressortgroupref
!=
0
||
parse
->
setOperations
)
*
modifyTargetList
=
true
;
...
...
@@ -1618,7 +1618,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
rettype
,
-
1
,
get_typcollation
(
rettype
),
COERCE_
DONTCARE
);
COERCE_
IMPLICIT_CAST
);
/* Relabel is dangerous if sort/group or setop column */
if
(
tle
->
ressortgroupref
!=
0
||
parse
->
setOperations
)
*
modifyTargetList
=
true
;
...
...
@@ -1722,7 +1722,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
atttype
,
-
1
,
get_typcollation
(
atttype
),
COERCE_
DONTCARE
);
COERCE_
IMPLICIT_CAST
);
/* Relabel is dangerous if sort/group or setop column */
if
(
tle
->
ressortgroupref
!=
0
||
parse
->
setOperations
)
*
modifyTargetList
=
true
;
...
...
src/backend/nodes/nodeFuncs.c
浏览文件 @
a29f7ed5
...
...
@@ -554,8 +554,7 @@ exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod)
*
* This is primarily intended to be used during planning. Therefore, it
* strips any existing RelabelType nodes to maintain the planner's invariant
* that there are not adjacent RelabelTypes, and it uses COERCE_DONTCARE
* which would typically be inappropriate earlier.
* that there are not adjacent RelabelTypes.
*/
Node
*
relabel_to_typmod
(
Node
*
expr
,
int32
typmod
)
...
...
@@ -569,7 +568,7 @@ relabel_to_typmod(Node *expr, int32 typmod)
/* Apply new typmod, preserving the previous exposed type and collation */
return
(
Node
*
)
makeRelabelType
((
Expr
*
)
expr
,
type
,
typmod
,
coll
,
COERCE_
DONTCARE
);
COERCE_
EXPLICIT_CAST
);
}
/*
...
...
src/backend/optimizer/path/equivclass.c
浏览文件 @
a29f7ed5
...
...
@@ -431,13 +431,13 @@ canonicalize_ec_expression(Expr *expr, Oid req_type, Oid req_collation)
req_type
,
-
1
,
req_collation
,
COERCE_
DONTCARE
);
COERCE_
IMPLICIT_CAST
);
else
if
(
exprCollation
((
Node
*
)
expr
)
!=
req_collation
)
expr
=
(
Expr
*
)
makeRelabelType
(
expr
,
req_type
,
exprTypmod
((
Node
*
)
expr
),
req_collation
,
COERCE_
DONTCARE
);
COERCE_
IMPLICIT_CAST
);
}
return
expr
;
...
...
src/backend/optimizer/prep/prepunion.c
浏览文件 @
a29f7ed5
...
...
@@ -982,7 +982,7 @@ generate_setop_tlist(List *colTypes, List *colCollations,
exprType
(
expr
),
exprTypmod
(
expr
),
colColl
,
COERCE_
DONTCARE
);
COERCE_
IMPLICIT_CAST
);
}
tle
=
makeTargetEntry
((
Expr
*
)
expr
,
...
...
src/backend/optimizer/util/clauses.c
浏览文件 @
a29f7ed5
...
...
@@ -2789,7 +2789,7 @@ eval_const_expressions_mutator(Node *node,
relabel
->
resulttype
=
exprType
(
arg
);
relabel
->
resulttypmod
=
exprTypmod
(
arg
);
relabel
->
resultcollid
=
collate
->
collOid
;
relabel
->
relabelformat
=
COERCE_
DONTCARE
;
relabel
->
relabelformat
=
COERCE_
IMPLICIT_CAST
;
relabel
->
location
=
collate
->
location
;
/* Don't create stacked RelabelTypes */
...
...
@@ -3625,7 +3625,7 @@ simplify_function(Oid funcid, Oid result_type, int32 result_typmod,
fexpr
.
funcid
=
funcid
;
fexpr
.
funcresulttype
=
result_type
;
fexpr
.
funcretset
=
func_form
->
proretset
;
fexpr
.
funcformat
=
COERCE_
DONTCARE
;
fexpr
.
funcformat
=
COERCE_
EXPLICIT_CALL
;
fexpr
.
funccollid
=
result_collid
;
fexpr
.
inputcollid
=
input_collid
;
fexpr
.
args
=
args
;
...
...
@@ -3959,7 +3959,7 @@ evaluate_function(Oid funcid, Oid result_type, int32 result_typmod,
newexpr
->
funcid
=
funcid
;
newexpr
->
funcresulttype
=
result_type
;
newexpr
->
funcretset
=
false
;
newexpr
->
funcformat
=
COERCE_
DONTCARE
;
/* doesn't matter */
newexpr
->
funcformat
=
COERCE_
EXPLICIT_CALL
;
/* doesn't matter */
newexpr
->
funccollid
=
result_collid
;
/* doesn't matter */
newexpr
->
inputcollid
=
input_collid
;
newexpr
->
args
=
args
;
...
...
@@ -4089,7 +4089,7 @@ inline_function(Oid funcid, Oid result_type, Oid result_collid,
fexpr
->
funcid
=
funcid
;
fexpr
->
funcresulttype
=
result_type
;
fexpr
->
funcretset
=
false
;
fexpr
->
funcformat
=
COERCE_
DONTCARE
;
/* doesn't matter */
fexpr
->
funcformat
=
COERCE_
EXPLICIT_CALL
;
/* doesn't matter */
fexpr
->
funccollid
=
result_collid
;
/* doesn't matter */
fexpr
->
inputcollid
=
input_collid
;
fexpr
->
args
=
args
;
...
...
src/backend/parser/parse_agg.c
浏览文件 @
a29f7ed5
...
...
@@ -1001,7 +1001,7 @@ build_aggregate_fnexprs(Oid *agg_input_types,
args
,
InvalidOid
,
agg_input_collation
,
COERCE_
DONTCARE
);
COERCE_
EXPLICIT_CALL
);
/* see if we have a final function */
if
(
!
OidIsValid
(
finalfn_oid
))
...
...
@@ -1027,5 +1027,5 @@ build_aggregate_fnexprs(Oid *agg_input_types,
args
,
InvalidOid
,
agg_input_collation
,
COERCE_
DONTCARE
);
COERCE_
EXPLICIT_CALL
);
}
src/include/nodes/primnodes.h
浏览文件 @
a29f7ed5
...
...
@@ -316,7 +316,7 @@ typedef enum CoercionContext
}
CoercionContext
;
/*
* CoercionForm -
information showing how to display a function-call node
* CoercionForm -
how to display a node that could have come from a cast
*
* NB: equal() ignores CoercionForm fields, therefore this *must* not carry
* any semantically significant information. We need that behavior so that
...
...
@@ -328,8 +328,7 @@ typedef enum CoercionForm
{
COERCE_EXPLICIT_CALL
,
/* display as a function call */
COERCE_EXPLICIT_CAST
,
/* display as an explicit cast */
COERCE_IMPLICIT_CAST
,
/* implicit cast, so hide it */
COERCE_DONTCARE
/* special case for planner */
COERCE_IMPLICIT_CAST
/* implicit cast, so hide it */
}
CoercionForm
;
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录