Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
51f62ea4
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,发现更多精彩内容 >>
提交
51f62ea4
编写于
9月 02, 1999
作者:
T
Tom Lane
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rule deparser didn't handle unary operators correctly.
上级
68c32348
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
74 addition
and
22 deletion
+74
-22
src/backend/utils/adt/ruleutils.c
src/backend/utils/adt/ruleutils.c
+74
-22
未找到文件。
src/backend/utils/adt/ruleutils.c
浏览文件 @
51f62ea4
...
...
@@ -3,7 +3,7 @@
* out of it's tuple
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.2
4 1999/08/28 03:59:05
tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.2
5 1999/09/02 03:04:04
tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
...
...
@@ -43,8 +43,9 @@
#include "optimizer/clauses.h"
#include "optimizer/tlist.h"
#include "utils/lsyscache.h"
#include "catalog/pg_shadow.h"
#include "catalog/pg_index.h"
#include "catalog/pg_operator.h"
#include "catalog/pg_shadow.h"
#define BUFSIZE 8192
...
...
@@ -1270,6 +1271,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
case
T_Expr
:
{
Expr
*
expr
=
(
Expr
*
)
node
;
List
*
args
=
expr
->
args
;
/* ----------
* Expr nodes have to be handled a bit detailed
...
...
@@ -1279,15 +1281,56 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
{
case
OP_EXPR
:
strcat
(
buf
,
"("
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
get_leftop
(
expr
),
varprefix
));
strcat
(
buf
,
" "
);
strcat
(
buf
,
get_opname
(((
Oper
*
)
expr
->
oper
)
->
opno
));
strcat
(
buf
,
" "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
get_rightop
(
expr
),
varprefix
));
if
(
length
(
args
)
==
2
)
{
/* binary operator */
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
lfirst
(
args
),
varprefix
));
strcat
(
buf
,
" "
);
strcat
(
buf
,
get_opname
(((
Oper
*
)
expr
->
oper
)
->
opno
));
strcat
(
buf
,
" "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
lsecond
(
args
),
varprefix
));
}
else
{
/* unary operator --- but which side? */
Oid
opno
=
((
Oper
*
)
expr
->
oper
)
->
opno
;
HeapTuple
tp
;
Form_pg_operator
optup
;
tp
=
SearchSysCacheTuple
(
OPROID
,
ObjectIdGetDatum
(
opno
),
0
,
0
,
0
);
Assert
(
HeapTupleIsValid
(
tp
));
optup
=
(
Form_pg_operator
)
GETSTRUCT
(
tp
);
switch
(
optup
->
oprkind
)
{
case
'l'
:
strcat
(
buf
,
get_opname
(
opno
));
strcat
(
buf
,
" "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
lfirst
(
args
),
varprefix
));
break
;
case
'r'
:
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
lfirst
(
args
),
varprefix
));
strcat
(
buf
,
" "
);
strcat
(
buf
,
get_opname
(
opno
));
break
;
default:
elog
(
ERROR
,
"get_rule_expr: bogus oprkind"
);
}
}
strcat
(
buf
,
")"
);
return
pstrdup
(
buf
);
break
;
...
...
@@ -1295,12 +1338,18 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
case
OR_EXPR
:
strcat
(
buf
,
"("
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
get_leftop
(
expr
),
varprefix
));
strcat
(
buf
,
" OR "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
get_rightop
(
expr
),
(
Node
*
)
lfirst
(
args
),
varprefix
));
/* It's not clear that we can ever see N-argument
* OR/AND clauses here, but might as well cope...
*/
while
((
args
=
lnext
(
args
))
!=
NIL
)
{
strcat
(
buf
,
" OR "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
lfirst
(
args
),
varprefix
));
}
strcat
(
buf
,
")"
);
return
pstrdup
(
buf
);
break
;
...
...
@@ -1308,12 +1357,15 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
case
AND_EXPR
:
strcat
(
buf
,
"("
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
get_leftop
(
expr
),
varprefix
));
strcat
(
buf
,
" AND "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
get_rightop
(
expr
),
(
Node
*
)
lfirst
(
args
),
varprefix
));
while
((
args
=
lnext
(
args
))
!=
NIL
)
{
strcat
(
buf
,
" AND "
);
strcat
(
buf
,
get_rule_expr
(
qh
,
rt_index
,
(
Node
*
)
lfirst
(
args
),
varprefix
));
}
strcat
(
buf
,
")"
);
return
pstrdup
(
buf
);
break
;
...
...
@@ -1335,7 +1387,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
default:
printf
(
"
\n
%s
\n
"
,
nodeToString
(
node
));
elog
(
ERROR
,
"
E
xpr type not supported"
);
elog
(
ERROR
,
"
get_rule_expr: e
xpr type not supported"
);
}
}
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录