Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
30ad4273
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,发现更多精彩内容 >>
提交
30ad4273
编写于
3月 18, 1999
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix optimizer indexing not working for negative numbers.
上级
dc02fd70
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
4755 addition
and
4676 deletion
+4755
-4676
src/backend/parser/gram.c
src/backend/parser/gram.c
+4722
-4673
src/backend/parser/gram.y
src/backend/parser/gram.y
+33
-3
未找到文件。
src/backend/parser/gram.c
浏览文件 @
30ad4273
此差异已折叠。
点击以展开。
src/backend/parser/gram.y
浏览文件 @
30ad4273
...
...
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.6
2 1999/03/17 21:02:57
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.6
3 1999/03/18 21:39:56
momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -79,6 +79,7 @@ static char *FlattenStringList(List *list);
static char *fmtId(char *rawid);
static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr);
static void param_type_init(Oid *typev, int nargs);
static Node *doNegate(Node *n);
Oid param_type(int t); /* used in parse_expr.c */
...
...
@@ -3695,7 +3696,7 @@ a_expr: attr opt_indirection
$$ = (Node *)n;
}
| '-' a_expr %prec UMINUS
{ $$ =
makeA_Expr(OP, "-", NULL,
$2); }
{ $$ =
doNegate(
$2); }
| a_expr '+' a_expr
{ $$ = makeA_Expr(OP, "+", $1, $3); }
| a_expr '-' a_expr
...
...
@@ -3710,9 +3711,13 @@ a_expr: attr opt_indirection
{ $$ = makeA_Expr(OP, "<", $1, $3); }
| a_expr '>' a_expr
{ $$ = makeA_Expr(OP, ">", $1, $3); }
/* We allow this for standards-broken SQL products, like MS stuff */
| a_expr '=' NULL_P
{ $$ = makeA_Expr(ISNULL, NULL, $1, NULL); }
| NULL_P '=' %prec '-' a_expr
{ $$ = makeA_Expr(ISNULL, NULL, $3, NULL); }
| a_expr '=' a_expr
{ $$ = makeA_Expr(OP, "=", $1, $3); }
| ':' a_expr
...
...
@@ -4348,7 +4353,7 @@ b_expr: attr opt_indirection
$$ = (Node *)n;
}
| '-' b_expr %prec UMINUS
{ $$ =
makeA_Expr(OP, "-", NULL,
$2); }
{ $$ =
doNegate(
$2); }
| b_expr '+' b_expr
{ $$ = makeA_Expr(OP, "+", $1, $3); }
| b_expr '-' b_expr
...
...
@@ -5678,3 +5683,28 @@ Oid param_type(int t)
return InvalidOid;
return param_type_info[t - 1];
}
/*
* The optimizer doesn't like '-' 4, but wants an integer of -4, so we
* try to merge the minus into the constant.
*/
static Node *doNegate(Node *n)
{
if (IsA(n, A_Const))
{
A_Const *con = (A_Const *)n;
if (con->val.type == T_Integer)
{
con->val.val.ival = -con->val.val.ival;
return n;
}
if (con->val.type == T_Float)
{
con->val.val.dval = -con->val.val.dval;
return n;
}
}
return makeA_Expr(OP, "-", NULL, n);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录