Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Abaizimoyi
oceanbase
提交
3adc8b24
O
oceanbase
项目概览
Abaizimoyi
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3adc8b24
编写于
2月 09, 2023
作者:
Y
yinyj17
提交者:
ob-robot
2月 09, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix group by pullup bug with shared subquery
上级
6d3dcc7c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
2 addition
and
46 deletion
+2
-46
src/sql/rewrite/ob_transform_groupby_pullup.cpp
src/sql/rewrite/ob_transform_groupby_pullup.cpp
+2
-46
未找到文件。
src/sql/rewrite/ob_transform_groupby_pullup.cpp
浏览文件 @
3adc8b24
...
...
@@ -682,12 +682,9 @@ int ObTransformGroupByPullup::get_trans_view(ObDMLStmt *stmt, ObSelectStmt *&vie
int
ObTransformGroupByPullup
::
do_groupby_pull_up
(
ObSelectStmt
*
stmt
,
PullupHelper
&
helper
)
{
int
ret
=
OB_SUCCESS
;
ObSEArray
<
ObRawExpr
*
,
4
>
view_columns
;
ObSEArray
<
ObRawExpr
*
,
4
>
stmt_columns
;
ObSEArray
<
ObRawExpr
*
,
4
>
unique_exprs
;
ObSEArray
<
ObRawExpr
*
,
4
>
aggr_column
;
ObSEArray
<
ObRawExpr
*
,
4
>
aggr_select
;
ObSEArray
<
ObRawExpr
*
,
4
>
pullup_exprs
;
TableItem
*
table_item
=
NULL
;
ObSelectStmt
*
subquery
=
NULL
;
ObSqlBitSet
<>
ignore_tables
;
...
...
@@ -742,47 +739,8 @@ int ObTransformGroupByPullup::do_groupby_pull_up(ObSelectStmt *stmt, PullupHelpe
}
if
(
OB_SUCC
(
ret
))
{
//提取select item、group by expr、having condition的column expr,在视图内创建select item
//在stmt内创建对应的column expr
if
(
OB_FAIL
(
wrap_case_when_if_necessary
(
*
subquery
,
helper
,
aggr_select
)))
{
LOG_WARN
(
"failed to wrap case when"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
append
(
pullup_exprs
,
aggr_select
)))
{
LOG_WARN
(
"failed to append pullup exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
append
(
pullup_exprs
,
subquery
->
get_group_exprs
())))
{
LOG_WARN
(
"failed to append pullup exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
append
(
pullup_exprs
,
subquery
->
get_aggr_items
())))
{
LOG_WARN
(
"failed to append pullup exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
append
(
pullup_exprs
,
subquery
->
get_having_exprs
())))
{
LOG_WARN
(
"failed to append pullup exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
ObRawExprUtils
::
extract_column_exprs
(
pullup_exprs
,
view_columns
)))
{
LOG_WARN
(
"failed to extract column exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
ObTransformUtils
::
create_columns_for_view
(
ctx_
,
*
table_item
,
stmt
,
view_columns
,
stmt_columns
)))
{
LOG_WARN
(
"failed to create view columns"
,
K
(
ret
));
}
}
if
(
OB_SUCC
(
ret
))
{
ObRawExprCopier
copier
(
*
ctx_
->
expr_factory_
);
//拉出select aggr items, group by exprs、aggr items、having exprs
if
(
OB_FAIL
(
copier
.
add_replaced_expr
(
view_columns
,
stmt_columns
)))
{
LOG_WARN
(
"failed to add replaced expr"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
copier
.
add_skipped_expr
(
subquery
->
get_subquery_exprs
(),
false
)))
{
LOG_WARN
(
"failed to add direct replace exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
copier
.
copy_on_replace
(
subquery
->
get_group_exprs
(),
subquery
->
get_group_exprs
())))
{
LOG_WARN
(
"failed to copy on replace group exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
copier
.
copy_on_replace
(
subquery
->
get_aggr_items
(),
subquery
->
get_aggr_items
())))
{
LOG_WARN
(
"failed to copy on replace aggr items"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
copier
.
copy_on_replace
(
subquery
->
get_having_exprs
(),
subquery
->
get_having_exprs
())))
{
LOG_WARN
(
"failed to copy on replace having exprs"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
copier
.
copy_on_replace
(
aggr_select
,
aggr_select
)))
{
LOG_WARN
(
"failed to copy on replace aggr select"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
stmt
->
replace_relation_exprs
(
aggr_column
,
aggr_select
)))
{
LOG_WARN
(
"failed to replace inner stmt expr"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
append
(
stmt
->
get_group_exprs
(),
subquery
->
get_group_exprs
())))
{
...
...
@@ -803,12 +761,10 @@ int ObTransformGroupByPullup::do_groupby_pull_up(ObSelectStmt *stmt, PullupHelpe
subquery
->
get_having_exprs
().
reset
();
if
(
OB_FAIL
(
subquery
->
adjust_subquery_list
()))
{
LOG_WARN
(
"failed to adjust subquery list"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
stmt
->
adjust_subquery_list
(
)))
{
LOG_WARN
(
"failed to
adjust subquery
list"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
ObTransformUtils
::
generate_select_list
(
ctx_
,
stmt
,
table_item
)))
{
LOG_WARN
(
"failed to
generate select
list"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
stmt
->
formalize_stmt
(
ctx_
->
session_info_
)))
{
LOG_WARN
(
"failed to formalize stmt"
,
K
(
ret
));
}
else
{
//do nothing
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录